以下のようなコードの状態で terraform plan
terraform destroy
など、 state を参照する動作をするとエラーが出ていた。
resource "aws_lb_listener" "alb_https" { ... certificate_arn = module.certificates.certificate_arns[var.lb_certificates["alb"]] ... } # tfvars variable "lb_certificates" { type = map(string) } lb_certificates = { alb = "alb" alb-api = "alb-api" }
certificate_arn
が参照している module の内容で、掲題の通り Invalid index エラーが出て悩んでいた。
うーん?
となって検索したりすると、以下のような記事が出たりしていた。
list にしたらええねん! というのはわかるんだけど、いうてそんなことしなくても terraform init
した状態で過去動いていたので、コードベースの問題ではなくない……? と悩んでおり。
で、
実際調査しまくってようやくわかったのだけど、ローカルでは aws_lb_listener.alb_https
リソースが定義されているのに、 terraform state list
するとリモート (バックエンドは S3) にはこのリソースが存在しないのだった。
つまりローカルとリモートの状態不一致、がエラーの原因かつ根本的な問題らしかった。
元々該当の Terraform プロジェクトが外注に出していたのと、 -target=
などで単独でリソース削除したのを、作業内容の共有してもらえてなかったようだった。
チェックしたら色々リソース不一致が判明したので、オアアッと呻くなどしており。 何はともあれ、まあこういう事もあるよ、という備忘録でした。
いやーめっちゃ悩んだワ。