【问题标题】:Why does adding a secondary index to a dynamodb table via cdk requires a recreation of the table?为什么通过 cdk 向 dynamodb 表添加二级索引需要重新创建表?
【发布时间】:2020-11-29 20:19:38
【问题描述】:

将二级索引添加到(之前通过部署的 cdk)dynamodb 表中

table.addLocalSecondaryIndex({
  indexName: "indexName",
  sortKey: {
    name: "keyName",
    type: dynamodb.AttributeType.STRING,
  },
  projectionType: dynamodb.ProjectionType.INCLUDE,
  nonKeyAttributes: ["attr1", "attr2"],
});

需要重新创建由 cdk 创建的 cloudformation 更改集中的表:

    "resourceChange": {
      "logicalResourceId": "---ID---",
      "action": "Modify",
      "physicalResourceId": "---ID---",
      "resourceType": "AWS::DynamoDB::Table",
      "replacement": "True",
      "moduleInfo": null,
      "details": [
        {
          "target": {
            "name": "LocalSecondaryIndexes",
            "requiresRecreation": "Always",
            "attribute": "Properties"
          },
          "causingEntity": null,
          "evaluation": "Static",
          "changeSource": "DirectModification"
        }
      ],
      "changeSetId": null,
      "scope": [
        "Properties"
      ]
    },
    "type": "Resource"
  }
  1. 这是为什么呢?
  2. 除了通过 aws-console 手动添加索引之外,是否可以通过某种方式阻止这种情况?

干杯, 赫尔赫

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb amazon-cloudformation aws-cdk


    【解决方案1】:

    这是为什么呢?

    LocalSecondaryIndexes 的更改需要替换 DynamoDB 表,因为LSI 只能在表创建时创建。相反,对GlobalSecondaryIndexes 的修改导致不会中断

    除了通过 aws-console 手动添加索引之外,是否可以通过某种方式防止这种情况?

    遗憾的是,如上所述,没有办法防止这种情况发生。如果您不想继续更换表格,可以使用 GSI

    【讨论】:

      【解决方案2】:

      您误认为全局和本地二级索引。建表后不能创建本地,只有全局可以。这就是您的代码失败的原因。

      【讨论】:

        猜你喜欢
        • 2020-02-09
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 2020-02-27
        • 2016-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多