使用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上。并且一旦有了更多信息,我打算撰写一篇文章。
非常感谢您一直阅读到最后。