やってみたコード
resource "aws_dynamodb_table" "sequence-table" {
name = "sequence-table"
billing_mode = "PROVISIONED"
read_capacity = 20
write_capacity = 20
hash_key = "tablename"
attribute {
name = "tablename"
type = "S"
}
tags = {
Name = "${var.project}-${var.environment}-sequence-table"
Project = var.project
Env = var.environment
}
}
resource "aws_dynamodb_table_item" "sequence-table-item" {
table_name = aws_dynamodb_table.sequence-table.name
hash_key = aws_dynamodb_table.sequence-table.hash_key
item = <<ITEM
{
"tablename": {"S": "user"},
"seq": {"N": "0"}
}
ITEM
}
間違えたところ
DynamoDBをTerraformで作成するときには、「テーブル作成」「テーブル内で定義するアイテム」の2つがいる作りの
テーブルを作成する想定でした。
アイテムを作成する上で、「table_name」「hash_key」にテーブルの名前を入れていた
下記のような感じ(間違った書き方)
resource "aws_dynamodb_table_item" "sequence-table-item" {
table_name = aws_dynamodb_table.sequence-table.sequence-table
hash_key = aws_dynamodb_table.sequence-table.sequence-table.hash_key
item = <<ITEM
{
"tablename": {"S": "user"},
"seq": {"N": "0"}
}
ITEM
}
でも実際は一番上のコードの書き方が正しく、「name」「hash_key」だけでいい
これはTerraform内で判別してくれる。
下記コマンドを打つことで、指定されたアドレスに一致するファイル内のリソース属性を表示できます。
このときに、Terraform内で「table_name」「hash_key」には値が入っているので一番上のようなコードの書き方になります。
terraform state show [options] ADDRESS