LoginSignup
0
0

More than 1 year has passed since last update.

GitHub Actions から Terraform で Azure の ResourceGroup を作成してみました

Last updated at Posted at 2022-09-08

概要

インフラも IaC(コード)化して CIやりましょ! ってことで、GitHub Actions を利用して Azure 上に ResourceGroup を作成してみました(かなりものたりませんが、、、)。なお、Terraform は Hashicorp/setup-terraform を利用しています。

実行環境

macOS Monterey 12.3.1
python 3.8.12
Azure CLI 2.34.1

事前準備

  • この記事 にあるように Terraform用のサービスプリンシパルが準備されており、以下のシークレット情報を入手できていること
    • ARM_TENANT_ID
    • ARM_SUBSCRIPTION_ID
    • ARM_CLIENT_ID
    • ARM_CLIENT_SECRET

GitHub での仕込み

GitHub の Personal Access Token の作成

  • 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 へのシークレット登録

  • 上記で作成したリポジトリの「Settings」-「Secrets」-「Actions」にて、事前準備で入手している情報を使って下記のようにシークレット情報を登録します(「New repository secret」ボタンを押して順次登録)
    スクリーンショット 2022-09-08 13.56.51.png

必要なコード

Terraformコード

今回は以下の3つのコードで構成されています(リソースグループを作成するだけなので、、、)

main.tf
# プロバイダーの定義
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
}
variables.tf
# タグ情報
variable "tags_def" {
  default = {
    owner       = "ituru"
    period      = "2022-09-11"
    CostCenter  = "PSG2"
    Environment = "Gitlab"
  }
}

# 各種パラメータ
variable "region" {}              // 利用リージョン
variable "resource_group_name" {} // リソースグループ名
terraform.tfvar
# パラメータ値の定義
region              = "japaneast"       // 利用リージョン
resource_group_name = "rg_ituru_github" // リソースグループ名

GitHub Actions の yaml ファイルの作成

リポジトリの .github/workflows 配下に terraform.yml というファイルを作成します。ここに、GitHub Actions のコードを記載していきます。記載方法は Hashicorp/setup-terraform を参照ください。

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 }}
    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 の作成がおこなわれます。

push

git add .
git commit -m "Actions commit"
git push -u origin main

Actions

GitHub Actions のジョブを確認します。順次処理が実施され、エラーもなく正常に終了しています。
スクリーンショット 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 ResurceGreoup のタグ情報の変更を試みました。

  1. variables.tf ファイルの「period」の値を「2022-09-12」に変更します
  2. git push します
  3. Github Actions のジョブが実行されます

Actions

GitHub Actions のジョブが途中で止まってしまいます。リソースの更新(変更)ではなく、新規作成を試みた結果となります。
スクリーンショット 2022-09-08 21.50.42.png
スクリーンショット 2022-09-08 21.51.47.png

原因は tfstate ファイルをきちんと保持していないためです。このファイルもきちんとリモートストレージ等に格納して実行する必要があるようです。


まとめ

GitHub Actions を利用した Terraform による Azureリソース作成 の流れを簡単に理解することができました。次回は tfstateファイルをリモートストレージに格納して、問題なくリソース更新(変更)ができることを確認したいと思います。

参考記事

以下の記事を参考にさせていただきました。感謝申し上げます
GitHub Actions から Terraform で AKS を作成する
GitHub ActionsでTerraformを実行する
github actions(w/z composite) + setup-terraform

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0