从 AWS CDK 中的另一个堆栈更新 DynamoDB table
Update DynamoDB table from another stack in AWS CDK
我正在寻找 TypeScript 代码以使用 lambda 和 API 网关从另一个堆栈更新在一个堆栈中创建的 DynamoDB。两个堆栈都在相同的环境中。如果可行,请指教。
我对您的要求的理解:您之前使用 DynamoDB table 部署了一个 CDK 应用程序(我们称之为应用程序堆栈 DynamoStack
)。现在你有了一个新的堆栈——比如说,APIStack
——带有一个由 Lambda 目标支持的 API 网关。您的 APIStack
如何从 DynamoStack
访问 table 以便您的 Lambda 可以 read/write 访问 table?
更喜欢 Multi-Stack 应用程序
理想情况下,您可以将 APIStack
添加到包含您的 DynamoStack
的应用程序中。将相关堆栈分组在单个 CDK 应用程序中通常很好。如果这样做,在堆栈之间传递资源就很简单了。只需将 dynamodb.Table
从 DynamoStack
导出为 class 字段并将其作为道具传递给 APIStack
。
单独的应用程序
如果出于某种原因在单个应用程序中对堆栈进行分组不可行,连接 cross-stack 引用需要更多步骤。
在 DynamoStack
中,创建一个 CloudFormation 输出,其导出名称可以导入到其他堆栈中:
// DynamoStack.ts
new cdk.CfnOutput(this, 'TableArn', { value: table.tableArn, exportName: 'DemoTableArn' });
在 APIStack
中,使用导入的 ARN 创建一个 ITable 引用。用它来设置 Lambda env var 并让 lambda read-write 访问 table:
// ApiStack.ts
const tableArn = cdk.Fn.importValue('DemoTableArn');
const table: dynamodb.ITable = dynamodb.Table.fromTableArn(this, 'ITable', tableArn);
const func = new nodejs.NodejsFunction(this, 'MyHandlerFunction', {
entry: path.join(__dirname, 'func.ts'),
environment: {
TABLE_NAME: cdk.Arn.extractResourceName(tableArn, 'table'),
},
});
table.grantReadWriteData(func);
我正在寻找 TypeScript 代码以使用 lambda 和 API 网关从另一个堆栈更新在一个堆栈中创建的 DynamoDB。两个堆栈都在相同的环境中。如果可行,请指教。
我对您的要求的理解:您之前使用 DynamoDB table 部署了一个 CDK 应用程序(我们称之为应用程序堆栈 DynamoStack
)。现在你有了一个新的堆栈——比如说,APIStack
——带有一个由 Lambda 目标支持的 API 网关。您的 APIStack
如何从 DynamoStack
访问 table 以便您的 Lambda 可以 read/write 访问 table?
更喜欢 Multi-Stack 应用程序
理想情况下,您可以将 APIStack
添加到包含您的 DynamoStack
的应用程序中。将相关堆栈分组在单个 CDK 应用程序中通常很好。如果这样做,在堆栈之间传递资源就很简单了。只需将 dynamodb.Table
从 DynamoStack
导出为 class 字段并将其作为道具传递给 APIStack
。
单独的应用程序
如果出于某种原因在单个应用程序中对堆栈进行分组不可行,连接 cross-stack 引用需要更多步骤。
在 DynamoStack
中,创建一个 CloudFormation 输出,其导出名称可以导入到其他堆栈中:
// DynamoStack.ts
new cdk.CfnOutput(this, 'TableArn', { value: table.tableArn, exportName: 'DemoTableArn' });
在 APIStack
中,使用导入的 ARN 创建一个 ITable 引用。用它来设置 Lambda env var 并让 lambda read-write 访问 table:
// ApiStack.ts
const tableArn = cdk.Fn.importValue('DemoTableArn');
const table: dynamodb.ITable = dynamodb.Table.fromTableArn(this, 'ITable', tableArn);
const func = new nodejs.NodejsFunction(this, 'MyHandlerFunction', {
entry: path.join(__dirname, 'func.ts'),
environment: {
TABLE_NAME: cdk.Arn.extractResourceName(tableArn, 'table'),
},
});
table.grantReadWriteData(func);