LoginSignup
39
15

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-03-17

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

環境の作成

terraform workspace new prd

現在の環境

terraform workspace show

環境の選択

terraform workspace select prd

環境の一覧

terraform workspace list
39
15
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
39
15