今回は GitHub Actions を使って Bicep ファイルを更新して最新化してみます
モチベーション
以前にこんな記事を書きました
VM のバージョンを指定してデプロイし隊 – クラウドを勉強し隊
最近、同じ内容のブログが投稿されているのも確認しました
自分の方が早かったよアピール
VM イメージ バージョンを指定して VM を作成する方法について | Japan Azure IaaS Core Support Blog
ざっくりこんな内容です
- PowerShell または CLI のコマンドを実行して利用可能な VM イメージのバージョンを取得
- 取得したバージョンを指定して VM をデプロイ
手順 1.で確認する利用可能な VM イメージの一覧は定期的に更新されます
デプロイするたびに、その時 利用可能なイメージを調べる必要があります
手順 2.では Azure Portal からはバージョン指定できないので、コマンドベース (PowerShell や Azure CLI) または テンプレート (ARM template や Bicep) を利用する必要があります
太字にした2つのポイントを改善したいのが 今回のモチベーションになります
解決策
手順 1. については定期的に Bicep ファイルを更新するように GitHub Actions を用意します
手順 2. については Azure Portal から GUI で実行できるように Bicep + Template Spec で実現します
Template Spec についてはこちら
ARM テンプレートとBicep 03 | Template Spec を試し隊 – クラウドを勉強し隊
ざっくり手順
- ベースとなる Bicep の作成
- GitHub Actions の Workflow 作成
- 検証
1. ベースとなる Bicep の作成
Bicep ファイルを作成します
---
title: Bicep ファイルで作成するもの
---
graph LR
subgraph Vnet[vnet]
subgraph Subnet[subnet]
WS1("Windows Server 2022")
end
end
NSG1(NSG)
classDef subG fill:none,color:#0a0,stroke:#0a0
class Vnet,Subnet subG
classDef SCP fill:#e83,color:#fff,stroke:none
class WS1 SCP
classDef NSGG fill:#46d,color:#fff,stroke:#fff
class NSG1 NSGG
Subnet -.- NSG1
Bicep ファイルには Azure Verified Modules を使いました
Azure Verified Modules を使って Bicep をデプロイし隊 – クラウドを勉強し隊
作成した Bicep ファイルはここに置いています
Azure_Bicep/products/winser2022image at main · NakayamaKento/Azure_Bicep
一部抜粋して簡単に解説します
パラメータ
デプロイする Windows Server のイメージバージョンを指定するパラメータです
description というデコレーターを使って、利用可能なイメージ一覧をユーザーに伝えます
GitHub Actions で hoge の部分を最新化していくことになります
|
|
VM 作成部分
前述のとおり Azure Verified Modules を利用しています
11行目に書かれている version: winSer2022version というところで パラメータで指定した内容に基づいてデプロイを実行します
|
|
2. GitHub Actions の Workflow 作成
Bicep ファイルができたので GitHub Actions の Workflow を作成します
作成した YAML ファイルはここに置いています
Azure_Bicep/.github/workflows/winser2022image.yml at main · NakayamaKento/Azure_Bicep
一部抜粋して簡単に説明します
※説明の都合上順番が前後する所があります
Workflow の実行タイミング
明言している公開情報は見つけていませんが、Windows Server のイメージは毎月の更新プログラムが配信されると更新されているようです
その Windows の更新プログラムは 毎月第 2 火曜日に配信されます (日本時間だと 翌水曜日)
そのため 15日なら 最新のイメージになっているんじゃないか って推測をして 毎月 15日 に実行するようにしています
|
|
Workflow の job | 利用可能なイメージの取得
やっていることは こんな感じ
- az vm image list を実行。デプロイしたいイメージの version の情報だけを抜粋
- 取得したデータから 改行と カンマ (,) を削除
- パラメータのデコレーターにするために文字を追加
- 対象の Bicep ファイルの 1行目に置き換え
|
|
Workflow の job | 変更した Bicep ファイルをレポジトリにプッシュ
変更後の Bicep ファイルをレポジトリに反映させておきます
詳しい背景はわかっていないですが、調べてみると github-actions@github.com というユーザーで実行するのがよさそう
GitHub Actions上でgit commitするときにgit userをどうするか #GitHubActions - Qiita
|
|
また、プッシュする権限を渡すために Workflow の permissions で contens を write にしておきます
|
|
Workflow の job | Bicep ファイルをベースに Template Spec をデプロイ
Template Spec をデプロイできるように Azure にログインしておきます
※シークレットは事前に入力済みです
|
|
Microsoft Learn のここを一通りやれば、理解できます
内容がわからない方は一読をオススメします
GitHub Actions を使用して、初めての Bicep デプロイ ワークフローを構築する - Training | Microsoft Learn
Template Spec をデプロイします
テンプレートのバージョン情報をデプロイ パラメータに含める必要があるので github.run_number (ワークフローの実行番号) を利用しています
|
|
3. 検証
Workflow を実行してみます
15日まで待てないので、今回は手動実行です
スクショの番号通りに操作していきます
テストで何度か実行しているので、履歴が残っていますが、執筆時の最新の実行番号は 4 になっています

バージョン 4 の Template Spec が作成できているかを確認してみると無事に作成できています

上部の [展開] を選択して、Template Spec を使ったデプロイを実行してみます
パラメータの入力画面で [Win Ser2022version] に注目してみます
説明を表示させると Workflow によって追加された最新の利用可能なイメージバージョンを確認することができます
今回は “20348.1487.230106” を入力しました

ちなみにどのバージョンがいつの何年何月なのかは ここから確認することができます
“20348.1487.230106” は 2023/1 の更新プログラムが適用されているイメージであることがわかります
Windows Server のリリース情報 | Microsoft Learn
このままデプロイを実行します
VM が作成できたら接続をして Windows OS のバージョン情報を確認すると無事に指定したバージョンでデプロイができています!

まとめ
- GitHub Actions を使った Bicep ファイルの変更
- Template Spec を使った VM バージョンを指定したデプロイ
を実装することができました
今回 初めて GitHub Actions を使いました
わからないことは Copilot に聞くことができるので、意外とつまずく箇所が少なく試せました
Copilot 優秀!!!!
参考
- VM のバージョンを指定してデプロイし隊 – クラウドを勉強し隊
- ARM テンプレートとBicep 03 | Template Spec を試し隊 – クラウドを勉強し隊
- Azure Verified Modules を使って Bicep をデプロイし隊 – クラウドを勉強し隊
- VM イメージ バージョンを指定して VM を作成する方法について | Japan Azure IaaS Core Support Blog
- GitHub Actions を使用して、初めての Bicep デプロイ ワークフローを構築する - Training | Microsoft Learn
- Windows Server のリリース情報 | Microsoft Learn
- Azure Verified Modules
- ワークフローをトリガーするイベント - GitHub Docs
- GitHub Actions上でgit commitするときにgit userをどうするか #GitHubActions - Qiita