使用 Terraform 更改 hash_key 会导致表已存在错误
Posted
技术标签:
【中文标题】使用 Terraform 更改 hash_key 会导致表已存在错误【英文标题】:Changing hash_key with Terraform causes Table already exists error 【发布时间】:2021-05-28 22:33:39 【问题描述】:我有一个用这个 Terraform 创建的 DynamoDB 表:
resource "aws_dynamodb_table" "materials_table"
name = "materials"
hash_key = "MATERIAL"
billing_mode = "PROVISIONED"
read_capacity = 5
write_capacity = 5
attribute
name = "MATERIAL"
type = "S"
表已成功填充(有 4 条记录,如 this post 中所述)但为了解决问题(在那篇文章中)我添加了一个字段 PK
并将其设置为 hash_key
字段,用这个:
resource "aws_dynamodb_table" "materials_table"
name = "materials"
hash_key = "PK"
billing_mode = "PROVISIONED"
read_capacity = 5
write_capacity = 5
attribute
name = "PK"
type = "S"
这导致运行terraform apply
时出现以下错误:
Error: error creating DynamoDB Table: ResourceInUseException: Table already exists: materials
我需要在.tf
中做什么才能让更改被接受?
【问题讨论】:
【参考方案1】:不允许更改 DynamoDB 中的某些属性,例如更改分区键、添加本地二级索引等。
当发生此类更改时,它需要替换资源,并且要替换,它会尝试删除并重新创建资源。在这个过程中,如果表已经存在,就会失败。
唯一的选择是删除堆栈或手动删除 DynamoDB 表并让模板再次创建它。或者重命名表格。
Documentation表示会强制新资源
hash_key - (必需,强制使用新资源)用作 哈希(分区)键。
【讨论】:
我使用的是 Terraform,而不是 CloudFormation。 我原以为要删除该表,但该错误表明未尝试此操作。 我想,它会先尝试创建表然后删除它。 所以重命名表应该有助于删除它..? 100% 。重命名肯定会有所帮助。以上是关于使用 Terraform 更改 hash_key 会导致表已存在错误的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Terraform 管理 BigQuery 表的架构更改
如何在terraform中更改GKE Cluster的节点池中的节点名称?