4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

terraform v0.11.14 から v0.12.0 にマイグレーションしてみた

Last updated at Posted at 2019-05-23

概要

最近、業務でインフラ系をやらせていただいており、terraformとお友達になりました。
v0.11.14からv0.12.0にマイグレーションしたので、ハマった点を備忘録として残します。

マイグレーションを行う際に0.11系と0.12.0を結構行き来したので、tfenvの導入をお勧めします。

その1 aliasをつけたproviderが参照できない

別ファイルに定義したaliasをつけたproviderを、moduleで参照している場合参照ができなくなりました。
以下のような例です。

main.tf
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"
}
ex-module/main.tf
data "aws_acm_certificate" "acm" {
    provider = aws.us-east-1
    domain = var.certificate_domain
}

回避策

v0.12からmodule内に直接定義する必要があります。

main.tf
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"
}
ex-module/main.tf
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からはリソース名を数字で始めることができなくなったので、英文字か記号から始まるように修正しなければなりません。
以下のような例です。

main.tf
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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?