AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

Terraform の Invalid index

以下のようなコードの状態で 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 エラーが出て悩んでいた。

うーん?

となって検索したりすると、以下のような記事が出たりしていた。

qiita.com

list にしたらええねん! というのはわかるんだけど、いうてそんなことしなくても terraform init した状態で過去動いていたので、コードベースの問題ではなくない……? と悩んでおり。

で、

実際調査しまくってようやくわかったのだけど、ローカルでは aws_lb_listener.alb_https リソースが定義されているのに、 terraform state list するとリモート (バックエンドは S3) にはこのリソースが存在しないのだった。

つまりローカルとリモートの状態不一致、がエラーの原因かつ根本的な問題らしかった。

元々該当の Terraform プロジェクトが外注に出していたのと、 -target= などで単独でリソース削除したのを、作業内容の共有してもらえてなかったようだった。

チェックしたら色々リソース不一致が判明したので、オアアッと呻くなどしており。 何はともあれ、まあこういう事もあるよ、という備忘録でした。

いやーめっちゃ悩んだワ。