Azure関連でプレビュー機能が公開されて間もない時など、Azure PowershellやCLIのコマンドがなくてREST APIしかインターフェース提供されてないって場合がたまにある。そういう時、さっくりAzure REST APIたたきたい。Microsoft Azureのリソース管理方法まとめ
本来のAzure REST APIの実行手順は、下記のリファレンスの仕様に従ってHTTPリクエストを作成して投げるけど、
Request header の Authorization に Azure サブスクリプションに紐づくAzure ADからOauth 2.0のbearer tokenを取得してセットしないといけないのでちょっと面倒に感じる。
Azure REST API Reference - Create the request
https://docs.microsoft.com/ja-jp/rest/api/#create-the-request
そこでもっと簡単にAzure REST API投げる方法ないかなーと試行錯誤したところ、Azure Powershellでログインしたらローカルにbearer token保存されてることが判明。これ使おうってことで、Azure Powersell入ってる環境でPowershellの Invoke-WebRequestコマンドつかってAzure REST APIにリクエストなげるスクリプト作ってみた。(事前にAzure Powershellはインストール必要)
使用するREST APIはなんでもいいけど、まずはシンプルに仮想マシンのリソース情報とってみる(Virtual Machines - Get)[https://docs.microsoft.com/ja-jp/rest/api/compute/virtualmachines/get]
サブスクリプションID、リソースグループ名、仮想マシン名のパラメータを変更してPowershellで実行するとJSON形式で仮想マシンの構成情報が取得できる。
#Parameter Setting
$subscriptionId = "xxx" #サブスクリプションID
$resourceGroup = "xxx" #リソースグループ名
$vmName = "xxx" #仮想マシン名
#Login and acquire my access token
Login-AzureRmAccount -SubscriptionId $subscriptionId
$context = Get-AzureRmContext
foreach($token in $context.TokenCache.ReadItems())
{
if($token.TenantId -eq $context.Tenant.Id){
$currentToken = $token
break
}
}
#Executing Azure REST-API
$method = "GET"
$apiurl = "https://management.azure.com/subscriptions/"+$subscriptionId+"/resourceGroups/"+$resourceGroup+"/providers/Microsoft.Compute/virtualMachines/"+$vmName +"?api-version=2017-12-01"
$authHeader = "Bearer " + $currentToken.AccessToken
$requestHeader = @{
"Authorization" = $authHeader
"Accept" = "application/json"
}
$contentType = "application/json;charset=utf-8"
$apires = Invoke-WebRequest -Uri $apiurl -Method $method -Headers $requestHeader -ContentType $contentType
#Display the responce body
$apires.Content