Help us understand the problem. What is going on with this article?

Laravelでミニブログを作ろう #3

前回:https://qiita.com/customaddone/items/7563a3252e4debc05f1a
GitHub:https://github.com/customaddone/larablog

今回はdockerでterraformのコンテナを立てます

Terraform概要

Terraformとは

コードによりインフラの構築、変更を行うツール
AWS,GCPなどのクラウド上のインフラに手を加えることができる

Terraformのメリット

GUIを通さずインフラに変更を加えられる(ブラウザ上からの操作によるミスを防げる)
一度書いたコードを使い回すことができる

Dockerfile

まずdockerディレクトリ直下にTerraform用のディレクトリを追加して下さい

docker/terraform/Dockerfile
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

docker-compose.yaml
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課金されてしまう)ので、環境変数を用います

.env
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 # 追加
terraform/vpc/aws_vpc.tf
# ファイルの末尾に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管理しないようしましょう

.gitignore
...

# Local .terraform directories
/terraform/**/.terraform/* # 追加

# .tfstate files
/terraform/**/*.tfstate # 追加
/terraform/**/*.tfstate.* # 追加

...

これでterraform init, terraform applyコマンドを打つとvpcが立ち上がります。AWSのコンソールで確認してみてください

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした