概要
TerraformでAWSリソースをいじる場合、EC2インスタンス上で実行するならIAMロールで問題ないが、ローカルから実行するとAPIキーの設定が必要になる。tfファイルをGitHubで管理するとき、APIキーが書かれているとそのままPushするわけにはいかないのでちょっと工夫がいりそう。そこで、tfvarsファイルを使えばそのへんをうまくやってくれる。
tfvarsファイル
terraformコマンドの -v
オプションで、コマンド実行時に変数を指定できる。 *.tfvars
ファイルはこのコマンドと同じ機能を持つ。また、terraform.tfvars
や *.auto.tfvars
というファイル名にしておけば、terraformコマンド実行ディレクトリに配置することで自動的に変数を読み込んでくれる。これで .gitignore
に *.tfstate
を記載しておけば、何も気にぜずgit pushできる。
使ってみる
secret.auto.tfvars
access_key="XXXXXXXXXXXX" secret_key="XXXXXXXXXXXX"
test.tf
variable "access_key" {} variable "secret_key" {} terraform { required_version = ">= 0.11.0" backend "s3" { bucket = "hogehoge" key = "test.tfstate" region = "ap-northeast-1" } } provider "aws" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "ap-northeast-1" } resource "aws_ecr_repository" "test-repos" { name = "test-repository" }
tfvarsで定義してvariablesでも再定義?が必要なので注意。また、tfstateファイルはローカルで保管するよりS3で保管するほうが健全。
感想
ちなみにtfファイルのprovider "aws"
でAPIキーを設定していない場合、~/.aws/credentials
の設定が読まれる。そっちに書いてあればAPIキーの記載がいらないけども、複数のアカウントを使い分けてるとtfvars使ったほうが良さそう。本当はECS関連の記事を書こうと思ったけど検証が発散して小ネタ記事になったのは秘密。