LoginSignup
7
7

More than 3 years have passed since last update.

Docker-ComposeでTerraformを使う

Last updated at Posted at 2019-01-30

前置き

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の用意

docker-compose.yaml

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の用意

docker-compose.yaml
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.認証情報の用意

.envrc
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_REGION=xxxxxxxxxx

もしくはプロフィールで管理

aws configure --profile wasshoi

.envrc
export AWS_PROFILE=wasshoi
export AWS_REGION=ap-northeast-1

読み込ませる

direnv allow

2.コマンド実行

あとは同じ。

docker-compose run --rm terraform plan

おわり

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7