web-dev-qa-db-ja.com

Terraform + DynamoDB:すべての属性にインデックスを付ける必要があります

複数(> 10)の属性を持つDynamoDBテーブルのTerraform構成を作成したい。また、すべての属性をインデックスとしてglobal_secondary_indexまたはlocal_secondary_indexに追加する必要はありません。しかし、terraform planコマンドを実行すると、次のエラーが発生します。

All attributes must be indexed. Unused attributes: ...

validateDynamoDbTableAttributes 関数のTerraformリポジトリで検証チェックを見つけました。

しかし、私が知っているように、ベストプラクティスはeach table in DynamoDB is limited to a maximum of five global secondary indexes and five local secondary indexes from DynamoDBのセカンダリインデックスの一般的なガイドライン です。

そして、私は10以上の属性を持っているので、それは私には問題のように見えます。

すべての属性にインデックスを付ける必要がある理由と、多数の属性がある場合の対処方法を理解したいと思います。

ありがとう!

14

テーブルを作成するときに、事前に使用するすべての属性を定義する必要がありますnot

attributeブロック内のaws_dynamodb_tableリソースは、アプリケーションで使用できる属性を定義するnotです。それらは テーブルとインデックスのキースキーマの定義 です。

たとえば、次のTerraformはハッシュキーのみを持つテーブルを定義します。

resource "aws_dynamodb_table" "test" {
  name           = "test-table-name"
  read_capacity  = 10
  write_capacity = 10
  hash_key       = "Attribute1"

  attribute {
    name = "Attribute1"
    type = "S"
  }
}

このテーブルのすべてのアイテムにはAttribute1、ただし、アプリケーションで追加の属性を作成できます Two items, both have Attribute1, but differing custom attributes

これは、AttributeDefinitionで定義する必要がない限り、10以上の属性を持つことができ、インデックスを作成する必要がないと言っているので問題ありません。

混乱の説明(attributeは混乱を招き、DynamoDB APIと一致しません)については、 this pull request を参照してください。

20
Eric M. Johnson