【问题标题】:Terraform dynamodb error - all attributes must be indexedTerraform dynamodb 错误 - 必须为所有属性编制索引
【发布时间】:2021-06-20 01:49:40
【问题描述】:

我正在尝试使用以下 terraform 资源模块创建一个简单的 dynamodb 表。

运行 terraform 时出现以下错误: 所有属性都必须编入索引。未使用的属性:["pactitle" "ipadress" "Timestamp"]。 为什么我们需要索引所有属性? 如何解决?

resource "aws_dynamodb_table" "this" {
  count = var.create_table ? 1 : 0

  name             = var.name
  billing_mode     = var.billing_mode
  hash_key         = var.hash_key
  range_key        = var.range_key
  read_capacity    = var.read_capacity
  write_capacity   = var.write_capacity
  //stream_enabled   = var.stream_enabled
  //stream_view_type = var.stream_view_type

  dynamic "attribute" {
    for_each = var.attributes

    content {
      name = attribute.value.name
      type = attribute.value.type
    }
  }


  server_side_encryption {
    enabled     = var.server_side_encryption_enabled
    kms_key_arn = var.server_side_encryption_kms_key_arn
  }

  tags = merge(
    var.tags,
    {
      "Name" = format("%s", var.name)
    },
  )

  timeouts {
    create = lookup(var.timeouts, "create", null)
    delete = lookup(var.timeouts, "delete", null)
    update = lookup(var.timeouts, "update", null)
  }
}

调用模块


module "dynamodb_table" {

source = "./../../../modules/dynamodb"
 

  name      = "pack-audit-cert"
  hash_key  = "id"
  create_table= true
  read_capacity=5
  write_capacity=5
  billing_mode   = "PROVISIONED"


 range_key = "pacid"

  attributes = [
    {
      name = "id"
      type = "N"
    },
    {
      name = "pacid"
      type = "S"
    },
    {
      name = "pactitle"
      type = "S"
    },
    {
      name = "ipadress"
      type = "S"
    },
    {
      name = "Timestamp"
      type = "S"
    }
  ]


}

谢谢

【问题讨论】:

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


    【解决方案1】:

    该错误消息有点误导。您应该只在创建表时定义索引属性。由于 DynamoDB 是无模式数据库,因此它在创建表时不关心其他属性。

    【讨论】:

    • 谢谢。所以我们不能创建所有属性。 ?只在 terraform 中创建 hash ky& rankge 键
    • 是的。 DynamoDB 关心的唯一属性是哈希键和排序键。除了这两个属性之外,每个文档都可以具有完全不同的模式。在无模式数据库中没有模式强制。它没有任何东西可以用您尝试传递的其他属性来“创建”,这就是您收到错误消息的原因。
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多