今回は「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 TF_VAR_
followed by the name of a declared variable.
https://developer.hashicorp.com/terraform/language/v1.3.x/values/variables#environment-variables
TF_VAR_db_snapshot_arn
を環境変数で与えればterraform内では db_snapshot_arn
で読み取れるようだ
やってみる
環境変数設定する。
1 |
export TF_VAR_db_snapshot_arn=arn:aws:rds:ap-northeast-1:xxxxxxxxxx |
1 2 3 4 5 6 |
resource "aws_rds_cluster" "mysql" { # # 省略 # snapshot_identifier = db_snapshot_arn } |
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. |
.tfファイルに追加する。
1 2 3 |
variable "db_snapshot_arn" { type = string } |
1 2 3 4 5 6 |
resource "aws_rds_cluster" "mysql" { # # 省略 # snapshot_identifier = var.db_snapshot_arn } |
もう一度公式ドキュメントを見てみる
公式ドキュメントを読み直すとEnvironment Variables
項目は Assigning Values to Root Module Variables
配下にありました。
Variable に値を与えるために環境変数が使えるのであって単体で使用はできません。
学び
TF_VAR_example
と環境変数で設定することでTerraformの変数example
に値を与えることができる- ドキュメントは一部だけじゃなくてその前後も読もう
We are hiring!
ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!