update terraform v0.9
アップデート内容については、ここに書いてあります。
https://www.hashicorp.com/blog/terraform-0-9/
やはり個人的には、 env による複数環境の構築・運用のしやすさがどうなるのかが気になったのでさっそく試してみました。
サンプルで作成したレポジトリ
今回作成したレポジトリはこちらにあります。
https://github.com/Twinuma/terraform0.9-sample
説明
env に関してはここにドキュメントがあるのでこちらを見てください。
https://www.terraform.io/docs/state/environments.html
簡単に説明すると、
terraform env new dev
と実行すると、カレントディレクトリに terraform.tfstate.d/dev
が出来上がります。
次にterraform env select dev
と実行すると、カレントディレクトリに .terraform/environment
が出来上がります。このファイルには現在の環境情報が書いてます。この場合は dev
と記載されている。
apply
コマンドを実行すると terraform.tfstate.d/dev
配下に terraform.tfstate
が出来上がります。
今回私がやってみた環境を分ける方法
resource "aws_vpc" "vpc" {
cidr_block = "${terraform.env == "dev" ? var.dev_vpc_cidr : terraform.env == "stg" ? var.stg_vpc_cidr : var.prod_vpc_cidr}"
enable_dns_hostnames = true
tags {
Name = "${terraform.env}-${var.vpc_name}"
env = "${terraform.env}"
}
}
vpc_name = "vpc"
dev_vpc_cidr = "10.2.0.0/16"
stg_vpc_cidr = "10.1.0.0/16"
prod_vpc_cidr = "10.0.0.0/16"
terraform env select dev
terraform plan -var 'access_key=xxxxx' -var 'secret_key= xxxxx'
terraform apply -var 'access_key= xxxxx' -var 'secret_key= xxxxx'
このようにやれば一つのtfファイル内で条件分岐で環境分けができました。
なにげにタグにもちゃんと入れられるのも嬉しい。
もっとスマートにできる方法があるかもしれないので、もしよかったらコメントで教えてくれると嬉しいですm(_ _)m
環境の作成
terraform workspace new prd
現在の環境
terraform workspace show
環境の選択
terraform workspace select prd
環境の一覧
terraform workspace list