LoginSignup
1
2

More than 1 year has passed since last update.

Dockerコンテナ上でTerraformとAWS CLIを実行する方法

Last updated at Posted at 2021-09-21

はじめに

ローカル環境を汚さずに手軽にTerraformとAWS CLIを利用したい...

本記事では、TerraformとAWS CLIの公式Dockerイメージを用いて、Dockerコンテナ上でAWS環境用のTerraformとAWS CLIを実行する方法をご紹介します。

Terraformとは、AWSなどの様々なクラウドサービスの環境を、Terraform用の設定ファイルを元に自動的に構築するツールです。AWSのWeb上のコンソール画面から環境を作成するのではなく、Terraform用の設定ファイルから環境を作成、変更、削除することができ大変便利です。

AWS CLIとは、AWSの操作をコマンドライン上から行えるツールです。

前提条件

TerraformとAWS CLIの環境構築

ファイル構成

下記の構成でファイルを作成します。

/docker-compose.yml
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
/.gitignore
.terraform
*.tfstate
*.tfstate.*
aws.env
/.aws/aws.env.default
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=

AWS_REGION=ap-northeast-1
AWS_DEFAULT_REGION=ap-northeast-1
/terraform/test/main.tf
# プロバイダ
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のローカル環境を素早く作成することができます。

1
2
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
1
2