Compartilhar via


Atividade da Web no Azure Data Factory e no Azure Synapse Analytics

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Dica

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!

A atividade da Web pode ser usada para chamar um ponto de extremidade REST personalizado de um pipeline do Azure Data Factory ou do Synapse. Você pode passar conjuntos de dados e serviços vinculados a serem consumidos e acessados pela atividade.

Observação

A atividade da Web também pode invocar URLs que são hospedadas em uma rede virtual privada aproveitando o runtime de integração auto-hospedada. O runtime de integração deve ter uma linha de visão para o ponto de extremidade da URL.

Observação

O tamanho máximo do conteúdo de resposta de saída com suporte é de 4 MB.

Criar uma atividade da Web com interface do usuário

Para usar uma atividade da Web em um pipeline, siga estas etapas:

  1. Procure Web no painel Atividades do pipeline e arraste uma atividade da Web para a tela do pipeline.

  2. Selecione a nova atividade da Web na tela, se ainda não estiver selecionada, e a guia Configurações para editar os detalhes.

    Mostra a interface do usuário para uma atividade Web.

  3. Especifique uma URL, que pode ser uma expressão de cadeia de caracteres literais ou outra combinação de expressões dinâmicas, variáveis do sistema ou saídas de outras atividades. Forneça outros detalhes a serem enviados com a solicitação.

  4. Use a saída da atividade como a entrada para qualquer outra atividade e faça referência à saída em qualquer lugar que o conteúdo dinâmico tem suporte na atividade de destino.

Sintaxe

{
   "name":"MyWebActivity",
   "type":"WebActivity",
   "typeProperties":{
      "method":"Post",
      "url":"<URLEndpoint>",
      "httpRequestTimeout": "00:01:00"
      "connectVia": {
          "referenceName": "<integrationRuntimeName>",
          "type": "IntegrationRuntimeReference"
      }
      "headers":{
         "Content-Type":"application/json"
      },
      "authentication":{
         "type":"ClientCertificate",
         "pfx":"****",
         "password":"****"
      },
      "datasets":[
         {
            "referenceName":"<ConsumedDatasetName>",
            "type":"DatasetReference",
            "parameters":{
               ...
            }
         }
      ],
      "linkedServices":[
         {
            "referenceName":"<ConsumedLinkedServiceName>",
            "type":"LinkedServiceReference"
         }
      ]
   }
}

Propriedades de tipo

Propriedade Descrição Valores permitidos Obrigatório
name Nome da atividade da Web String Sim
type Deve ser definido como WebActivity. String Sim
method Método da API REST para o ponto de extremidade de destino. Cadeia de caracteres.

Tipos com suporte: "GET", "POST", "PUT", "PATCH", "DELETE"
Sim
url Ponto de extremidade de destino e o caminho Cadeia de caracteres (ou expressão com um resultType de cadeia de caracteres). A atividade atingirá o tempo limite em 1 minuto com um erro se não receber uma resposta do ponto de extremidade. Você pode aumentar esse tempo limite de resposta em até 10 minutos atualizando a propriedade httpRequestTimeout Sim
httpRequestTimeout Duração do tempo limite de resposta hh: mm:ss com o valor máximo como 00:10:00. Se não for especificado explicitamente, o padrão será 00:01:00 Não
headers Cabeçalhos que são enviados para a solicitação. Por exemplo, para definir o idioma e o tipo em uma solicitação: "headers" : { "Accept-Language": "en-us", "Content-Type": "application/json" }. Cadeia de caracteres (ou expressão com um resultType de cadeia de caracteres) Não
body Representa o conteúdo enviado para o ponto de extremidade. Cadeia de caracteres (ou expressão com um resultType de cadeia de caracteres).

Consulte o esquema da carga de solicitação na seção Esquema de carga de solicitação.
Necessário para os métodos PUT/POST/PATCH. Opcional para o método DELETE.
autenticação Método de autenticação usado para chamar o ponto de extremidade. Os tipos com suporte são "Basic, Client Certificate, System-assigned Managed Identity, User-assigned Managed Identity, Service Principal". Para obter mais informações, consulte a seção Autenticação. Se a autenticação não for necessária, exclua essa propriedade. Cadeia de caracteres (ou expressão com um resultType de cadeia de caracteres) Não
turnOffAsync Opção para desabilitar a invocação de HTTP GET no campo local no cabeçalho de resposta de uma resposta HTTP 202. Se definido como true, ele para de invocar HTTP GET no local http fornecido no cabeçalho de resposta. Se definido como false, ele continuará invocando a chamada HTTP GET no local fornecido nos cabeçalhos de resposta http. Os valores permitidos são false (padrão) e true. Não
disableCertValidation Remove a validação de certificado do lado do servidor (não recomendado, a menos que você esteja se conectando a um servidor confiável que não usa um certificado de autoridade de certificação padrão). Os valores permitidos são false (padrão) e true. Não
conjuntos de dados Lista de conjuntos de dados passados para o ponto de extremidade. Matriz de referências do conjunto de dados. Pode ser uma matriz vazia. Sim
linkedServices Lista de serviços vinculados passado ao ponto de extremidade. Matriz de referências de serviço vinculado. Pode ser uma matriz vazia. Sim
connectVia O runtime de integração a ser usado para se conectar ao armazenamento de dados. Use o runtime de integração do Azure ou o runtime de integração auto-hospedada (se o seu armazenamento de dados estiver em uma rede privada). Se essa propriedade não for especificada, o serviço usará o runtime de integração do Azure padrão. A referência de runtime de integração. Não

Observação

