我在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。

スクリーンショット 2022-09-08 13.56.51.png

需要的代码

用于自动化基础设施的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

行动

スクリーンショット 2022-09-08 21.31.55.png

请确认来自本地环境

$ 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的标签信息。

    1. 将variables.tf文件中的”period”变量的值更改为”2022-09-12″

 

    1. 执行git push

 

    Github Actions将运行作业

行动

スクリーンショット 2022-09-08 21.51.47.png

由于未正确保存 tfstate 文件,这是原因。似乎还需要将此文件妥善存储在远程存储等中进行执行。


概括

我能简单理解通过使用 GitHub Actions 以及 Terraform 在 Azure 上创建资源的流程。下一步的计划是将 tfstate 文件存储到远程存储中,并确认能够顺利进行资源更新和修改操作。

文献参考

根据以下文章的参考,我要感谢您。
使用 GitHub Actions 和 Terraform 创建 AKS。
使用 GitHub Actions 执行 Terraform。
GitHub Actions(包括复合操作)+ 设置 Terraform。