Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Terraform で変数を使う

More than 3 years have passed since last update.

Terrafromでは変数が利用でき、variableを定義して、値を注入する。
一番シンプルな例は次の通り。

provider "aws" {
  region = "ap-northeast-1"
}

variable "foo" {}

resource "aws_s3_bucket" "s3_bucket" {
  bucket = "${var.foo}"
  acl = "private"
}

variablefoo を宣言し、S3バケットのところで ${var.foo} 利用している。

値の注入方法

値の指定方法は次の4通りある。

  1. 実行時に指定
  2. コマンド引数による指定
  3. 環境変数による指定
  4. 設定ファイルによる指定

実行時に指定

変数を宣言した後に、terraform planなどを実行すると、コンソールでどんな値を指定するか聞かれるので、そこで指定する。

❯ terraform plan
var.foo
  Enter a value: bar

...

+ aws_s3_bucket.s3_bucket
...
    arn:                 "<computed>"
    bucket:              "bar"
    force_destroy:       "false"
...

Plan: 1 to add, 0 to change, 0 to destroy.

コマンド引数による指定

コマンド実行時 -var オプションを利用して値を指定する。
試しに terraform plan -var 'foo=test-bucket' を実行してみると、ちゃんと注入されている。

環境変数による指定

TF_VAR_ のプレフィックスを付けて環境変数を設定すると、その値が変数にロードされる。
TF_VAR_foo='env-test' terraform plan を実行すると同様の結果が得られる。

設定ファイルによる指定

変数の値を指定する設定ファイルを作成し、-var-fileで指定すると同様のことが出来る。

vars.tfvars

foo = "tfvars-file"

terraform plan -var-file=vars.tfvars を実行すると同様の結果が得られる。

変数戦略/設計

Terrafromは *.tf ファイルを全て読み込むので、
変数定義をvariables.tfなどに記述しておき、
実行時に-var-fileで値ファイルを指定して環境などを切り替えると良いかもしれない。

  • terrafrom plan -var-file=dev.tfvars
  • terrafrom plan -var-file=prod.tfvars

ディレクトリとか、ファイルはこんな感じにすると雰囲気はつかめると思う。

main.tf

provider "aws" { region = "ap-northeast-1" }
resource "aws_s3_bucket" "s3_bucket" {
  bucket = "${var.foo}"
  acl = "private"
}

variables.tf

variable "foo" {}

dev.tfvars

foo="dev-var"

prod.tfvars

foo="prod-var"

その他Tips

default を記述するとファイルを指定しなくてもそれになる。
また、type などで型も指定できる。
descriptionで、変数の説明もかけるので書いたほうがいい。

variable "foo" {
  type = "string"
  default = "default-var"
  description = "Sample Variable"
}

References

dwango
Born in the net, Connected by the net.
https://dwango.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away