我在GitHub Actions中尝试使用Terraform创建了Azure的ResourceGroup
简要介绍
让我们将基础架构也实施为基础设施即代码(IaC),并进行持续集成吧!为此,我使用GitHub Actions在Azure上创建了一个Resource Group(虽然还不是很完善)。值得一提的是,我使用了Hashicorp/setup-terraform来使用Terraform。
执行环境
苹果操作系统Monterey 12.3.1
Python 3.8.12
Azure命令行接口2.34.1
事前准备 (Shì
この記事 にあるように Terraform用のサービスプリンシパルが準備されており、以下のシークレット情報を入手できていること
ARM_TENANT_ID
ARM_SUBSCRIPTION_ID
ARM_CLIENT_ID
ARM_CLIENT_SECRET
在GitHub进行预备工作
创建 GitHub 的个人访问令牌。
-
- GitHub Actions の workflow を実行する権限を有するアクセストークンを発行します(git clone/push時に必要)
サインインアカウントの「Settings」-「Developer settings」-「Personal access token」から「Generate new token」ボタンを押す
「Select scopes」で、「workflow」を選択する(生成されたトークンのScopeは「repo」と「workflow」になる)
创建 GitHub 存储库
- GitHub にて Terraformのコードを管理するリポジトリ(プライベートリポジトリで可)を作成し、ローカルで git clone します
将秘密信息注册到GitHub。
需要的代码
用于自动化基础设施的Terraform代码。
这次由以下3个代码组成(只是创建资源组而已。。。)
# プロバイダーの定義
terraform {
required_providers {
azurerm = "~> 2.33"
}
}
provider "azurerm" {
features {}
}
# リソースグループ
resource "azurerm_resource_group" "this" {
name = var.resource_group_name
location = var.region
tags = var.tags_def
}
# タグ情報
variable "tags_def" {
default = {
owner = "ituru"
period = "2022-09-11"
CostCenter = "PSG2"
Environment = "Gitlab"
}
}
# 各種パラメータ
variable "region" {} // 利用リージョン
variable "resource_group_name" {} // リソースグループ名
# パラメータ値の定義
region = "japaneast" // 利用リージョン
resource_group_name = "rg_ituru_github" // リソースグループ名
创建 GitHub Actions 的 yaml 文件
在仓库的 .github/workflows 目录下创建一个名为 terraform.yml 的文件。在这里,我们将编写 GitHub Actions 的代码。请参考 Hashicorp/setup-terraform 的文档来了解如何编写。
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 }}
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 -diff -check
- 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
尝试使用git push
现在准备已完成。通过执行git push命令,将使用Terraform创建Azure中的ResourceGroup。
推
git add .
git commit -m "Actions commit"
git push -u origin main
行动
请确认来自本地环境
$ az group show --name rg_ituru_github [main]
{
"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": "GitLab",
"owner": "ituru",
"period": "2022-09-11"
},
"type": "Microsoft.Resources/resourceGroups"
}
资源已成功创建!
执行操作以通过编辑 Terraform 文件来更改 Azure 资源的 Actions。
提交修改后的 git push
此前的目标已经达到,但是我们尝试通过编辑Terraform文件并使用GitHub Actions来更改Azure ResurceGroup的标签信息。
-
- 将variables.tf文件中的”period”变量的值更改为”2022-09-12″
-
- 执行git push
- Github Actions将运行作业
行动
由于未正确保存 tfstate 文件,这是原因。似乎还需要将此文件妥善存储在远程存储等中进行执行。
概括
我能简单理解通过使用 GitHub Actions 以及 Terraform 在 Azure 上创建资源的流程。下一步的计划是将 tfstate 文件存储到远程存储中,并确认能够顺利进行资源更新和修改操作。
文献参考
根据以下文章的参考,我要感谢您。
使用 GitHub Actions 和 Terraform 创建 AKS。
使用 GitHub Actions 执行 Terraform。
GitHub Actions(包括复合操作)+ 设置 Terraform。