创建Terraform Plan的CI
首先
我们将创建一个用于检查Terraform Plan的CI。一旦实施,您可以通过Plan结果来确认基础架构的变更点。
新闻摘要。
在GitHubActions中创建Terraform Plan的CI。验证在dev和prepare目录中创建的资源。
希望的读者
- GitHubActionsでPlanを検証するCIを作成したい方
上一篇文章
- https://qiita.com/bkend_2/items/0d2b2f68c008c7cbe030
新增的目录结构
在dev・prepare目录中创建文件。
.github
└── workflows
├── dev_plan.yml # devディレクトリにPlanのCIを追加
└── prepare_plan.yml # prepareディレクトリにPlanのCIを追加
.github
└── workflows
│ ├── dev_plan.yml # 在dev目录中添加Plan的CI
│ └── prepare_plan.yml # 在prepare目录中添加Plan的CI
├── envs
│ ├── dev # 开发环境
│ │ ├── backend.tf # 管理tfstate
│ │ ├── main.tf # 调用模块
│ │ ├── provider.tf # provider块
│ │ ├── terraform.tfvars # 输入变量
│ │ └── variables.tf # 变量
│ ├── prd # 生产环境
│ └── stg # 测试环境
├── modules
│ ├── network # 网络
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── oidc # OIDC
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── prepare_tfstate # 管理prepare的tfstate的S3
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ └── tfstate # 管理dev的tfstate的S3
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── prepare # 创建共享资源
├── backend.tf
├── main.tf
├── provider.tf
├── terraform.tfvars
└── variables.tf您可以从以前的文章中了解每个目录的详细信息。
关于Terraform代码和解释
我們將使用上次在文章中創建的OIDC來進行驗證。
.github/workflows/dev_plan.yml
-.github/工作流程/开发计划.yml
name: dev plan
on:
push:
branches:
- feature/*
- hotfix/*
pull_request:
branches:
- feature/*
- hotfix/*
permissions:
id-token: write
contents: read
jobs:
terraform_dev_plan:
name: terraform - dev - plan
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.3.9
- name: AWS OIDC credential
uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT }}:role/${{ secrets.OIDC_ROLE }}
aws-region: ap-northeast-1
- name: Terraform Init
run: terraform init -upgrade
working-directory: ./envs/dev
- name: Terraform fmt
run: terraform fmt -check
- name: Terraform Validate
run: terraform validate -no-color
- name: terraform refresh
run: terraform refresh -no-color -lock=false -var="env=dev"
working-directory: ./envs/dev
- name: Terraform Plan
run: |
terraform plan \
-no-color \
-lock=false \
-var="env=dev"
working-directory: ./envs/dev
Terraform fmt: 检查代码格式
Terraform Validate: 验证代码
Terraform refresh: 更新Terraform状态以获取最新资源状态
Terraform Plan: 显示资源的更改
在准备目录上添加Terraform Plan的CI。
名称: 准备计划
on:
推送:
分支:
– 功能/ *
– 热修复/ *
拉取请求:
分支:
– 功能/ *
– 热修复/ *
权限:
id-token: 写入
内容: 读取
作业:
terraform_prepare_plan:
名称:terraform – 准备 – 计划
运行于: ubuntu-latest
步骤:
– 名称:检出
使用:actions/checkout@v3
– 名称:设置Terraform
使用:hashicorp/setup-terraform@v2
参数:
terraform_version: 1.3.9
– 名称:AWS OIDC凭证
使用:aws-actions/configure-aws-credentials@v1
参数:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT }}:role/${{ secrets.OIDC_ROLE }}
aws-region: ap-northeast-1
– 名称:Terraform初始化
运行:terraform init -upgrade
工作目录: ./prepare
– 名称:Terraform格式化
运行:terraform fmt -check
– 名称:Terraform验证
运行:terraform validate -no-color
– 名称:terraform刷新
运行:
terraform refresh -no-color \
-var=”account_id=${{ secrets.AWS_ACCOUNT }}” \
-var=”user_name=${{ secrets.USER_NAME }}” \
-var=”repository_name=${{ secrets.REPOSITORY_NAME }}”
工作目录: ./prepare
– 名称:Terraform计划
运行:
terraform plan -no-color \
-var=”account_id=${{ secrets.AWS_ACCOUNT }}” \
-var=”user_name=${{ secrets.USER_NAME }}” \
-var=”repository_name=${{ secrets.REPOSITORY_NAME }}”
工作目录: ./prepare
确认行动
最后
我們這次創建了一個檢查Terraform Plan的CI,通過檢查CI的結果可以判斷是否存在差異。
我想下一次我想要从Pull Request中确认计划的结果。
我們最近創建的 Github 存儲庫網址是: https://github.com/hikobend/terraform-qiita
分支網址是: https://github.com/hikobend/terraform-qiita/pull/7
未来计划创建的文章
-
- Terraform Planの結果をプルリクから確認
- セキュリティグループの作成