概要
最近、業務でインフラ系をやらせていただいており、terraformとお友達になりました。
v0.11.14からv0.12.0にマイグレーションしたので、ハマった点を備忘録として残します。
マイグレーションを行う際に0.11系と0.12.0を結構行き来したので、tfenvの導入をお勧めします。
その1 aliasをつけたproviderが参照できない
別ファイルに定義したaliasをつけたproviderを、moduleで参照している場合参照ができなくなりました。
以下のような例です。
例
provider "aws" {
region = "ap-northeast-1"
profile = "ex-profile"
assume_role {
role_arn = "arn:aws:iam::00000000000:role/ex-role"
}
}
provider "aws" {
region = "us-east-1"
profile = "ex-profile"
alias = "us-east-1"
assume_role {
role_arn = "arn:aws:iam::00000000000:role/ex-role"
}
}
module "acm" {
source = "./ex-module"
certificate_domain = "example.com"
}
data "aws_acm_certificate" "acm" {
provider = aws.us-east-1
domain = var.certificate_domain
}
回避策
v0.12からmodule内に直接定義する必要があります。
provider "aws" {
region = "ap-northeast-1"
profile = "ex-profile"
assume_role {
role_arn = "arn:aws:iam::00000000000:role/ex-role"
}
}
module "acm" {
source = "./ex-module"
certificate_domain = "example.com"
}
provider "aws" {
region = "us-east-1"
profile = "ex-profile"
alias = "us-east-1"
assume_role {
role_arn = "arn:aws:iam::00000000000:role/ex-role"
}
}
data "aws_acm_certificate" "acm" {
provider = aws.us-east-1
domain = var.certificate_domain
}
その2 resource名を数字から始められない
例
v0.11まではresource名を数字から始めることができましたが、v0.12からはリソース名を数字で始めることができなくなったので、英文字か記号から始まるように修正しなければなりません。
以下のような例です。
resource "aws_route53_zone" "3150example_jp" {
name = "3150example.jp"
}
回避策
これは方法が複数あります。
destroy -> add で大丈夫なリソースであれば、リソース名を修正するだけで大丈夫です。
destroyされると困るリソースの場合は、私は以下の手順で修正を行いました。
- tfstateを書き換える
terraform state mv <aws_xxx_xxx.旧リソース名> <aws_xxx_xxx.新リソース名>
- 該当箇所を新リソース名に修正して、0.12にマイグレーション
- initやplan時にattributeエラーが出る場合は以下の手順を行う
- tfstateのdepens_onが1の修正前のリソース名になっている場合があるので、tfstateを旧リソース名でgrepしてみる。
- 引っかかる場合は新リソース名にして、tfstateを書き換える
terraform state push
まとめ
情報が少なく、この2つでなかなか時間を使ったので、誰かの助けになれば幸いです。
参考サイト
https://www.terraform.io/docs/configuration/providers.html
https://github.com/hashicorp/terraform/issues/20835