takataka430’s blog

.NET系を中心に勉強したことのまとめを書きます

HTTPリクエストでAzure VMを操作する

AzureのVMを起動するのに毎回WEBブラウザからAzureポータルに行くのが面倒だったので、HTTPリクエストでVMを起動する方法を調べましたが、実現するまでにちょっと苦労したので手順をまとめます。

手順

Azure ADでアプリの登録を行う

Azure portalのAzure Active Directoryの画面左側のメニューで「アプリの登録」→「新規登録」をクリックします。

f:id:takataka430:20201005153959p:plain  
f:id:takataka430:20201005154248p:plain

「アプリケーションの登録」画面で名前を入力し、登録ボタンを押します。

f:id:takataka430:20201005154442p:plain

登録が済んだらアプリケーション画面に遷移するので、左側のメニューから「証明書と シークレット」を選択します。また、この画面で表示されている「ディレクトリ(テナント)ID」「アプリケーション (クライアント) ID」は後ほど利用するのでメモしておきます。

f:id:takataka430:20201005154626p:plain

「新しいクライアントシークレット」をクリックして「クライアントシークレットの追加」画面で説明を記入します。有効期限を選択して「追加」をクリックします。

f:id:takataka430:20201005154732p:plain

f:id:takataka430:20201005154855p:plain

するとクライアントシークレットが生成されます。この値は後ほど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/"

f:id:takataka430:20201005155429p:plain

これを実行すると以下のようなレスポンスが返ってきます。この後、"access_token"の値を使います。  
f:id:takataka430:20201005155621p:plain

 

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