让我们使用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控制台中确认。