はじめに
ローカル環境を汚さずに手軽にTerraformとAWS CLIを利用したい...
本記事では、TerraformとAWS CLIの公式Dockerイメージを用いて、Dockerコンテナ上でAWS環境用のTerraformとAWS CLIを実行する方法をご紹介します。
Terraformとは、AWSなどの様々なクラウドサービスの環境を、Terraform用の設定ファイルを元に自動的に構築するツールです。AWSのWeb上のコンソール画面から環境を作成するのではなく、Terraform用の設定ファイルから環境を作成、変更、削除することができ大変便利です。
AWS CLIとは、AWSの操作をコマンドライン上から行えるツールです。
前提条件
- AWSアカウントを持っている
- Dockerがインストールされている
- Windowsの場合: Docker Desktop for Windows
- Macの場合: Docker Desktop for Mac
TerraformとAWS CLIの環境構築
ファイル構成
下記の構成でファイルを作成します。
version: '3'
services:
terraform:
image: hashicorp/terraform:1.0.6
env_file:
- ./.aws/aws.env
volumes:
- ./terraform:/terraform
working_dir: /terraform
entrypoint: sh
tty: true
aws-cli:
image: amazon/aws-cli:2.2.36
env_file:
- ./.aws/aws.env
volumes:
- ./aws-cli:/aws-cli
working_dir: /aws-cli
entrypoint: sh
tty: true
.terraform
*.tfstate
*.tfstate.*
aws.env
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=ap-northeast-1
AWS_DEFAULT_REGION=ap-northeast-1
# プロバイダ
provider "aws" {
region = "ap-northeast-1"
}
# VPC
resource "aws_vpc" "test-vpc" {
cidr_block = "10.1.0.0/16"
instance_tenancy = "default"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "test-vpc"
}
}
IAMのアクセスキーとシークレットアクセスキーを設定
自分のAWSアカウントにログインし、下記のページからIAMのアクセスキーとシークレットアクセスキーを作成します。
下記の環境変数ファイルをコピーして、IAMのアクセスキーとシークレットアクセスキーを設定します。
コピー元: /.aws/aws.env.default
コピー先: /.aws/aws.env
/.aws/aws.env の追記例:
AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXX
不正アクセスの原因になるため、/.aws/aws.env
はGit等にプッシュしないようご注意ください。
/.gitignore
で/.aws/aws.env
をGit対象外にしています。
Terraformを実行
下記のコマンドを実行してTerraformを実行します。
今回はサンプルとしてtest-vpc
の名前でVPCを作成します。
実行対象ファイル: /terraform/test/main.tf
> docker-compose up -d
> docker-compose exec terraform sh
# cd /terraform/test/
# terraform init (Terraformの初期化を行う。初回に1回だけ実行)
# terraform plan (AWSの変更内容を確認します。まだAWSには反映されません)
# terraform apply (実際にAWS上にtest-vpcのVPCを作成します。
「Enter a value:」と表示されるので「yes」を入力します)
# terraform destroy (AWS上のtest-vpcのVPCを削除します。
「Enter a value:」と表示されるので「yes」を入力します)
# exit
> docker-compose down (もうDockerコンテナを利用しない場合)
AWS CLIを実行
下記のコマンドを実行してAWS CLIを実行します。
今回はサンプルとしてEC2のリージョン一覧を表示します。
> docker-compose up -d
> docker-compose exec aws-cli sh
# aws ec2 describe-regions (EC2のリージョン一覧を表示。エラーになる場合は /.aws/aws.env の内容が間違っている。q を入力すると終了)
# exit
> docker-compose down (もうDockerコンテナを利用しない場合)
まとめ
Dockerコンテナ上でTerraformとAWS CLIを使うことにより、ローカル環境を汚さずに手軽にTerraformとAWS CLIを利用することができました。
このファイル構成でgit等でソース管理することにより、新しいプロジェクトメンバーが増えた際に、Gitのクローンとdocker-compose up -d
の実行だけで、プロジェクト全体で同じバージョンのTerraformとAWS CLIのローカル環境を素早く作成することができます。