GitHub Actions を使うと、Azure CLI コマンド (az コマンド) の自動実行を実現することができます。
この記事では、以下のドキュメントを参考に VM の起動をスケジュール化してみたいと思います。
https://github.com/marketplace/actions/azure-cli-action
なお、事前に GitHub アカウントと Azure 上に VM を作成している前提で進めます。
##1. GitHub リポジトリを作成する
まずは、以下のドキュメントを参考にリポジトリを作成しましょう。
https://docs.github.com/ja/free-pro-team@latest/github/getting-started-with-github/create-a-repo
##2. ワークフローを作成する
Actions
タブから Simple workflow
を選択します。
ファイル編集画面に遷移しますので、以下の YAML をペーストします。
<RG 名>
と <VM 名>
には起動する VM のリソースグループ名とマシン名に書き換えてください。
name: schedule_vm_start
on:
schedule:
- cron: '0 0 * * *'
# 以下の記述でワークフローの手動実行も可能になります
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Azure にログインする
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# az コマンドを実行する
- name: Azure CLI script
uses: azure/CLI@v1
with:
azcliversion: 2.0.72
# <RG 名> と <VM 名> を書き換える
inlineScript: |
az vm start -g <RG 名> -n <VM 名>
スケジュールは cron 構文で記載し、UTC 時間での設定となります。(上記では、UTC 0:00 / JST 9:00)
ワークフローにおける cron 構文については以下のドキュメントに記載があります。
https://docs.github.com/ja/free-pro-team@latest/actions/reference/events-that-trigger-workflows
また、YAML ファイル全体の構文については、以下を参照してください。
https://docs.github.com/ja/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions
#3. Azure credential を設定する
Azure へログインするためのサービスプリンシパルを作成して、${{ secrets.AZURE_CREDENTIALS }}
にシークレット情報を反映できるように設定していきます。
ドキュメントを参考に、以下のコマンドを Azure Cloud Shell などで実行し、サービスプリンシパルを作成します。
https://github.com/marketplace/actions/azure-cli-action#configure-azure-credentials-as-github-secret
az ad sp create-for-rbac --name "myApp" --role contributor \
--scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} \
--sdk-auth
# コマンド実行結果
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
コマンド実行結果の JSON をすべてコピーします。
その後、GitHub に戻り、Settings > Secrets > New repository secret
と選択します。
New secret 画面にて、Name に AZURE_CREDENTIALS
を、Value に先ほどコピーしたコマンド実行結果 (JSON) を全て貼り付けて Add secret
で登録します。
4. ワークフローの実行を確認する
GitHub の Actions
タブに戻ると、2.で作成したワークフローが表示されています。
workflow_dispatch
の記述により、以下のように手動実行のためのボタンが表示されますので、実行してみましょう。
問題無く実行されると、該当の VM が起動されているはずですので Azure Portal などで確認してみましょう。
また、スケジュールで設定していた時間に起動していることも確認しましょう。
Actions
タブで実行履歴を確認できます。
最後に
GitHub Actionsでは CI/CD ワークフローの他、今回紹介したような Azure リソースの管理みたいなことも可能だということがわかりました。
GitHub Acrions の料金体系はパブリックリポジトリでは無料、プライベートリポジトリではプランによって無料枠 (Free プランでは 2000 分/月) が存在しており、通常利用ではほとんどお金がかからないので積極的に活用してみようと思います。
https://github.co.jp/features/actions
参考資料
- GitHub Actions 公式ドキュメント : https://docs.github.com/ja/free-pro-team@latest/actions
- Azure CLI Action : https://github.com/marketplace/actions/azure-cli-action