🔋
PowerShell で Azure REST API を実行
はじめに
Azure のリソースに対する参照や設定変更はすべて REST API が準備されています。(Azure ポータルや Azure CLIなどの裏でも REST API がキックされている)
なので、新機能などの場合、REST API しか準備されていないケースもありますので、今回比較的とっつきやすい PowerShell で実行する方法をまとめます。
事前準備
Azure REST API を実行するには、どのリソースに対して参照や設定変更を実施するかを示す URI が必要です。各リソースの URI は以下で確認可能です。
こちらの左ペインで対象の操作を選ぶと詳細が確認でき、[Try It] でブラウザ上で実行も可能です。
PowerShell で実行
今回は Azure ファイアウォールのポリシー参照・更新を例にします。まず、以下でパラメータを指定します。
$subscriptionId = "XXXXXX"
$resourceGroupName = "XXXXXX"
$firewallPolicyName = "XXXXXX"
$ruleCollectionGroupName = "XXXXXX"
トークンを取得するため、以下のコマンドを実行して Azure PowerShell にログインします。Azure AD ログイン画面が出ますので、権限を持つユーザーでログインします。
Connect-AzAccount
Access トークンを取得し、Bearer トークンに変換して、header に格納します。
$accesstoken = Get-AzAccessToken
$token = "Bearer " + $accesstoken.Token
$header = @{
"Authorization" = $token;
"Content-Type" = "application/json"
}
Azure REST API の URI を作成します。
$uri = "https://management.azure.com/subscriptions/" + $subscriptionId + "/resourceGroups/" + $resourceGroupName + "/providers/Microsoft.Network/firewallPolicies/" + $firewallPolicyName + "/ruleCollectionGroups/" + $ruleCollectionGroupName + "?api-version=2021-08-01"
参照するための GET リクエストを作成します。
$getRequest = @{
Uri = $uri
Headers = $header
Method = 'GET'
ContentType = 'application/json'
}
Azure REST API をキックして、リソースの情報を参照・表示します。
$response = Invoke-WebRequest @getRequest
Write-Output $response.content
設定変更するための body 部分を作成します。body 部分は json 形式でファイルから読み込む形にしています。
$body = Get-Content "<filepath>.json"
設定変更するための PUT リクエストを作成します。
$putRequest = @{
Uri = $uri
Headers = $header
Body = $body
Method = 'PUT'
ContentType = 'application/json'
}
Azure REST API をキックして、リソースのの設定変更・結果表示します。
$response = Invoke-WebRequest @putRequest
Write-host ("statuscode : " + $response.statuscode + "`n")
Write-host ("responsebody : `n" + $response.content)
Discussion