使用GitHub Actions来验证Terraform的计划和其他内容
我将介绍如何在GitHub Actions中运行terraform plan等命令。
如果涉及到处理AWS资源,可能需要添加步骤,我也会一并介绍。
首先
我的Terraform存储库的目录结构如下所示。
.
├── .github
│ └── workflows
│ └── test_terraform.yml # これを扱います
├── .gitignore
├── docker-compose.yml
└── src
├── .terraform/
├── .terraform.lock.hcl
├── module_aws.tf
├── modules
│ └── aws/ # この配下にresource などを記載したファイルを置いている
└── providers.tf
创建GitHub Actions的工作流程。
name: Terraform test
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
jobs:
terraform_test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- name: configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
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: terraform setup
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.4.2
- name: Terraform fmt
id: fmt
run: terraform fmt -check
continue-on-error: true
working-directory: ./src
- name: Terraform Init
id: init
run: terraform init
working-directory: ./src
- name: Terraform Validate
id: validate
run: terraform validate -no-color
working-directory: ./src
- name: Terraform Plan
id: plan
run: terraform plan -no-color
continue-on-error: true
working-directory: ./src
工作流通过执行terraform的fmt、validate、plan和init来完成这些操作。简要解释一下.yml文件。
on
workflowを実行するタイミングを設定しています。
今回の場合、Pull Requestの作成、更新、reopen、DraftからReady for reviewに変更された時にworkflowが実行されます。
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
uses: actions/checkout@v3
GitHub公式に提供されているActionになります。
check outを実施して、workflowでアクセスすることができるようになります
uses: aws-actions/configure-aws-credentials@v2
筆者の環境では、AWSのリソースを利用しているため、credential設定が必要でした
こちらはAWSよりActionが提供されています
これにより、AWSの認証情報とリージョン環境変数を設定し、他のアクションでを利用することができます。
(今回はsecretsでAWSのアクセスキーを渡していますが、外部にキーを渡しているため、role-to-assumeなどを利用する方がよさそうです。参考)
uses: hashicorp/setup-terraform@v2
Action内でTerraform 利用に必要な設定を行なっています。
引数でterraform_version を渡します。自分の使っているTerraform のバージョンと合わせましょう。
通过组合提供的操作,我们可以轻松地创建。
接下来,我想尝试进行计划结果的输出等工作。