【问题标题】:Changing hash_key with Terraform causes Table already exists error使用 Terraform 更改 hash_key 会导致表已存在错误
【发布时间】: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 中做什么才能让更改被接受?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb terraform-provider-aws terraform0.14.7


    【解决方案1】:

    不允许更改 DynamoDB 中的某些属性,例如更改分区键、添加本地二级索引等。

    当发生此类更改时,它需要替换资源,并且要替换,它会尝试删除并重新创建资源。在这个过程中,如果表已经存在,就会失败。

    唯一的选择是删除堆栈或手动删除 DynamoDB 表并让模板再次创建它。或者重命名表格。

    Documentation表示会强制新资源

    hash_key - (必需,强制使用新资源)用作 哈希(分区)键。

    【讨论】:

    • 我使用的是 Terraform,而不是 CloudFormation。
    • 我原以为要删除该表,但该错误表明未尝试此操作。
    • 我想,它会先尝试创建表然后删除它。
    • 所以重命名表应该有助于删除它..?
    • 100% 。重命名肯定会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2011-10-24
    • 2011-12-11
    • 2020-08-13
    相关资源
    最近更新 更多