Terraformを使い始める

AWSの構成管理を行う事ができる、terraformを使い始めるのに必要なことをまとめました。

  • terraformのインストール
  • credential情報の設定
  • workspaceを作成する
  • VPC、Subnetなどのネットワークの構築

terraformのインストール

Terraformはここからダウンロードしてインストールすることができますが、
以下の理由により、Dockerコンテナにインストールして使うようにすると良いです。

  • Terraformのバージョンや実行環境をチーム間で統一したい
  • Lambdaを使う場合、npmでインストールしたパッケージが、バイナリモジュールを含む場合、Amazon Linux上でのビルドが必要だったりするため

以下の通り、Terraform用にdocker-compose.ymlとDockerfileを作成してみました。

Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FROM amazonlinux:latest

ARG TF_VERSION

WORKDIR /opt/terraform

# Lambda用にnodejsインストール(Lambdaを使わない場合は不要)
RUN curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - && \
yum install -y nodejs \
npm && \
npm install n -g && \
n 8.10.0 && \
yum remove -y nodejs && \
yum clean all

# Terraformのインストール
RUN yum install -y unzip && \
curl -o terraform.zip https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip && \
unzip -d /usr/bin/ /opt/terraform/terraform.zip && \
rm -rf /opt/terraform/terraform.zip
docker-compose.yml
1
2
3
4
5
6
7
8
9
version: '2'
services:
tf:
build:
context: .
args:
TF_VERSION: 0.11.7
volumes:
- .:/opt/terraform

イメージを作成してみます

1
# docker-compose build

作成し終わったら、動作確認してみます

1
# docker-compose run tf terraform --version

うまくいくと、以下の通りバージョン情報が出力されます

1
Terraform v0.11.7

credential情報の設定

terraform用のコンテナからAWSのACCESS_KEY_IDとSECRET_ACCESS_KEYが参照できるように、環境変数を設定後にdocker-compose runするスクリプトを作成しておきます。

適当な場所に、以下のファイルを起きます。

~/.aws/terraform_run.sh
1
2
3
4
5
6
7
8
9
#!/bin/bash
export AWS_ACCESS_KEY_ID='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
export AWS_SECRET_ACCESS_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
export AWS_ACCOUNT='XXXXXXXXXXXXXXXXXX'
export TF_VAR_AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
export TF_VAR_AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
export TF_VAR_REGION='ap-northeast-1'
export TF_VAR_AWS_ACCOUNT=$AWS_ACCOUNT
docker-compose run tf bash

実行権限を付与しておきます。

1
$ chmod +x ~/.aws/terraform_run.sh

terraform用のコンテナに環境変数を渡すため、docker-compose.ymlを編集します。

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '2'
services:
tf:
build:
context: .
args:
TF_VERSION: 0.11.7
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_ACCOUNT
- TF_VAR_AWS_ACCOUNT
- TF_VAR_REGION
- TF_VAR_AWS_ACCESS_KEY_ID
- TF_VAR_AWS_SECRET_ACCESS_KEY
volumes:
- .:/opt/terraform

環境変数に値が設定されているか確認します

1
2
$ ~/.aws/terraform_run.sh
# env

VPCとサブネットを作成