🔋

PowerShell で Azure REST API を実行

2022/06/02に公開

はじめに

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