とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

Terraformで日時を固定したい

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知らなかった・・・。

Terraform Registry

ドキュメントを見てみると、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の値が初回実行時の日時で固定されます。

知らなくて地味に困ってました。