前置き
hashicorpが公開しているterraformのDocker Imageを便利に使ってみようという試み。
https://hub.docker.com/r/hashicorp/terraform/
3年前のver.0.6.14から各バージョンが揃ってます。
過去案件のTerraformに手を加える時、大抵バージョン違いによるエラーの嵐に白目を剥いているので助かる
環境
とりあえず自環境のバージョンを添えて。
- docker for mac (18.06.1-ce)
- docker-compose (1.22.0)
- aws-cli (1.16.14)
- direnv (2.14.0)
クイックスタート
docker/docker-composeだけ入っていれば実行できるシンプルな使い方。
###1.docker-composeの用意
version: '3'
services:
terraform:
image: hashicorp/terraform:0.11.10
volumes:
- ./:/workdir
working_dir: "/workdir"
environment:
- AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
- AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- AWS_REGION=xxxxxxxxxx
image
の末尾、image tagでバージョン指定。
environment
として直接アクセスキー・シークレットアクセスキーを書いてしまう方法なので、取り扱い注意。
2.コマンド実行
tfファイルの存在する任意のディレクトリ上でdocker-composeを実行。
docker-compose run --rm terraform plan
docker-compose run --rm
以降は通常のterraformコマンドと同じ形で使える。
ちなみに単発コマンド用な書き方のため、 docker-compose up
してもhelpが表示された後でstop状態なコンテナが残るだけです。
もうひとこえ
主にAWSのcredencials管理を気楽にするための一手間。
以下、"direnv"というツールを利用しています。
https://qiita.com/kompiro/items/5fc46089247a56243a62
###1.docker-composeの用意
version: '3'
services:
terraform:
image: hashicorp/terraform:0.11.10
volumes:
- ~/.aws:/root/.aws:ro
- ./:/workdir
working_dir: "/workdir"
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_REGION
- AWS_DEFAULT_REGION
- AWS_PROFILE
※こちらはtag(terraformのバージョン)指定の他はコピペで利用可能
volumes
read onlyでローカルのaws認証情報をマウント。
environment
環境変数のKEYだけを設定すると、ローカルに設定されたものがそのまま継承される。
2.認証情報の用意
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_REGION=xxxxxxxxxx
もしくはプロフィールで管理
aws configure --profile wasshoi
↓
export AWS_PROFILE=wasshoi
export AWS_REGION=ap-northeast-1
読み込ませる
direnv allow
2.コマンド実行
あとは同じ。
docker-compose run --rm terraform plan