🔋

PowerShell で Azure REST API を実行

に公開

はじめに

Azure のリソースに対する参照や設定変更はすべて REST API が準備されています。(Azure ポータルや Azure CLIなどの裏でも REST API がキックされている)
なので、新機能などの場合、REST API しか準備されていないケースもありますので、今回比較的とっつきやすい PowerShell で実行する方法をまとめます。

事前準備

Azure REST API を実行するには、どのリソースに対して参照や設定変更を実施するかを示す URI が必要です。各リソースの URI は以下で確認可能です。
https://docs.microsoft.com/en-us/rest/api/azure/

こちらの左ペインで対象の操作を選ぶと詳細が確認でき、[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