通过AWS放大,我正在尝试找到使用数据/资源创建的DynamoDB表的表名。我怎么能找到呢?

问题描述 投票:0回答:1
resource.tsfile

const schema = a .schema({ UserProfileFlags: a.customType({ isBetaUser: a.boolean(), isFounder: a.boolean(), isBanned: a.boolean(), isSuspended: a.boolean(), isVerified: a.boolean(), isDeleted: a.boolean(), }), UserProfile: a .model({ userName: a.string().required(), owner: a .string() .authorization((allow) => [allow.owner().to(['read', 'delete'])]), ...

在Dynamo中定义一个名为userProfile的数据库。可以正常工作,创建数据库并存在表。现在,我正在尝试创建一个函数以访问该表。我尝试了许多迭代,但是它们都有错误/不会编译或工作:

我发现了这一点:
import { DynamoDB } from 'aws-sdk';
import { getDataSource } from '@aws-amplify/backend-function';
import type { Schema } from '../../data/resource';

const dynamodb = new DynamoDB.DocumentClient();

export const handler: Schema['createEmptyProfile']['handler'] = async (event, context) => {
  const dataSource = getDataSource(context);
  const TABLE_NAME = dataSource.resources.UserProfile.tableName;

这个人告诉我,

import { getDataSource } from '@aws-amplify/backend-function';

是一个问题:

Module'“@aws-amplify/backend-function”'没有导出的成员'getDatasource'.ts(2305)


我也尝试过以下操作: NPX AMPX生成GraphQl-Client-Code-Out /GraphQl

然后

import { env } from "$amplify/env/post-confirmation"; ... endpoint: env.AMPLIFY_DATA_GRAPHQL_ENDPOINT, ...

但这也显示了Amplify_data_graphql_endpoint是未定义的,如果我在生成的.TS文件中查看,我也看不到它。 这是有道理的,因为我不确定它在部署时如何工作,因为它需要不同的表名称。这一切都与本地沙箱相对。

我可以找到的文档链接是:

https://docs.amplify.aws/react/build-a-backend/functions/exampleas/create-user-profile-record/

    

您可以在

defineBackend()

之后获取对表名称(和其他详细信息)的访问,如:

backend.data.resources.tables["UserProfile"].tableName

但是,为了在lambda函数中使用它,将其添加为env var中的函数:
amazon-web-services aws-lambda amazon-dynamodb aws-amplify
1个回答
0
投票
backend.createEmptyProfile.addEnvironment("USER_PROFILE_TABLE", backend.data.resources.tables["UserProfile"].tableName);

在功能中,只需以此访问:

import { env } from "$amplify/env/createEmptyProfile"; const TABLE_NAME = env.USER_PROFILE_TABLE;

注:

“ env”将在本地更新(因此您不会遇到TS错误)。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.