TerraformでDynamoDBに対してaws_dynamodb_table_itemでマップを含むアイテムを挿入しようとして
resource "aws_dynamodb_table_item" "test_item01" {
table_name = "${aws_dynamodb_table.test_table.name}"
hash_key = "${aws_dynamodb_table.test_table.hash_key}"
item = <<ITEM
{
"id": {"S": "test01"},
"foo": {
"a": {"S": "aaa"},
"b": {"S": "bbb"}
}
}
ITEM
}
こういう表記をすると
aws_dynamodb_table_item.test_item01: Invalid format of “item”: Decoding failed: json: cannot unmarshal object into Go struct field AttributeValue.B of type []uint8
というエラーが出たり、更にマップをネストさせると
aws_dynamodb_table_item.test_item01: ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
というエラーが出ます。
正しくは
item = <<ITEM
{
"id": {"S": "test01"},
"foo": {"M": {
"nested": {"M": {
"a": {"S": "aaa"},
"b": {"S": "bbb"}
}}
}},
"bar": {"L": [
{"N": "1"},
{"N": "2"},
{"N": "3"}
]}
}
ITEM
こんな感じでマップならM、リストならLのように全てを{“型記述子”: 値}の形式で書く必要があります。
また数値もダブルクオートで囲う必要があります。
データ型記述子については公式ドキュメントのこのページに一覧があります。
コメント