AzureのVMを起動するのに毎回WEBブラウザからAzureポータルに行くのが面倒だったので、HTTPリクエストでVMを起動する方法を調べましたが、実現するまでにちょっと苦労したので手順をまとめます。
手順
Azure ADでアプリの登録を行う
Azure portalのAzure Active Directoryの画面左側のメニューで「アプリの登録」→「新規登録」をクリックします。
「アプリケーションの登録」画面で名前を入力し、登録ボタンを押します。
登録が済んだらアプリケーション画面に遷移するので、左側のメニューから「証明書と シークレット」を選択します。また、この画面で表示されている「ディレクトリ(テナント)ID」「アプリケーション (クライアント) ID」は後ほど利用するのでメモしておきます。
「新しいクライアントシークレット」をクリックして「クライアントシークレットの追加」画面で説明を記入します。有効期限を選択して「追加」をクリックします。
するとクライアントシークレットが生成されます。この値は後ほどHTTPリクエストを送るときに使うのでどこかにメモしておきます。(この値は初回のみ表示され、次からは確認できなくなります)
HTTPリクエストでAzureのVMの起動を行う
今回はPostmanを使ってAzure VMの起動を行います。
1.トークンの取得
以下のエンドポイントへHTTPリクエストを送り、アクセストークンの取得を行います。
メソッド : POST
URL : https://login.microsoftonline.com/{ディレクトリ(テナント)ID}/oauth2/token
Body : PostmanではBodyタブの「x-www-form-urlencoded」を選択して以下を入力します。
grant_type : "client_credentials"
client_id : アプリケーション (クライアント) ID
client_secret : アプリの登録の際に作成したクライアントシークレット
resource : "https://management.core.windows.net/"
これを実行すると以下のようなレスポンスが返ってきます。この後、"access_token"の値を使います。
2. Azure VMの起動
メソッド : POST
URL :
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start?api-version=2020-06-01
「subscriptionId」「resourceGroupName」「vmName」の値はAzure VMのトップ画面から確認できます。
リクエストを送り、「Status 202 Accepted」が返ってきたら成功です。VMが起動されます。
ドキュメント
Azure REST API Reference | Microsoft Docs
Virtual Machines - Start (Azure Compute) | Microsoft Docs
Azure AD Service to Service Auth using OAuth2.0 | Microsoft Docs