EventBridge Scheduler で Lambda に渡すパラメーターを設定している時1に、terraform plan で JSON に差分が発生しました。
出た差分はこんな感じ。真ん中の方に whitespace changes
って書いてあるやつです。
$ terraform plan
(省略)
Terraform will perform the following actions:
# module.hoge.aws_scheduler_schedule.hoge_schedule will be updated in-place
~ resource "aws_scheduler_schedule" "hoge_schedule" {
id = "default/hoge"
name = "hoge"
# (5 unchanged attributes hidden)
~ target {
~ input = jsonencode( # whitespace changes
{
scheduled_time = "<aws.scheduler.scheduled-time>"
}
)
# (2 unchanged attributes hidden)
# (2 unchanged blocks hidden)
}
# (1 unchanged block hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
これを差分が出ないように修正した話です。
試したけどうまくいかなかったこと
whitespace changes
なので、JSON に空白が多かったり少なかったりするのが問題かと思ったのですが、差分には具体的にどこがいけないか表示されていないので試行錯誤しました。
-
jsonencode
で囲ってみたり、heredoc で書いてみたり-
jsonencode
は<
>
のエスケープがあるので、それも影響していそう - jsonencode - Functions - Configuration Language | Terraform | HashiCorp Developer
-
- AWS Console で JSON にスペース入れたり消したり
-
terraform console
でjsonencode
した結果などを参考に元のJSONを変更 - 結局 plan しても
whitespace changes
としか表示されなかったので断念
-
普通に定義
resource "aws_scheduler_schedule" "hoge_schedule" {
(省略)
input = {
scheduled_time = "<aws.scheduler.scheduled-time>"
}
}
}
jsonencode使用
resource "aws_scheduler_schedule" "hoge_schedule" {
(省略)
input = jsonencode({
scheduled_time = "<aws.scheduler.scheduled-time>"
})
}
}
heredoc
resource "aws_scheduler_schedule" "hoge_schedule" {
(省略)
input = <<-JSON
{
"scheduled_time": "<aws.scheduler.scheduled-time>"
}
JSON
}
}
最終的にどうやって解決したか
AWS CLI で取得した文字列と同じものを設定しました。
(terraform plan の差分は、terraform 内部で AWS の API を使って取得したものと比較したものなので、それをみると良い、というアドバイスをいただきました。)
$ aws scheduler get-schedule --name hoge_schedule
(省略)
"Input": "{\"scheduled_time\":\"<aws.scheduler.scheduled-time>\"}",
"{\"scheduled_time\":\"<aws.scheduler.scheduled-time>\"}"
が出てきたので、それを指定する。
resource "aws_scheduler_schedule" "hoge_schedule" {
(省略)
input = "{\"scheduled_time\":\"<aws.scheduler.scheduled-time>\"}"
}
}
この状態で再び plan したら差分がなくなりました。
おわりに
Terraform 難しいですね、
まだ Terraform に入門したばかりなので、毎日いろいろなエラーに翻弄されています。
少しずつ対処方法を覚えて、いつか Terraform マスターになりたいです。