Invoke-AzRestMethod를 사용하여 Azure 리소스 관리

Invoke-AzRestMethod는 Az PowerShell 모듈 버전 4.4.0에 도입된 Azure PowerShell cmdlet입니다. Az 컨텍스트를 사용하여 ARM(Azure Resource Manager) 엔드포인트에 사용자 지정 HTTP 요청을 할 수 있습니다.

이 cmdlet은 Az PowerShell 모듈에서 아직 사용할 수 없는 기능에 대한 Azure 서비스를 관리하려는 경우에 유용합니다.

Invoke-AzRestMethod를 사용하는 방법

예를 들어 특정 네트워크에 대해서만 ACR(Azure Container Registry)에 대한 액세스를 허용하거나 공용 액세스를 거부할 수 있습니다. Az PowerShell 모듈 버전 4.5.0을 기준으로 해당 기능은 Az.ContainerRegistry PowerShell 모듈에서 아직 사용할 수 없습니다. 그러나 Invoke-AzRestMethod를 사용하여 임시로 관리할 수 있습니다.

GET 작업으로 Invoke-AzRestMethod 사용

다음 예제에서는 GET 작업과 함께 cmdlet을 사용하는 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')와 같습니다.

배열의 위치에 따라 매핑을 사용하여 cmdlet은 다음 리소스 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 사용

cmdlet을 사용하여 Invoke-AzRestMethod 리소스 그룹에 명명된 myacr 기존 ACR에 myresourcegroup 대한 공용 액세스를 사용하지 않도록 설정할 수 있습니다.

공용 네트워크 액세스를 사용하지 않도록 설정하려면 다음 예와 같이 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 cmdlet을 사용하면 리소스 유형, API 버전 및 업데이트할 속성을 지정하여 Azure에 대한 REST API 호출을 사용자 지정할 수 있습니다. 그러나 속성을 먼저 .로 PSObject만들어야 합니다. 이 프로세스는 복잡성을 더하고 복잡해질 수 있습니다.

Invoke-AzRestMethod 는 Azure 리소스를 관리하는 방법을 제공합니다. 이전 예제와 같이 JSON 문자열을 빌드하고 이를 사용하여 미리 만들 필요 없이 REST API 호출을 사용자 지정할 수 있습니다 PSObjects.

cmdlet에 *-AzResource 이미 익숙한 경우 계속 사용할 수 있습니다. 우리는 그들을 지원하는 것을 중단 할 계획이 없습니다. 도구 Invoke-AzRestMethod키트에 새 cmdlet을 추가했습니다.

참고 항목