概要
TerraformとDockerを活用してAzure環境を効率的に構築する方法を、自身の実践例をもとに紹介します。Terraformでのインフラコード化(IaC)に加え、Dockerを使って環境を分離し、開発やテスト時の再現性を高めることを目指しました。また、Azure CLIを使った認証やリソースの初期化もセットで自動化することで、実際の運用で役立つワークフローを作っています。
使用技術
- Terraform(Ver 1.6.6)
- Azure CLI
- Docker
- Makefile
Docker ComposeによるTerraform環境の構築
Terraformの実行環境をコンテナ化し、複数の環境(例: 開発用、テスト用)をDocker Composeで管理する構成です。
version: '3.8'
services:
terraform:
build: .
volumes:
- .:/terraform
working_dir: /terraform
env_file:
- .env
Dockerfileによるカスタムイメージの作成
Terraform公式イメージをベースに、Azure CLIと必要なパッケージを追加インストールしたDockerfileを使用しました。
FROM hashicorp/terraform:1.6.6
RUN apk add --no-cache curl unzip bash python3 py3-pip gcc python3-dev musl-dev linux-headers make jq
RUN python3 -m venv /azure-cli-venv
ENV PATH="/azure-cli-venv/bin:$PATH"
RUN pip install azure-cli
WORKDIR /terraform
COPY . /terraform
このカスタムイメージにより、Terraform操作とAzure CLIを1つのコンテナ環境で統合的に利用可能にしました。
Azure CLIとTerraformの連携
login.shでの認証プロセス
このスクリプトでは、サービスプリンシパルを使用したAzure CLIでの認証を行います。認証情報を環境変数で管理していますが、Azure Key Vaultのシークレット管理ツールを使用することで、さらなるセキュリティ強化が可能です。
az login --service-principal --username ${CLIENT_ID} --password ${CLIENT_SECRET} --tenant ${TENANT_ID}
az account set --subscription ${SUBSCRIPTION_ID}
Makefileを用いた運用の効率化
Terraformの操作をシンプル化するため、Makefileを導入しました。
apply:
docker-compose run --rm --entrypoint "/bin/bash" terraform -c "sh login.sh; terraform fmt; terraform init; terraform apply"
コマンドの流れ:
1 login.shの実行: Azure CLIを用いた認証。
2 Terraformコマンドの実行:
・terraform fmt: コードフォーマットのチェック。
・terraform init: 必要なプロバイダーやモジュールの初期化。
・terraform apply: Azureリソースの作成。
これにより、make applyを実行するだけで、認証とTerraformの処理を一括して行えます。
終わりに
本記事では、TerraformとDockerを活用してAzure環境を効率化する手法を解説しました。Dockerで環境を分離し、TerraformとAzure CLIを組み合わせて自動化することで、作業の再現性を高めました。
今後は、CI/CDパイプラインの導入を検討し、さらに効率的で安全な運用を目指していきたいと思います。