使用GitHub Actions来运行Terraform

简单概述

本文介绍了在 GitHub Actions 中运行 Terraform 的方法。

目标读者

只有具备以下类似的背景知识的人才适用。

Terraform の基礎的な知識を持っている

GitHub Actions の基礎的な知識を持っている

策略

在创建PR时,我会按照以下步骤进行操作。

    • 全ての .tf ファイルに対して terraform fmt を実行(差分があった場合はCIを失敗させる)

terraform init の実行(差分があった場合はCIを失敗させる)

terraform validate の実行(差分があった場合はCIを失敗させる)

terraform plan の実行(差分があった場合はCIを失敗させる)

有些情况下,可能会执行到 terraform apply,但出于以下个人理由,我个人不执行 terraform apply。

    在各个环境(dev,stg,prod等)之间存在差异较大的情况下,出现在这种环境中的情况是经常发生的,例如在dev环境中成功执行了terraform apply,但在stg环境中却失败了。因此,在对生产环境进行terraform apply时,并不一定是在CI执行时进行。

未来可能会有很多变化,可能会改变执行terraform apply的策略,如果发生这种情况,我们将在本文中添加相关信息。

请注意

如果在「GitHub Actions Terraform」上进行搜索,可能会找到一些使用 terraform-github-actions 的文章。

目前,hashicorp/terraform-github-actions 已不再推荐使用,官方目前推荐的方法是使用 setup-terraform。因此,如果您现在要开始使用,推荐使用 setup-terraform。

設置檔案的內容

以下是GitHub Actions的配置文件。

name: ci-master

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  terraform:
    name: Terraform
    runs-on: ubuntu-latest

    defaults:
      run:
        shell: bash
    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ap-northeast-1

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v1
      with:
        terraform_version: 0.12.25

    - name: Terraform Format
      run: terraform fmt -recursive -check

    - name: Terraform stg/10-acm
      working-directory: ./providers/aws/environments/stg/10-acm
      run: |
        terraform init
        terraform validate
        terraform plan

    - name: Terraform stg/20-frontend
      working-directory: ./providers/aws/environments/stg/20-frontend
      run: |
        terraform init
        terraform validate
        terraform plan

    - name: Terraform prod/10-acm
      working-directory: ./providers/aws/environments/prod/10-acm
      run: |
        terraform init
        terraform validate
        terraform plan

    - name: Terraform prod/10-github
      working-directory: ./providers/aws/environments/prod/10-github
      run: |
        terraform init
        terraform validate
        terraform plan

    - name: Terraform prod/20-frontend
      working-directory: ./providers/aws/environments/prod/20-frontend
      run: |
        terraform init
        terraform validate
        terraform plan

简单总结一下正在做的事情如下:

aws-actions/configure-aws-credentials@v1 でAWSのアクセスキー等を設定

Setup Terraform で利用するTerraformのバージョンを指定

terraform fmt -recursive -check でプロジェクト全体にFormatterをかける(もし差分があったらエラー)

tfstate が存在するディレクトリで terraform init, terraform validate, terraform plan を実行

如果还有其他需要的子命令,请随意添加。

    • (例1) terraform workspace を利用している場合は terraform workspace select [workspace名] を追加する

 

    (例2) terraform apply を実行したい場合は terraform apply -auto-approve を追加する

顺便说一句,对于每个执行目录,有很多次重复的描述。但是如果使用strategy.matrix,也许可以删除重复的描述。

最后。

只需使用由 Terraform 开发商 HashiCorp 官方提供的 setup-terraform,您就能轻松地在 GitHub Actions 中运行 Terraform。

我正在将当前CircleCI上的各种项目迁移到GitHub Actions上。并且一旦有了更多信息,我打算撰写一篇文章。

非常感谢您一直阅读到最后。

bannerAds