Terraformにはtimestamp()関数がありますが、これは実行する度に日時が更新されます。
$ echo 'timestamp()' | terraform console "2024-09-27T11:08:57Z" $ echo 'timestamp()' | terraform console "2024-09-27T11:08:59Z"
これの何が問題なのかというと、aws_dynamodb_table_item
などで、日時のデータを入れたい時、例えば、createdAtにtimestamp()で値をセットしておくと、実行の度にcreatedAtが更新されてしまいます。公式のドキュメントにも書いてあります。
timestamp - Functions - Configuration Language | Terraform | HashiCorp Developer
For more stable time handling, see the Time Provider.
Time Providerを使うといいそうです。Time Provider知らなかった・・・。
ドキュメントを見てみると、time_staticというリソースがtimestampの永続的な変更を解決してくれるようです。
使い方は簡単
resource "time_static" "current" {} resource "aws_dynamodb_table_item" "example" { item = <<ITEM { "exampleHashKey": {"S": "something"}, "createdAt": {"S": ${time_static.current.rfc3339}} } ITEM }
こうすることでtime_staticリソースが作成された日時がステートに記録されるので、createdAtの値が初回実行時の日時で固定されます。
知らなくて地味に困ってました。