2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Azure] GitHub Actions で az コマンドを定期的にたたく

Last updated at Posted at 2020-11-17

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

今回は、Private リポジトリで試してみます。
2020-11-16_23h31_54.png

##2. ワークフローを作成する
Actions タブから Simple workflow を選択します。
2020-11-16_23h37_42.png

ファイル編集画面に遷移しますので、以下の 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 と選択します。
2020-11-16_23h55_52.png

New secret 画面にて、Name に AZURE_CREDENTIALS を、Value に先ほどコピーしたコマンド実行結果 (JSON) を全て貼り付けて Add secret で登録します。
2020-11-16_23h58_25.png

4. ワークフローの実行を確認する

GitHub の Actions タブに戻ると、2.で作成したワークフローが表示されています。
workflow_dispatch の記述により、以下のように手動実行のためのボタンが表示されますので、実行してみましょう。
2020-11-17_00h24_17.png

問題無く実行されると、該当の VM が起動されているはずですので Azure Portal などで確認してみましょう。

また、スケジュールで設定していた時間に起動していることも確認しましょう。
Actions タブで実行履歴を確認できます。
2020-11-17_11h46_56.png

最後に

GitHub Actionsでは CI/CD ワークフローの他、今回紹介したような Azure リソースの管理みたいなことも可能だということがわかりました。

GitHub Acrions の料金体系はパブリックリポジトリでは無料、プライベートリポジトリではプランによって無料枠 (Free プランでは 2000 分/月) が存在しており、通常利用ではほとんどお金がかからないので積極的に活用してみようと思います。
https://github.co.jp/features/actions

参考資料

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?