次の方法で共有


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 バージョンは、 azure-rest-api-specs GitHub リポジトリにあります。

2019-12-01-preview ACR API バージョンの定義は、azure-rest-api-specs/specification/containerregistry/resource-manager/Microsoft.ContainerRegistry/preview/にあります。

PATCH 操作での Invoke-AzRestMethod の使用

myacr コマンドレットを使用して、myresourcegroup リソース グループ内の Invoke-AzRestMethod という名前の既存の ACR へのパブリック アクセスを無効にすることができます。

パブリック ネットワーク アクセスを無効にするには、次の例に示すように、 パラメーターの値を変更する API に publicNetwokAccess 呼び出しを行う必要があります。

$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 パラメーターの特定の定義は、 API バージョンの2019-12-01-previewにあります。

特定の 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では、新しいコマンドレットがツールキットに追加されました。

こちらもご覧ください