让我们使用Laravel来创建一个微博 #3

上一次:https://qiita.com/customaddone/items/7563a3252e4debc05f1a
GitHub:https://github.com/customaddone/larablog

这次我们将使用Docker来创建Terraform容器。

Terraform综述

Terraform是什么意思

可以通过代码构建和修改基础设施的工具,可以对AWS、GCP等云上基础设施进行修改。

Terraform的优势

不需要通过图形界面对基础设施进行更改(可以防止通过浏览器操作导致的错误),可以重复使用编写过的代码。

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

Docker组合

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

在环境变量中设定AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,但如果直接将其写入并进行git push,则会在GitHub上反映出来,导致密钥信息对全世界公开(甚至可能被陌生人恶意使用并产生最大的费用),因此需要使用环境变量。

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控制台中确认。

广告
将在 10 秒后关闭
bannerAds