我使用GitHub Actions通过Terraform更新(修改)了Azure的ResourceGroup
摘要
本文概述了使用Terraform和GitHub Actions创建Azure资源的流程,但由于未将tfstate文件存储在远程存储库中,因此无法更新(更改)创建的资源。因此,本次尝试解决了这个问题,现在可以正常更新。
运行环境
macOS Monterey 12.3.1 可使用的版本包括 python 3.8.12 和 Azure CLI 2.34.1。
事前准备的意思是事情发生之前所做的准备工作。
この記事のリポジトリと Github Actions の環境が準備されていること
この記事 にあるように Terraform の tfstate ファイル保存用のストレージアカウント・コンテナが準備されており、かつ、そのストレージアカウントの認証情報を入手できていること
ストレージアカウント情報
リソースグループ名 : rg-ituru-tfstate
アカウント名 : iturutfstate
コンテナ名 : tfstate
認証情報
ARM_ACCESS_KEY
在GitHub上进行额外的烹饪准备
将秘密密钥添加到GitHub帐户中
需要的代码
只记录了来自该文章的修改文件。
Terraform代码
只有一个文件需要编辑。
# プロバイダーの定義
terraform {
required_providers {
azurerm = "~> 2.33"
}
}
# tfstate ファイルの保存先(ローカルに保存の場合、不要) <--- ここを追加
terraform {
backend "azurerm" {
resource_group_name = "rg-ituru-tfstate"
storage_account_name = "iturutfstate"
container_name = "tfstate"
key = "githubactions001/terraform.tfstate"
}
}
provider "azurerm" {
features {}
}
# リソースグループ
resource "azurerm_resource_group" "this" {
name = var.resource_group_name
location = var.region
tags = var.tags_def
}
在 GitHub Actions 上更新并增加一个 YAML 文件。
编辑位于 .github/workflows 目录下的 terraform.yml 文件。
name: 'Terraform'
on:
push:
branches:
- main
pull_request:
jobs:
terraform:
name: 'Terraform'
env:
ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
ARM_ACCESS_KEY: ${{ secrets.ARM_ACCESS_KEY }} # <--- ここを追加
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v2
- name: setup Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: 1.0.11
# - name: 'Terraform Format'
# run: terraform fmt -check -recursive
- name: 'Terraform Init'
run: terraform init
- name: 'Terraform Plan'
run: terraform plan -no-color -lock=false
- name: Terraform Apply
if: github.ref == 'refs/heads/main'
run: terraform apply -auto-approve
如何以中文本地化的方式改述原文:如果您知道如何解决以下问题,请通知我,因为在运行Actions时对「Terraform Format」进行了注释,会导致出现以下错误。
## Errorメッセージ
Error: Terraform exited with code 3.
Error: Process completed with exit code 1.
新建Azure资源
尝试进行git push(创建新资源)。
通过进行git push操作,将会使用Terraform创建一个新的Azure ResourceGroup。
git add .
git commit -m "Actions commit"
git push -u origin main
从本地环境进行确认
使用Azure CLI,检查新创建的ResourceGroup。
$ az group show --name rg_ituru_github
{
"id": "/subscriptions/xxxxxxxx-1717-4343-9797-zzzzzzzzzzzz/resourceGroups/rg_ituru_github",
"location": "japaneast",
"managedBy": null,
"name": "rg_ituru_github",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {
"CostCenter": "PSG2",
"Environment": "Github",
"owner": "ituru",
"period": "2022-09-12"
},
"type": "Microsoft.Resources/resourceGroups"
}
资源已成功创建!
确认Terraform tfstate文件
使用Azure CLI,检查存储账户容器中创建的tfstate文件。
## コンテナー内の BLOB を一覧表示する
$ az storage blob list --account-name iturutfstate --container-name tfstate -o table
Name Blob Type Blob Tier Length Content Type Last Modified Snapshot
---------------------------------- ----------- ----------- -------- ---------------- ------------------------- ----------
githubactions001 BlockBlob Hot 2022-09-12T14:34:57+00:00
githubactions001/terraform.tfstate BlockBlob Hot 1080 application/json 2022-09-12T14:37:50+00:00
更新 Azure 资源
编辑标签信息
将标签信息按以下方式更新(将period从2022-09-12 更改为 2022-09-30)。
# タグ情報
variable "tags_def" {
default = {
owner = "ituru"
period = "2022-09-25" # <--- ここを更新
CostCenter = "PSG2"
Environment = "Gitlab"
}
}
# 各種パラメータ
variable "region" {} // 利用リージョン
variable "resource_group_name" {} // リソースグループ名
尝试进行git push以更新资源。
通过执行 git push 命令,会更新 Terraform 中的 Azure ResourceGroup 的标签信息。
git add .
git commit -m "Tags_period Modify"
git push -u origin main
请确认来自本地环境。
使用Azure CLI检查更新后的ResourceGroup。
$ az group show --name rg_ituru_github
{
"id": "/subscriptions/xxxxxxxx-1717-4343-9797-zzzzzzzzzzzz/resourceGroups/rg_ituru_github",
"location": "japaneast",
"managedBy": null,
"name": "rg_ituru_github",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {
"CostCenter": "PSG2",
"Environment": "Github",
"owner": "ituru",
"period": "2022-09-25" # <--- 更新され、日付が変わっています
},
"type": "Microsoft.Resources/resourceGroups"
}
资源已经成功更新!
整理
通过使用 GitHub Actions 结合 Terraform 创建 Azure 资源,我们可以确认通过将 Terraform 的 tfstate 文件存储在远程存储中,无问题地更新(更改)资源。接下来,关于如何销毁创建的资源(即 terraform destroy),我想要集成删除资源的方法。
给一个额外的选择
获取用于 teffarom tfstate 的存储帐户的验证信息的方法(可以使用 Key1 或 Key2 中的任一)。
$ az storage account keys list --account-name $STORAGE_TF_ACCOUNT --subscription $SUBS_NAME --resource-group $RG_TF_NAME --output table
CreationTime KeyName Permissions Value
-------------------------------- --------- ------------- ----------------------------------------------------------------------------------------
2021-12-04T16:11:49.888094+00:00 key1 FULL pppppppppppppppppppppppppppp....ppppp
2021-12-04T16:11:49.888094+00:00 key2 FULL qqqqqqqqqqqqqqqqqqqqqqqqqqqq....qqqqq
请参阅这篇文章。
感谢您提供以下文章作为参考。通过GitHub Actions使用Terraform创建AKS。使用GitHub Actions执行Terraform。azurerm。