Terraform YAML変数からENV(TF_VAR_)への変換
Terraformの変数定義とYAMLベースのtfvarsをTF_VAR_プレフィックス規約を使用して環境変数に変換します。TerraformのENV変数読み込みルールを学びます。
Real-World Configs
詳細な説明
Terraformには環境変数から設定を読み込むための特定の規約があります:TF_VAR_<name>で始まる環境変数は自動的にTerraform変数<name>にマッピングされます。YAMLベースの変数ファイルをこの形式に変換することは、CI/CDパイプラインで一般的です。
YAML形式のTerraform変数(terraform.tfvars.yaml):
# インフラ設定
aws_region: us-east-1
environment: production
instance_type: t3.medium
instance_count: 3
# ネットワーク
vpc_cidr: "10.0.0.0/16"
subnet_cidrs:
- "10.0.1.0/24"
- "10.0.2.0/24"
- "10.0.3.0/24"
# データベース
db_instance_class: db.t3.medium
db_allocated_storage: 100
db_name: myapp_prod
db_username: admin
db_password: "super-secure-password-123!"
db_multi_az: true
# タグ
tags:
Project: MyApp
Environment: production
ManagedBy: terraform
ENV変数(TF_VAR_プレフィックス付き)への変換:
TF_VAR_aws_region=us-east-1
TF_VAR_environment=production
TF_VAR_instance_type=t3.medium
TF_VAR_instance_count=3
TF_VAR_vpc_cidr=10.0.0.0/16
TF_VAR_subnet_cidrs='["10.0.1.0/24","10.0.2.0/24","10.0.3.0/24"]'
TF_VAR_db_instance_class=db.t3.medium
TF_VAR_db_allocated_storage=100
TF_VAR_db_name=myapp_prod
TF_VAR_db_username=admin
TF_VAR_db_password='super-secure-password-123!'
TF_VAR_db_multi_az=true
TF_VAR_tags='{"Project":"MyApp","Environment":"production","ManagedBy":"terraform"}'
TerraformのENV変数ルール:
- プレフィックスは必須。
TF_VAR_で始まる環境変数のみが読み込まれます。プレフィックスが除去されてTerraform変数名とマッチします。 - 大文字小文字の区別。
TF_VAR_以降の変数名はTerraform変数名と正確に一致する必要があります:TF_VAR_aws_regionはvariable "aws_region"にマッチします。これは一般的なENV規約とは異なり小文字です。 - 文字列値 はそのまま渡されます:
TF_VAR_region=us-east-1。 - 複合型(リスト、マップ、オブジェクト)はHCLまたはJSON構文でエンコードする必要があります:
- リスト:
TF_VAR_subnet_cidrs='["10.0.1.0/24","10.0.2.0/24"]' - マップ:
TF_VAR_tags='{"key":"value"}'
- リスト:
- 数値とブール値 は文字列として渡され、Terraformが変数定義に基づいて型変換を行います。
優先順位(高い順):
-varコマンドラインフラグ*.auto.tfvarsファイルterraform.tfvarsファイルTF_VAR_環境変数.tfファイル内の変数デフォルト
CI/CDでの使用: GitHub ActionsやGitLab CIでは、パイプライン変数として設定できます:
env:
TF_VAR_environment: production
TF_VAR_db_password: ${{ secrets.DB_PASSWORD }}
これにより、バージョン管理にコミットされる.tfvarsファイルに機密値を格納することを回避できます。
ユースケース
YAML設定ファイルからのインフラ変数をTF_VAR_プレフィックス付きの環境変数として注入する必要があるTerraformデプロイメント用のCI/CDパイプライン(GitHub Actions、GitLab CI)をセットアップする場合。