首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS-CDK - DynamoDB初始数据

AWS-CDK - DynamoDB初始数据
EN

Stack Overflow用户
提问于 2020-07-04 09:47:24
回答 2查看 2.6K关注 0票数 5

在一个无服务器项目中使用AWS CDK,但我遇到了一个症结。我的项目部署了一个DynamoDB表,在执行Lambda函数之前,我需要用数据填充该表。

需要加载的数据是通过进行API调用生成的,而不是可以通过.json文件或其他简单文件加载的静态数据。

对于如何满足生产工作负载的这一要求,您有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-22 00:27:32

您可以使用AwsCustomResource对表进行PutItem调用。

代码语言:javascript
复制
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);

如果创建了堆栈或更新了table (在这种情况下,tableName应该是不同的),则会触发PutItem操作。如果由于某些原因不起作用,可以将physicalResourceId设置为随机值,即UUID,以触发每次堆栈更新的操作(由于ConditionExpression,该操作是幂等的)

票数 6
EN

Stack Overflow用户

发布于 2020-07-04 18:05:58

CustomResource允许您编写自定义配置逻辑。在这种情况下,您可以在自定义资源中使用类似于AWS Lambda函数的内容来读取自定义json并更新DynamoDb。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62724486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档