terraform v0.9で追加された "env" を使って複数環境を作成してみる

  • 5
    いいね
  • 0
    コメント

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が出来上がります。

今回私がやってみた環境を分ける方法

vpc.tf
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}"
  }
}
terraform.tfvars
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