terraformをDocker環境から実行する

terraform

以下の記事を参考にDocker環境からterraformコマンドを実行させるよう、dockerを構成します。
https://qiita.com/Tocyuki/items/0cb655e6357d9bf0c40f

ファイル構成は以下の通りです。

.
├── Makefile
├── docker-compose.yml
├── .env
└── terraform
    ├── main.tf
    └── modules
        └── aws
            └── network
                └── vpc.tf

まずはdocker-compose用のファイルから見ていきましょう。
terraform用のDockerイメージは公式イメージがhashicorp社から出ているため、それを利用します。
今回はterraformのバージョンを0.15.5を利用します。

version: '3.6'

services:
   terraform:
    container_name: terraform
    image: hashicorp/terraform:0.15.5
    env_file:
      - .env
    volumes:
      - ./terraform:/terraform
    working_dir: /terraform
    entrypoint: terraform
    tty: true

volumesに./terraform:/terraformを指定しているため、docker環境内部に、ホスト環境の./terraformフォルダがマウントされています。
また、.envファイルによりAWS用のプロファイルを指定していますので、以下の通り、.envファイルを準備しましょう。

.envファイルは.gitignoreに必ず入れましょう!
gitリポジトリにプッシュすると即座に不正利用されます!

AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION=YOUR_DEFAULT_REGION

上記のdocker-compose.ymlを使用すると、以下のコマンドでdocker環境からterraformを実行できます。
このままでも十分docker環境からの利用は可能なのですが、毎回docker-composeコマンドを発行するのは面倒なのでMakefileを作成し、makeコマンドで簡易に実行可能にします。

docker-compose run --rm terraform init
docker-compose run --rm terraform plan
docker-compose run --rm terraform apply

Makefileでの実行環境作成

以下のようなMakefileを作成します。
terraform init, plan, applyなどの基本的なコマンドを実行できるようにしています。

.PHONY: init plan apply destroy validate ash

init:
	@docker-compose run --rm terraform init

plan:
	@docker-compose run --rm terraform plan

apply:
	@docker-compose run --rm terraform apply

destroy:
	@docker-compose run --rm terraform destroy

validate:
	@docker-compose run --rm terraform validate

ash:
	@docker-compose run --rm --entrypoint="/bin/ash" terraform

これでmakeコマンドを利用して基本的なterraformコマンドを実行可能です。

make init  # terraform init
make plan  # terraform plan
make apply # terraform apply
etc...

上記のコマンドでも足りない場合は、make ashをすることで、terraformコンテナ内部に入ることが出来るので、コンテナ内部で好きなコマンドを使用することが可能です。

コメント