LoginSignup
1
1

More than 1 year has passed since last update.

GitHub Actions から Terraform で Azure の ResourceGroup を更新(変更)してみました

Last updated at Posted at 2022-09-12

概要

GitHub Actions を利用した Terraform による 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 へのシークレッの追加登録

  • 対象のリポジトリの「Settings」-「Secrets」-「Actions」にて、事前準備で取得しているストレージアカウントの認証情報を登録します(「New repository secret」ボタンを押して順次登録)
    スクリーンショット 2022-09-12 10.00.52.png

必要なコード

この記事 からの変更ファイルのみ記載しています。

Terraformコード

編集が必要なファイルは1つだけです。

main.tf
# プロバイダーの定義
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 というファイルを編集します。

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

「Terraform Format」をコメントアウトしている理由は、Actions が走ったときに、以下のようなErrorが表示されるためです。このエラーを解決する方法をご存じの方がいらっしゃればご一報いただければ幸いです。

## 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 へ)

variables.tf
# タグ情報
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

1
1
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
1
1