APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

GitHub ActionsでAzure CLIコマンドを利用する

f:id:thanaism:20210823074715p:plain

たとえばBlue/Greenデプロイで

おはこんばんちは! コンテナソリューショングループの髙井です。

たとえばAKSをBlue/Green方式で運用しているケースにおいて、今動いているほうのクラスタに合わせてGitHub Actionsで処理をしたい、なんてシーンがあります。

そのためにはまず、どちらのクラスタがプロビジョンニングされた状態なのかをチェックすることが必要です。

今回は、GitHub Actions上でAzure CLIを使って確認する方法を試してみます。

おなじみサービスプリンシパル

Azure CLIを使うには、もちろん普段使っているAzureサブスクリプションへの認証情報が必要なので、サービスプリンシパルを用意します。

サービスプリンシパルについては、以前に別の記事で説明したりしていますので、よくわからない方はぜひ読んでみてください。

techblog.ap-com.co.jp

とにもかくにも、サービスプリンシパルの情報をGitHub Secretに登録することが必要です。

ブラウザでも登録できますが、GitHub CLIを使うと楽チンです。

GitHub CLIのインストール方法は、これまた別の記事で紹介しています。

techblog.ap-com.co.jp

GitHub CLIを使う方法

以下のコマンドで一発で完了します。認証させたいサブスクリプションにログインしているターミナルで実行してください。

また、jqを使っているので、ない場合は事前にインストールしてください。

gh secret set  AZURE_CREDENTIALS \
-b $(az ad sp create-for-rbac \
--role Contributor \
--scopes /subscriptions/$(az account show -o tsv --query id) \
--sdk-auth | jq -c)

ブラウザで登録する場合

まずは、下記のコマンドでサービスプリンシパルを準備しましょう。認証させたいサブスクリプションにログインしているターミナルで実行してください。

az ad sp create-for-rbac \
--role Contributor \
--scopes /subscriptions/$(az account show -o tsv --query id) \
--sdk-auth

以下のような結果が返るので、{}を含めてJSONをまるっとコピーします。

{
  "clientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
  "clientSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
  "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

GitHubでリポジトリに移動し、Settings -> Secrets -> New repository secretと選択します。

AZURE_CREDENTIALSの名称で、上記のJSONをまるっとペーストしてAdd secretしてください。

GitHub Actionsのワークフローファイルを記述する

ここまでくれば、あとはログインとazコマンドをステップとして書けば完了です!

# az login
- name: Azure Login
  uses: azure/login@v1
  with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}

# az commands
- name: Azure CLI commands
  uses: azure/CLI@v1
  with:
    azcliversion: 2.27.1
    inlineScript: |
      az aks list -o tsv --query [].name

使いたいシチュエーションに合わせてお好きなazコマンドを書いて実行してください。

おわりに

次回は、Blue/GreenでクラスタのprovisioningStateに応じてワークフローで各stepの実行有無を切り替える方法を紹介しようと思います。

それでは、楽しいAzureライフを~。