为了学习Terraform,搭建了一个CI/CD环境

我决定学习Terraform来构建AWS基础设施环境,考虑到将来在项目中使用并顺便搭建CI/CD,我整理了一份备忘录。

本次尝试在Github上发起Pull Request时进行验证检查,然后在合并到master分支时将其部署到AWS。

我用于环境构建的工具。

Github (中文: 吉特哈布)

设置 -> 分支,在采用 Github Flow 的策略下,保护主分支

image.png

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

发生了什么?

验证检查

image
image

部署

image.png
image.png

結束

这次,我尝试构建了一个Terraform的CI/CD环境。
虽然还有一些细节需要调整(比如,在部署之前需要人工审查Applove之类的)
但至少作为学习用途来说还不错吧。

所述的内容请参详

用Terraform在S3上管理tfstate文件。

广告
将在 10 秒后关闭
bannerAds