Os pontos de extremidade REST que invoca a atividade da Web invoca devem retornar para uma resposta do JSON de tipo. A atividade atingirá o tempo limite em 1 minuto com um erro se não receber uma resposta do ponto de extremidade. Para pontos de extremidade que dão suporte ao padrão de Solicitação/Resposta assíncronos, a atividade da Web continuará aguardando sem atingir o tempo limite (até 7 dias) ou até que os pontos de extremidade sinalizem a conclusão do trabalho.

A tabela a seguir mostra os requisitos para o conteúdo JSON:

Tipo de valor Corpo da solicitação Corpo da resposta
Objeto JSON Com suporte Com suporte
Matriz JSON com suporte
(No momento, matrizes JSON não funcionam como resultado de um bug. Uma correção está em andamento.)
Sem suporte
Valor JSON Com suporte Sem suporte
Tipo não-JSON Sem suporte Sem suporte

Autenticação

Veja abaixo os tipos de autenticação compatíveis com a atividade da Web.

Nenhum

Se a autenticação não for necessária, não inclua a propriedade "authentication".

Basic

Especifique o nome de usuário e senha a serem usados com a autenticação básica.

"authentication":{
   "type":"Basic",
   "username":"****",
   "password":"****"
}

Certificado do cliente

Especifique o conteúdo codificado em base64 de um arquivo PFX e a senha.

"authentication":{
   "type":"ClientCertificate",
   "pfx":"****",
   "password":"****"
}

O certificado precisa ser um certificado x509. Para conversão em arquivo PFX, você pode usar seu utilitário de preferência. Para codificação de base 64, você pode usar o snippet do PowerShell a seguir.

$fileContentBytes = get-content 'enr.dev.webactivity.pfx' -AsByteStream

[System.Convert]::ToBase64String($fileContentBytes) | Out-File ‘pfx-encoded-bytes.txt’

Identidade Gerenciada

Especifique o URI do recurso para o qual o token de acesso será solicitado usando a identidade gerenciada para a instância do workspace do data factory ou do Synapse. Para chamar a API de Gerenciamento de Recursos do Azure, use https://management.azure.com/. Para obter mais informações sobre como identidades gerenciadas funcionam, confira a página de visão geral de identidades gerenciadas para recursos do Azure.

"authentication": {
	"type": "MSI",
	"resource": "https://management.azure.com/"
}

Observação

Se o workspace do data factory ou do Synapse estiver configurado com um repositório Git, você precisará armazenar suas credenciais no Azure Key Vault para usar a autenticação básica ou de certificado do cliente. O serviço não armazena senhas no git.

Entidade de serviço

Especifique a ID do locatário, a ID da entidade de serviço e a chave da entidade de serviço, usando uma cadeia de caracteres segura para o segredo do cliente.

"authentication": {
            "type": "ServicePrincipal",
            "tenant": "your_tenant_id",
            "servicePrincipalId": "your_client_id",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "your_client_secret"
            },
            "resource": "https://management.azure.com/"
}

Solicitar esquema de carga

Quando você usa o método PUT/POST, a propriedade body representa a carga que é enviada para o ponto de extremidade. Você pode passar serviços vinculados e conjuntos de dados como parte da carga. Aqui está o esquema para a carga:

{
    "body": {
        "myMessage": "Sample",
        "datasets": [{
            "name": "MyDataset1",
            "properties": {
                ...
            }
        }],
        "linkedServices": [{
            "name": "MyStorageLinkedService1",
            "properties": {
                ...
            }
        }]
    }
}

Exemplo

Neste exemplo, a atividade da Web no pipeline chama um ponto de extremidade REST. Ele passa um serviço vinculado do SQL do Azure e um conjunto de dados SQL do Azure para o ponto de extremidade. O ponto de extremidade REST usa a cadeia de conexão do SQL do Azure para se conectar ao servidor SQL lógico e retorna o nome da instância do servidor SQL.

Definição de pipeline

{
    "name": "<MyWebActivityPipeline>",
    "properties": {
        "activities": [
            {
                "name": "<MyWebActivity>",
                "type": "WebActivity",
                "typeProperties": {
                    "method": "Post",
                    "url": "@pipeline().parameters.url",
                    "headers": {
                        "Content-Type": "application/json"
                    },
                    "authentication": {
                        "type": "ClientCertificate",
                        "pfx": "*****",
                        "password": "*****"
                    },
                    "datasets": [
                        {
                            "referenceName": "MySQLDataset",
                            "type": "DatasetReference",
                            "parameters": {
                                "SqlTableName": "@pipeline().parameters.sqlTableName"
                            }
                        }
                    ],
                    "linkedServices": [
                        {
                            "referenceName": "SqlLinkedService",
                            "type": "LinkedServiceReference"
                        }
                    ]
                }
            }
        ],
        "parameters": {
            "sqlTableName": {
                "type": "String"
            },
            "url": {
                "type": "String"
            }
        }
    }
}

Valores de parâmetro do pipeline

{
    "sqlTableName": "department",
    "url": "https://adftes.azurewebsites.net/api/execute/running"
}

Código do ponto de extremidade de serviço Web


[HttpPost]
public HttpResponseMessage Execute(JObject payload)
{
    Trace.TraceInformation("Start Execute");

    JObject result = new JObject();
    result.Add("status", "complete");

    JArray datasets = payload.GetValue("datasets") as JArray;
    result.Add("sinktable", datasets[0]["properties"]["typeProperties"]["tableName"].ToString());

    JArray linkedServices = payload.GetValue("linkedServices") as JArray;
    string connString = linkedServices[0]["properties"]["typeProperties"]["connectionString"].ToString();

    System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(connString);

    result.Add("sinkServer", sqlConn.DataSource);

    Trace.TraceInformation("Stop Execute");

    return this.Request.CreateResponse(HttpStatusCode.OK, result);
}

Veja outras atividades de fluxo de controle com suporte: