Partilhar via


Referência de proxy de recurso personalizado

Este artigo irá abordar os requisitos para endpoints que implementam recursos proxy personalizados. Se não estiver familiarizado com os Fornecedores de Recursos Personalizados do Azure, consulte a visão geral sobre fornecedores de recursos personalizados.

Defina um endpoint de recurso proxy

Um recurso proxy pode ser criado especificando o routingType como "Proxy".

Exemplo de fornecedor de recursos personalizados:

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

Construir um endpoint de recurso proxy

Um ponto final que implementa um recurso de "Proxy" deve gerir o pedido e a resposta para a nova API no Azure. Neste caso, o #resourceType* irá gerar uma nova API de recursos Azure para PUT, GET, e DELETE para executar CRUD num único recurso, bem GET como para recuperar todos os recursos existentes.

Observação

Os idcampos , name, e type não são obrigatórios, mas são necessários para integrar o recurso personalizado com um ecossistema Azure existente.

Exemplo de recurso:

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Referência do parâmetro:

Propriedade Exemplo Description
nome '{myCustomResourceName}' O nome do recurso personalizado.
tipo 'Microsoft.CustomProviders/resourceProviders/{resourceTypeName}' O namespace do tipo de recurso.
id '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
provedores/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/
myCustomResources/{myCustomResourceName}'
A ID do recurso.

Crie um recurso personalizado

Azure API incoming request:

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resource-provider-name}/myCustomResources/{myCustomResourceName}?api-version=2018-09-01-preview
Authorization: Bearer eyJ0e...
Content-Type: application/json

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

Este pedido será então encaminhado para o endpoint na forma:

PUT 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}/myCustomResources/{myCustomResourceName}

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

A resposta do endpoint é então encaminhada de volta para o cliente. A resposta deverá devolver:

  • Um documento objeto JSON válido. Todos os arrays e strings devem estar aninhados sob um objeto principal.
  • O Content-Type cabeçalho deve ser definido como "application/json; charset=utf-8".

Resposta ao ponto final:

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Resposta Azure Custom Resource Provider:

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Remover um recurso personalizado

Azure API incoming request:

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

Este pedido será então encaminhado para o endpoint na forma:

Delete 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}/myCustomResources/{myCustomResourceName}

A resposta do endpoint é então encaminhada de volta para o cliente. A resposta deverá devolver:

  • Documento válido de objeto JSON. Todos os arrays e strings devem estar aninhados sob um objeto principal.
  • O Content-Type cabeçalho deve ser definido como "application/json; charset=utf-8".

Resposta ao ponto final:

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

Resposta Azure Custom Resource Provider:

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

Recuperar um recurso personalizado

Azure API incoming request:

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

Este pedido será então encaminhado para o endpoint na forma:

GET 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}/myCustomResources/{myCustomResourceName}

A resposta do endpoint é então encaminhada de volta para o cliente. A resposta deverá devolver:

  • Um documento objeto JSON válido. Todos os arrays e strings devem estar aninhados sob um objeto principal.
  • O Content-Type cabeçalho deve ser definido como "application/json; charset=utf-8".

Resposta ao ponto final:

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Resposta Azure Custom Resource Provider:

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

Enumerar todos os recursos personalizados

Azure API incoming request:

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

Este pedido será então encaminhado para o endpoint na forma:

GET 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}/myCustomResources

A resposta do endpoint é então encaminhada de volta para o cliente. A resposta deverá devolver:

  • Um documento objeto JSON válido. Todos os arrays e strings devem estar aninhados sob um objeto principal.
  • O Content-Type cabeçalho deve ser definido como "application/json; charset=utf-8".
  • A lista de recursos deve ser colocada sob a propriedade value de nível superior.

Resposta ao ponto final:

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

{
    "value" : [
        {
            "name": "{myCustomResourceName}",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
            "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
            "properties": {
                "myProperty1": "myPropertyValue1",
                "myProperty2": {
                    "myProperty3" : "myPropertyValue3"
                }
            }
        }
    ]
}

Resposta Azure Custom Resource Provider:

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

{
    "value" : [
        {
            "name": "{myCustomResourceName}",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
            "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
            "properties": {
                "myProperty1": "myPropertyValue1",
                "myProperty2": {
                    "myProperty3" : "myPropertyValue3"
                }
            }
        }
    ]
}

Próximos passos