为了学习Terraform,搭建了一个CI/CD环境
我决定学习Terraform来构建AWS基础设施环境,考虑到将来在项目中使用并顺便搭建CI/CD,我整理了一份备忘录。
本次尝试在Github上发起Pull Request时进行验证检查,然后在合并到master分支时将其部署到AWS。
我用于环境构建的工具。
Github (中文: 吉特哈布)
设置 -> 分支,在采用 Github Flow 的策略下,保护主分支
S3
需要将用于管理Terraform状态的terraform.tfstate永久保存起来。
由于我们使用CircleCI进行部署,将其保存在S3中会很方便。
由于幸运的是,Terraform提供了在S3中管理terraform.tfstate的配置选项,我们将使用它。
terraform {
backend "s3" {
bucket = "studyed-terraform-state1" # 作ったバケット名
region = "ap-northeast-1"
key = "terraform.tfstate"
encrypt = true
}
}
检查 Terraform(一种用于定义基础设施的工具) 代码规范和静态代码分析的工具 – tflint
TFLint是一种用于进行语法检查的工具。
它也兼容0.12版本。
通常情况下,我们会在本地环境中使用它,但也会在CI中进行检查。
这次我使用了 tflint 的 Docker 镜像。
Circle CI
Circle CI是一个持续集成和部署的工具。
环境变量
为了连接到AWS,您需要设置以下环境变量。
-
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
config.yml 配置文件
使用tflint进行验证,在合并到主分支时使用terraform apply命令进行部署。
version: 2.1
executors:
validater:
docker:
- image: wata727/tflint
deployer:
docker:
- image: hashicorp/terraform:light
jobs:
validate:
executor:
name: validater
steps:
- checkout
- run:
name: Validation check by tflint
command : tflint
deploy:
executor:
name: deployer
steps:
- checkout
- run:
name: Inittialize
command: terraform init
- run:
name: Deploy
command: terraform apply -auto-approve # デプロイ確認不要になる
workflows:
test:
jobs:
- validate
- deploy:
requires:
- validate
filters:
branches:
only: master
发生了什么?
验证检查
部署
結束
这次,我尝试构建了一个Terraform的CI/CD环境。
虽然还有一些细节需要调整(比如,在部署之前需要人工审查Applove之类的)
但至少作为学习用途来说还不错吧。
所述的内容请参详
用Terraform在S3上管理tfstate文件。