前回:https://qiita.com/customaddone/items/7563a3252e4debc05f1a
GitHub:https://github.com/customaddone/larablog
今回はdockerでterraformのコンテナを立てます
Terraform概要
###Terraformとは
コードによりインフラの構築、変更を行うツール
AWS,GCPなどのクラウド上のインフラに手を加えることができる
Terraformのメリット
GUIを通さずインフラに変更を加えられる(ブラウザ上からの操作によるミスを防げる)
一度書いたコードを使い回すことができる
Dockerfile
まずdockerディレクトリ直下にTerraform用のディレクトリを追加して下さい
FROM alpine:3.10
# 最新バージョン
ARG terraform_version="0.12.21"
# Terraformインストール用のコマンドを使えるようにwget unzip curlをインストール
# Terraformをインストールして解凍する
# ディレクトリを作成する
RUN apk update --no-cache \
&& apk add --no-cache \
wget \
unzip \
curl \
&& wget https://releases.hashicorp.com/terraform/${terraform_version}/terraform_${terraform_version}_linux_amd64.zip \
&& unzip ./terraform_${terraform_version}_linux_amd64.zip -d /usr/local/bin/ \
&& rm -rf ./terraform_${terraform_version}_linux_amd64.zip \
&& mkdir terraform
WORKDIR /terraform
# いちいちterraformコマンドを打つのが面倒な場合
# CMD ["terraform"]
#docker-compose
terraform:
build:
context: .
dockerfile: docker/terraform/Dockerfile
volumes:
- ./terraform:/terraform/
environment:
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- AWS_REGION=${AWS_DEFAULT_REGION}
tty: true
environmentでAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYを指定しますが
、直に書いたままgit pushするとGitHub上に反映され、キーの情報が全世界に向けて公開される(最悪赤の他人にキーを悪用されてMAX課金されてしまう)ので、環境変数を用います
AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxx
AWS_DEFAULT_REGION=xxxxxxxxxxxxxxx
docker-compose.yamlはデフォルトで.envの情報を読み込むので、.envに変数の値(キーの情報)を書くと、docker-compose.yamlでその値を使えます
.envはgitignoreに書いてあるので、git pushしてもGitHub上に反映されません
これでdocker-compose up -d した後、docker-compose exec terraform shしてterraformコンテナの中に入ることでterraformを利用できます
Terraformの使用
試しにVPCを立ててみましょう
larablog
├── terraform
├── vpc # 追加
# ファイルの末尾にtfをつけてください
# VPCは他のネットワークから論理的に切り離されたネットワークです
# EC2などのリソースを配置します
resource "aws_vpc" "example" {
#vpcのipv4のアドレス範囲を設定します
# 10.0.0.0〜10.0.255.255まで使えるよ
cidr_block = "10.0.0.0/16"
# AWSのDNSサーバーによる名前解決を有効にする
# route53が使えるようになる
enable_dns_support = true
enable_dns_hostnames = true
# タグをつけてコンソール上でわかりやすく
tags = {
Name = "larablog"
}
}
vpcディレクトリに移動してterraform init, terraform applyするとvpcが作成されます。
が、作成と同時にvpcディレクトリにterraform.tfstate等のファイルができます(どでかい)。これらはgitignoreに書き込んでgit管理しないようしましょう
...
# Local .terraform directories
/terraform/**/.terraform/* # 追加
# .tfstate files
/terraform/**/*.tfstate # 追加
/terraform/**/*.tfstate.* # 追加
...
これでterraform init, terraform applyコマンドを打つとvpcが立ち上がります。AWSのコンソールで確認してみてください