コンテンツにスキップ

Terraform - Variables

概要

variables.tfでリソースに指定するパラメータの値を変数として定義する方法について、詳細をまとめます

全体像

以下にリソース:VPCのCIDRに変数を指定する例を示します
同一ファイル上にvarialberesourceを記述することもできますが、複雑なリソースやリソース数が増えてくると管理が判断になるため、リソースとは分離しておくことが一般的です

  • variables.tf

    variables "vpc-cidr" {
        type        = "String"
        description = "VPCのCIDR"
        default     = "172.16.0.0/16"
    }
    
  • main.tf

    resource "aws_vpc" "my_vpc" {
        cidr_block = var.vpc-cidr
    
        tags = {
            Name = "tf-example"
        }
    }
    

基本構文

variavles "<変数名>" {・・・}の形式で変数を定義します

  1. <変数名>

    変数名は予約後を除く、任意の名称を設定可能
    しかし、他変数名と重複できない

  2. {・・・}

    変数に対して、型(type) / 説明(descripton) / デフォルト値(default) を定義します

    1. type

      変数の型を定義します
      型の種類は、文字列(string) / 数値(number) / 真偽値(bool)が存在します

      以下のように記述することで、コレクションなど複雑な型を指定できます
      詳細については、【別ページ】を参照します

      ・list(<TYPE>)
      ・set(<TYPE>)
      ・map(<TYPE>)
      ・object({<ATTR NAME> = <TYPE>, ... })
      ・tuple([<TYPE>, ...])  
      
    2. description

      変数に対しての説明を記述します

    3. default

      変数が持つデフォルト値を定義します
      構築作業実施、コマンドの引数や別ファイルを利用して上書き可能です

変数の更新

variavles "<変数名>" {・・・}の形式で定義した変数はデフォルト値です
よって、後続処理にて、変数の値を変更(デフォルト値からの上書き)が可能です

  1. コマンド実行時にオプション指定で更新する
    terraformコマンドのオプションで-var '<変数名>=<値>'と指定することで変数に値を更新することができます

    $ terraform apply \
    -var 'vpc-cidr=192.168.0.0/16'
    
  2. 環境変数で更新する
    認証用のアクセスキー / シークレットアクセスキーなど、コマンド実行時の引数に設定しにくい変数の場合に利用する
    TF_VAR_<変数名>という名前の環境変数を事前定義することで、terraformコマンド実行時に自動で読み込まれます

    $ export TF_VAR_access_key="AKIAXXXXXXXXXXXXXXXXXX"
    $ export TF_VAR_secret_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    
  3. ファイルで更新する
    terraform.tfvarsというファイルを作成し、<変数名> = "<値>"で更新した変数を指定することもできます
    環境変数同様にterraformコマンド実行時に自動で読み込まれます

    • terraform.tfvars
      vpc-cidr=192.168.0.0/16