创建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
code detailsTerraform Init: 初始化Terraform
Terraform fmt: 检查代码格式
Terraform Validate: 验证代码
Terraform refresh: 更新Terraform状态以获取最新资源状态
Terraform Plan: 显示资源的更改

在准备目录上添加Terraform Plan的CI。

.github/workflows/prepare_plan.yml.github/workflows/prepare_plan.yml
名称: 准备计划

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

确认行动

スクリーンショット 2023-09-16 18.52.02.png

最后

我們這次創建了一個檢查Terraform Plan的CI,通過檢查CI的結果可以判斷是否存在差異。

我想下一次我想要从Pull Request中确认计划的结果。

我們最近創建的 Github 存儲庫網址是: https://github.com/hikobend/terraform-qiita
分支網址是: https://github.com/hikobend/terraform-qiita/pull/7

未来计划创建的文章

    • Terraform Planの結果をプルリクから確認

 

    セキュリティグループの作成
广告
将在 10 秒后关闭
bannerAds