更新 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
上的数据
- 我可以删除 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
我修改了我的 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 上的数据
- 我可以删除 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