更新 DynamoDB table 以通过 CloudFormation 反映新模式而不删除整个堆栈

Update DynamoDB table to reflect new schema through CloudFormation without deleting entire stack

我修改了我的 CloudFormation 模板,以便在我的一个 DynamoDB table 上具有不同的哈希和排序键。

当我尝试重新部署堆栈时,我得到 UPDATE_ROLLBACK_COMPLETE 并在检查时看到错误:

Error: CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename 'MYResourceXXX' and update the stack again.

这似乎是因为我有一个现有的 table,名称相同但架构不同。

我应该如何让 CloudFormation 重新创建具有相同名称但不同架构的 table?

使用测试帐户,我尝试进入控制台并手动删除 table,然后重新部署 CloudFormation 模板,但它不会重新创建新的 table,即使我删除了它,堆栈部署成功完成。

此测试帐户上的堆栈未处于 UPDATE_ROLLBACK_COMPLETE 状态,不确定这是否重要。

此外,当我检查堆栈是否存在偏差时,它正确地检测到 table 已被删除,但不确定如何修复它,或者我是否应该手动删除它。

如果您可以承受丢失原始 table 及其数据的后果,最好的解决方案是:

  • 重命名您的 cloudformation 堆栈中的 table
  • 更新堆栈。 Cloudformation 将删除旧的 table 并创建一个新的。不会有漂移。

如果你绝对需要有相同的名字。再走一遍上面的过程。

在下面的代码中,重命名资源名称 (MyDynamoDBTable) 和实际 table 名称 (DynamoDBTableName)。您可能还需要修改授予对 table.

访问权限的策略
MyDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
  AttributeDefinitions:
    - AttributeName: 'KeyId'
      AttributeType: 'S'
  KeySchema:
    - AttributeName: 'KeyId'
      KeyType: 'HASH'
  ProvisionedThroughput:
    ReadCapacityUnits: '5'
    WriteCapacityUnits: '5'
  TableName: !Ref DynamoDBTableName