会員システムグループ 駆け出しSREの川端です。
今回は「Terraformで環境変数を使って変数値を与える」ということをやってみます。
GitHub ActionsなどのCI/CDで活用できます。
環境
1 2 3 4 5 6 7 |
$ terraform -v Terraform v1.3.0 on linux_amd64 + provider registry.terraform.io/hashicorp/aws v4.12.1 + provider registry.terraform.io/hashicorp/local v2.4.0 + provider registry.terraform.io/hashicorp/tls v4.0.4 |
実現したいこと
AWS RDSのクラスターを環境変数から与えたスナップショットARNで起動する
1 2 3 4 5 6 7 |
resource "aws_rds_cluster" "mysql" { # # 省略 # snapshot_identifier = 環境変数から与えたARN } |
公式ドキュメントを読んでみる
As a fallback for the other ways of defining variables, Terraform searches the environment of its own process for environment variables named
https://developer.hashicorp.com/terraform/language/v1.3.x/values/variables#environment-variablesTF_VAR_
followed by the name of a declared variable.
TF_VAR_db_snapshot_arn
を環境変数で与えればterraform内では db_snapshot_arn
で読み取れるようだ
やってみる
環境変数設定する。
1 |
export TF_VAR_db_snapshot_arn=arn:aws:rds:ap-northeast-1:xxxxxxxxxx |
.tfファイルを編集する。
1 2 3 4 5 6 |
resource "aws_rds_cluster" "mysql" { # # 省略 # snapshot_identifier = db_snapshot_arn } |
planを実行する。
1 |
terraform plan |
エラーが出ました。
1 2 3 4 5 6 |
│ Error: Invalid reference │ │ on aurora.tf line 63, in resource "aws_rds_cluster" "mysql": │ 63: snapshot_identifier = db_snapshot_arn │ │ A reference to a resource type must be followed by at least one attribute access, specifying the resource name. |
どうやらvariableの定義が必要らしい。。。
.tfファイルに追加する。
1 2 3 |
variable "db_snapshot_arn" { type = string } |
.tfファイルを修正する。
1 2 3 4 5 6 |
resource "aws_rds_cluster" "mysql" { # # 省略 # snapshot_identifier = var.db_snapshot_arn } |
再度plan実行。これでplanが通りました。
もう一度公式ドキュメントを見てみる
公式ドキュメントを読み直すと Environment Variables
項目は Assigning Values to Root Module Variables
配下にありました。
Variable に値を与えるために環境変数が使えるのであって単体で使用はできません。
学び
TF_VAR_example
と環境変数で設定することでTerraformの変数example
に値を与えることができる- ドキュメントは一部だけじゃなくてその前後も読もう