dockerでterraformを実行する

July 10, 2023

はじめに

docker で terraform を実行するための docker-compose.yml を作成しました。

メリット

  • 環境の統一
    • Docker は環境の統一を容易にします。異なるプラットフォームや OS で作業している場合でも、Docker コンテナ内で Terraform を実行することで、実行環境を一貫させることができます。
  • バージョン管理
    • Terraform のバージョン管理は重要です。異なるプロジェクトや環境で複数の Terraform バージョンを使用する場合、Docker コンテナ内で Terraform を実行することで、各プロジェクトや環境ごとに適切な Terraform バージョンを管理することができます。
    • windows ユーザーは tfenv が使えないので、docker で管理するのが良いかと思います。

やること

  • 環境変数のセット
export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_ACCESS_KEY_ID=xxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxx

docker-compose.yml ファイルの作成

version: "3"
services:
    terraform:
        image: hashicorp/terraform:1.5.2
        platform: linux/x86_64
        volumes:
            - ~/.aws:/root/.aws
            - ./:/workdir
        working_dir: "/workdir"
        environment:
            - AWS_ACCESS_KEY_ID
            - AWS_SECRET_ACCESS_KEY
            - AWS_DEFAULT_REGION
        entrypoint: sh -c 'terraform init &&
            terraform workspace select "${WORKSPACE}" 2>/dev/null ||
            terraform workspace new "${WORKSPACE}" &&
            terraform "${COMMAND}"'

terraform の実行

# コードフォーマッターの実行
export WORKSPACE="prod" COMMAND="fmt" && docker-compose -p プロジェクト名 run --rm terraform
# コード構文チェックの実行
export WORKSPACE="prod" COMMAND="validate" && docker-compose -p プロジェクト名 run --rm terraform
# 実行計画の確認
export WORKSPACE="prod" COMMAND="plan" && docker-compose -p プロジェクト名 run --rm terraform
Nifty tech tag lists from Wouter Beeftink