【问题标题】:AWS-CDK - DynamoDB Initial DataAWS-CDK - DynamoDB 初始数据
【发布时间】:2020-10-24 17:08:06
【问题描述】:

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

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

关于如何满足生产工作负载的这一要求的任何想法?

【问题讨论】:

  • 添加WaitCondition 并使其依赖于其他资源的成功部署。到目前为止,您尝试过什么?
  • 对不起,我遗漏了一些东西,如何使用 WaitCondition 执行代码将数据加载到 DynamoDB 中?
  • 到目前为止你尝试过什么? CustomResource 可能是另一种选择。
  • 谢谢,CustomResource 似乎正是我一直在寻找的。如果您愿意这样回答,我很乐意接受。
  • 我很乐意提供帮助。

标签: amazon-web-services aws-cdk


【解决方案1】:

您可以使用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);

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-11-04
      • 2020-02-09
      • 2021-12-14
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      相关资源
      最近更新 更多