次の方法で共有


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を使用して、新しいコマンドレットをツールキットに追加しました。

参照