Ser*_*key 5 amazon-web-services aws-cdk
将 AWS CDK 用于无服务器项目,但我遇到了一个症结。我的项目部署了一个 DynamoDB 表,我需要在执行 Lambda 函数之前填充数据。
需要加载的数据是通过调用 API 生成的,而不是可以通过 .json 文件或简单的东西加载的静态数据。
关于如何满足生产工作负载的这一要求的任何想法?
您可以使用AwsCustomResource来PutItem调用表。
AwsSdkCall initializeData = AwsSdkCall.builder()
.service("DynamoDB")
.action("putItem")
.physicalResourceId(PhysicalResourceId.of(tableName + "_initialization"))
.parameters(Map.ofEntries(
Map.entry("TableName", tableName),
Map.entry("Item", Map.ofEntries(
Map.entry("id", Map.of("S", "0")),
Map.entry("data", Map.of("S", data))
)),
Map.entry("ConditionExpression", "attribute_not_exists(id)")
))
.build();
AwsCustomResource tableInitializationResource = AwsCustomResource.Builder.create(this, "TableInitializationResource")
.policy(AwsCustomResourcePolicy.fromStatements(List.of(
PolicyStatement.Builder.create()
.effect(Effect.ALLOW)
.actions(List.of("dynamodb:PutItem"))
.resources(List.of(table.getTableArn()))
.build()
)))
.onCreate(initializeData)
.onUpdate(initializeData)
.build();
tableInitializationResource.getNode().addDependency(table);
Run Code Online (Sandbox Code Playgroud)
PutItem如果创建堆栈或table更新堆栈(tableName在这种情况下应该不同),将触发该操作。如果由于某种原因不起作用,您可以设置physicalResourceId为随机值,即UUID,以触发每次堆栈更新的操作(该操作是幂等的ConditionExpression)
| 归档时间: |
|
| 查看次数: |
1959 次 |
| 最近记录: |