ばーろぐわにる

SIerからWEB系?インフラエンジニアにジョブチェンジした見習いの備忘録。投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

Terraformのtfvarsを使ってAPIキーを読み込む

概要

TerraformでAWSリソースをいじる場合、EC2インスタンス上で実行するならIAMロールで問題ないが、ローカルから実行するとAPIキーの設定が必要になる。tfファイルをGitHubで管理するとき、APIキーが書かれているとそのままPushするわけにはいかないのでちょっと工夫がいりそう。そこで、tfvarsファイルを使えばそのへんをうまくやってくれる。

tfvarsファイル

www.terraform.io

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関連の記事を書こうと思ったけど検証が発散して小ネタ記事になったのは秘密。