Azure REST API에 사용자 지정 작업 추가

이 문서에서는 사용자 지정 작업을 구현하는 Azure 사용자 지정 리소스 공급자 엔드포인트를 만들기 위한 요구 사항 및 모범 사례를 살펴봅니다. Azure 사용자 지정 리소스 공급자에 익숙하지 않은 경우 사용자 지정 리소스 공급자에 대한 개요를 참조하세요.

작업 엔드포인트를 정의하는 방법

엔드포인트는 서비스를 가리키는 URL로 서비스와 Azure 간의 기본 계약을 구현합니다. 엔드포인트는 사용자 지정 리소스 공급자에서 정의되며 공개적으로 액세스할 수 있는 모든 URL이 될 수 있습니다. 아래 샘플에는 endpointURL에서 구현하는 myCustomAction이라고 불리는 라는 작업이 있습니다.

샘플 ResourceProvider:

{
  "properties": {
    "actions": [
      {
        "name": "myCustomAction",
        "routingType": "Proxy",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus",
  "type": "Microsoft.CustomProviders/resourceProviders",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
  "name": "{resourceProviderName}"
}

작업 엔드포인트 빌드

작업을 구현하는 엔드포인트는 Azure의 새 API에 대한 요청 및 응답을 처리해야 합니다. 작업을 사용하여 사용자 지정 리소스 공급자를 만들면 Azure에서 새로운 API 세트를 생성합니다. 이러한 경우 작업은 POST에 대한 새 Azure 작업 API를 생성합니다.

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction

Azure API 들어오는 요청:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction?api-version=2018-09-01-preview
Authorization: Bearer eyJ0e...
Content-Type: application/json

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

해당 요청은 다음 형식으로 엔드포인트로 전달됩니다.

POST https://{endpointURL}/?api-version=2018-09-01-preview
Content-Type: application/json
X-MS-CustomProviders-RequestPath: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

마찬가지로 엔드포인트의 응답은 고객에게 다시 전달됩니다. 엔드포인트의 응답은 다음을 반환해야 합니다.

  • 유효한 JSON 개체 문서. 모든 배열 및 문자열은 상위 개체 아래에 중첩되어야 합니다.
  • Content-Type 헤더를 “application/json; charset=utf-8”으로 설정해야 합니다.
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Azure 사용자 지정 리소스 공급자 응답:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

사용자 지정 작업 호출

사용자 지정 리소스 공급자에서 사용자 지정 작업을 호출하는 두 가지 주요 방법이 있습니다.

  • Azure CLI
  • Azure 리소스 관리자 템플릿

Azure CLI

az resource invoke-action --action {actionName} \
                          --ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName} \
                          --request-body \
                            '{
                                "myProperty1": "myPropertyValue1",
                                "myProperty2": {
                                    "myProperty3": "myPropertyValue3"
                                }
                            }'
매개 변수 필수 설명
작업 ResourceProvider에 정의된 작업의 이름.
ID ResourceProvider의 리소스 ID.
request-body 아니요 엔드포인트로 전송될 요청 본문입니다.

Azure Resource Manager 템플릿

참고 항목

작업은 Azure Resource Manager 템플릿에서 제한적으로 지원됩니다. 템플릿 내에서 작업을 호출하려면 이름에 list 접두사가 포함되어야 합니다.

목록 작업을 사용하는 샘플 ResourceProvider:

{
  "properties": {
    "actions": [
      {
        "name": "listMyCustomAction",
        "routingType": "Proxy",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus"
}

샘플 Azure Resource Manager 템플릿:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "variables": {
        "resourceIdentifier": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
        "apiVersion": "2018-09-01-preview",
        "functionValues": {
            "myProperty1": "myPropertyValue1",
            "myProperty2": {
                "myProperty3": "myPropertyValue3"
            }
        }
    },
    "resources": [],
    "outputs": {
        "myCustomActionOutput": {
            "type": "object",
            "value": "[listMyCustomAction(variables('resourceIdentifier'), variables('apiVersion'), variables('functionValues'))]"
        }
    }
}
매개 변수 필수 설명
resourceIdentifier ResourceProvider의 리소스 ID.
apiVersion 리소스 런타임 상태의 API 버전. 항상 “2018-09-01-preview”여야 합니다.
functionValues 아니요 엔드포인트로 전송될 요청 본문입니다.

다음 단계