【问题标题】:Update DynamoDB table to reflect new schema through CloudFormation without deleting entire stack [duplicate]更新 DynamoDB 表以通过 CloudFormation 反映新模式,而不删除整个堆栈 [重复]
【发布时间】:2021-11-04 01:01:09
【问题描述】:

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

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

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

这似乎是因为我有一个同名但架构不同的现有表。

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

  • 我不需要备份这个表上的数据
  • 我可以删除表(手动或其他方式)
  • 我不能删除其他基础设施

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

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

此外,当我检查堆栈是否有漂移时,它会正确检测到表已被删除,但不确定如何修复它,或者我什至应该手动删除它。

【问题讨论】:

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


    【解决方案1】:

    如果您有能力丢失原始表及其数据,最好的解决方案是:

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

    如果您绝对需要使用相同的名称。再过一遍上面的过程。

    在下面的代码中,重命名资源名称 (MyDynamoDBTable) 和实际表名称 (DynamoDBTableName)。您可能还需要修改授予表访问权限的策略。

    MyDynamoDBTable:
    Type: AWS::DynamoDB::Table
    Properties:
      AttributeDefinitions:
        - AttributeName: 'KeyId'
          AttributeType: 'S'
      KeySchema:
        - AttributeName: 'KeyId'
          KeyType: 'HASH'
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
      TableName: !Ref DynamoDBTableName
    

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 2020-10-15
      • 2021-06-27
      • 2023-02-15
      • 2020-05-16
      • 1970-01-01
      • 2018-12-15
      • 2021-12-18
      • 2019-08-06
      相关资源
      最近更新 更多