Invoke-AzRestMethod を使用して Azure リソースを管理する
Invoke-AzRestMethod は、Az PowerShell モジュール バージョン 4.4.0 で導入された Azure PowerShell コマンドレットです。 これにより、Az コンテキストを使用して Azure Resource Manager (ARM) エンドポイントにカスタム HTTP 要求を行うことができます。
このコマンドレットは、Az PowerShell モジュールでまだ使用できない機能に対して Azure サービスを管理する場合に便利です。
Invoke-AzRestMethod の使用方法
たとえば、特定のネットワークに対してのみ Azure Container Registry (ACR) へのアクセスを許可したり、パブリック アクセスを拒否したりすることができます。 Az PowerShell モジュール バージョン 4.5.0 以降、この機能は、Az.ContainerRegistry PowerShell モジュールではまだ使用できません。 ただし、Invoke-AzRestMethod
を使用して中間で管理できます。
GET 操作での Invoke-AzRestMethod の使用
次の例では、GET 操作で Invoke-AzRestMethod
コマンドレットを使用する方法を示します。
$getParams = @{
ResourceGroupName = 'myresourcegroup'
ResourceProviderName = 'Microsoft.ContainerRegistry'
ResourceType = 'registries'
Name = 'myacr'
ApiVersion = '2019-12-01-preview'
Method = 'GET'
}
Invoke-AzRestMethod @getParams
柔軟性を最大限に高めるために、Invoke-AzRestMethod
のほとんどのパラメーターは省略可能です。
ただし、リソース グループ内のリソースを管理する場合は、リソースに完全な ID を指定するか、リソース グループ、リソース プロバイダー、リソースの種類などのパラメーターを指定する必要があります。
ResourceType
パラメーターと Name
パラメーターは、複数の名前を必要とするリソースをターゲットにするときに、複数の値を受け取ることができます。 たとえば、Log Analytics ワークスペースで保存された検索を操作する場合、パラメーターは次の例のようになります:-ResourceType @('workspaces', 'savedsearches') -Name @('my-la', 'my-search')
。
配列内の位置に基づくマッピングを使用して、コマンドレットは次のリソースを構築します: Id:'/workspaces/my-la/savedsearches/my-search'
。
APIVersion
パラメーターを使用すると、プレビューバージョンを含む特定の API バージョンを使用できます。 Azure リソース プロバイダーでサポートされている API バージョンは、gitHub リポジトリの azure-rest-api-specs
2019-12-01-preview
ACR API バージョンの定義は、azure-rest-api-specs/specification/containerregistry/resource-manager/Microsoft.ContainerRegistry/preview/にあります。
Invoke-AzRestMethod と PATCH 操作の使用
Invoke-AzRestMethod
コマンドレットを使用して、myresourcegroup
リソース グループ内の myacr
という名前の既存の ACR へのパブリック アクセスを無効にすることができます。
パブリック ネットワーク アクセスを無効にするには、次の例に示すように、publicNetwokAccess
パラメーターの値を変更する API を PATCH 呼び出す必要があります。
$patchParams = @{
ResourceGroupName = 'myresourcegroup'
Name = 'myacr'
ResourceProviderName = 'Microsoft.ContainerRegistry'
ResourceType = 'registries'
ApiVersion = '2019-12-01-preview'
Payload = '{ "properties": {
"publicNetworkAccess": "Disabled"
} }'
Method = 'PATCH'
}
Invoke-AzRestMethod @patchParams
Payload
プロパティは、変更するプロパティのパスを示す JSON 文字列です。
この API のすべてのパラメーターについては、この API に関連付けられている rest-api-spec ファイルで説明されています。
publicNetworkAccess パラメーターの特定の定義は、2019-12-01-preview
API バージョンの コンテナー レジストリ JSON ファイル にあります。
特定の IP アドレスからのレジストリへのアクセスのみを許可するには、次の例に示すようにペイロードを変更する必要があります。
$specificIpParams = @{
ResourceGroupName = 'myresourcegroup'
Name = 'myacr'
ResourceProviderName = 'Microsoft.ContainerRegistry'
ResourceType = 'registries'
ApiVersion = '2019-12-01-preview'
Payload = '{ "properties": {
"networkRuleSet": {
"defaultAction": "Deny",
"ipRules": [ {
"action": "Allow",
"value": "24.22.123.123"
} ]
}
} }'
Method = 'PATCH'
}
Invoke-AzRestMethod @specificIpParams
Get-AzResource、New-AzResource、および Remove-AzResource との比較
*-AzResource
コマンドレットを使用すると、リソースの種類、API のバージョン、および更新するプロパティを指定して、Azure への REST API 呼び出しをカスタマイズできます。 ただし、プロパティは最初に PSObject
として作成する必要があります。 このプロセスにより、複雑さが増し、複雑になる可能性があります。
Invoke-AzRestMethod
は、Azure リソースを管理する方法を提供します。 前の例に示すように、JSON 文字列を作成し、それを使用して REST API 呼び出しをカスタマイズできます。PSObjects
を事前に作成する必要はありません。
*-AzResource
コマンドレットを既に理解している場合は、引き続き使用できます。 サポートを停止する予定はありません。 Invoke-AzRestMethod
を使用して、新しいコマンドレットをツールキットに追加しました。
参照
Azure PowerShell