Compartir vía


Actividad web en Azure Data Factory y Azure Synapse Analytics

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Sugerencia

Data Factory en Microsoft Fabric es la próxima generación de Azure Data Factory, con una arquitectura más sencilla, inteligencia artificial integrada y nuevas características. Si no está familiarizado con la integración de datos, comience con Fabric Data Factory. Las cargas de trabajo de ADF existentes pueden actualizarse a Fabric para acceder a nuevas funcionalidades en ciencia de datos, análisis en tiempo real e informes.

La actividad web se puede usar para llamar a un punto de conexión REST personalizado desde una canalización de Azure Data Factory o Synapse. Puede pasar conjuntos de datos y servicios vinculados que la actividad consumirá y a los que tendrá acceso.

Nota:

La actividad web se admite para invocar direcciones URL hospedadas en una red virtual privada, así como mediante un entorno de ejecución de integración autohospedado. El entorno de ejecución de integración debe tener una línea de visión al punto de conexión de la dirección URL.

Nota:

El tamaño máximo de la carga de respuesta de salida admitido es de 4 MB.

Creación de una actividad web con la interfaz de usuario

Para usar una actividad web en una canalización, complete los pasos siguientes:

  1. Busque web en el panel Actividades de canalización y arrastre una actividad web al lienzo de canalización.

  2. Seleccione la nueva actividad web en el lienzo si aún no está seleccionada y su pestaña Configuración para editar sus detalles.

    Muestra la interfaz de usuario de una actividad web.

  3. Especifique una dirección URL, que puede ser una cadena URL literal o cualquier combinación de expresiones y funciones dinámicas, variables del sistema o salidas de otras actividades. Proporcione otros detalles que se enviarán con la solicitud.

  4. Use la salida de la actividad como entrada a cualquier otra actividad y haga referencia a la salida en cualquier lugar en el que se admita contenido dinámico en la actividad de destino.

Sintaxis

{
   "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"
         }
      ]
   }
}

Propiedades de tipo

Propiedad Descripción Valores permitidos Obligatorio
name Nombre de la actividad web String
type Se debe establecer en WebActivity. String
método Método de API REST para el punto de conexión de destino. String.

Tipos admitidos: "GET", "POST", "PUT", "PATCH", "DELETE"
url Punto de conexión y ruta de acceso de destino Cadena (o expresión con un valor resultType de cadena). La actividad dará un error por tiempo de espera después de 1 minuto si no recibe una respuesta desde el punto de conexión. Si actualiza el valor de la propiedad httpRequestTimeout, podrá aumentar este tiempo de espera de respuesta hasta los 10 minutos
httpRequestTimeout Duración del tiempo de espera de respuesta hh:mm:ss con un valor máximo de 00:10:00. Si el valor no se especifica explícitamente, se establecerá en 00:01:00 de forma predeterminada No
headers Encabezados que se envían a la solicitud. Por ejemplo, para establecer el idioma y el tipo en una solicitud: "headers" : { "Accept-Language": "en-us", "Content-Type": "application/json" }. Cadena (o expresión con un valor resultType de cadena) No
body Representa la carga útil que se envía al punto de conexión. Cadena (o expresión con un valor resultType de cadena).

Vea el esquema de la carga de solicitud en la sección Solicitar un esquema de carga.
Necesario para los métodos POST, PUT o PATCH . Opcional para el método DELETE.
autenticación Método de autenticación usado para llamar al punto de conexión. Los tipos admitidos son "Básico, Certificado de cliente, Identidad gestionada asignada por el sistema, Identidad gestionada asignada por el usuario, Servicio principal". Para más información, consulte la sección Autenticación. Si no se requiere autenticación, excluya esta propiedad. Cadena (o expresión con un valor resultType de cadena) No
turnOffAsync Opción para deshabilitar la invocación de HTTP GET en el campo de ubicación en el encabezado de respuesta de una respuesta HTTP 202. Si se establece true, deja de invocar HTTP GET en la ubicación http especificada en el encabezado de respuesta. Si se establece false, continúa invocando la llamada HTTP GET en la ubicación especificada en los encabezados de respuesta http. Los valores permitidos son false (valor predeterminado) y true. No
disableCertValidation Quita la validación de certificados del servidor (no se recomienda a menos que se conecte a un servidor de confianza que no use un certificado de autoridad CA estándar). Los valores permitidos son false (valor predeterminado) y true. No
conjuntos de datos Lista de conjuntos de datos que se pasan al punto de conexión. Matriz de referencias de conjunto de datos. Puede ser una matriz vacía.
linkedServices Lista de servicios vinculados que se pasan al punto de conexión. Matriz de referencias de servicios vinculados. Puede ser una matriz vacía.
connectVia El entorno de ejecución de integración que se usará para conectarse al almacén de datos. Puede usar el entorno de ejecución de integración de Azure o el entorno de ejecución de integración autohospedado (si el almacén de datos está en una red privada). Si no se especifica esta propiedad, el servicio usa el Azure entorno de ejecución de integración predeterminado. La referencia al entorno de ejecución de integración. No

Nota:

Los puntos de conexión REST que invoca la actividad web deben devolver una respuesta de tipo JSON. La actividad dará un error por tiempo de espera después de 1 minuto si no recibe una respuesta desde el punto de conexión. En el caso de los puntos de conexión que admiten el patrón de solicitud-respuesta asincrónico, la actividad web seguirá esperando sin agotar el tiempo de espera (hasta 7 días) o hasta que los puntos de conexión señalen la finalización del trabajo.

En la tabla siguiente se enumeran los requisitos del contenido JSON:

Tipo de valor Cuerpo de la solicitud Cuerpo de respuesta
Objeto JSON Compatible Compatible
Matriz JSON Se ha agregado compatibilidad con .
(Actualmente, las matrices JSON no funcionan como resultado de un error. Hay una corrección en curso).
No compatible
Valor JSON Compatible No compatible
Tipo distinto de JSON No compatible No compatible

Administración

A continuación, se muestran los tipos de autenticación admitidos en la actividad web.

None

Si no es necesaria la autenticación, no incluya la propiedad "autenticación".

Básico

Especifique el nombre de usuario y la contraseña que se usarán con la autenticación básica.

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

Certificado de cliente

Especifique un contenido codificado en base64 de un archivo PFX y la contraseña.

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

El certificado debe ser un certificado x509. Para la conversión al archivo PFX, puede usar su utilidad favorita. Para la codificación base 64, puede usar el siguiente fragmento de código de PowerShell.

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

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

Identidad administrada

Especifique el URI de recurso para el que el token de acceso se solicitará utilizando la identidad administrada para la factoría de datos o la instancia del área de trabajo de Synapse. Para llamar a la API de administración de recursos de Azure, use https://management.azure.com/. Para obtener más información sobre cómo funcionan las identidades administradas, consulte la página de información general de identidades administradas managed identities for Azure resources.

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

Nota:

Si la factoría de datos o el área de trabajo de Synapse están configuradas con un repositorio git, debe almacenar las credenciales en Azure Key Vault para usar la autenticación básica o de certificado de cliente. El servicio no almacena contraseñas en Git.

Entidad de servicio

Especifique el identificador de inquilino, el identificador de entidad de servicio y la clave de entidad de servicio, mediante una cadena segura para el secreto de 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 un esquema de carga

Al usar el método POST o PUT, la propiedad body representa la carga que se envía al punto de conexión. Puede pasar servicios vinculados y conjuntos de datos como parte de la carga. Este es el esquema de la carga útil:

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

Ejemplo

En este ejemplo, la actividad web de la canalización llama a un punto de conexión REST. Pasa un servicio vinculado de Azure SQL y un conjunto de datos de Azure SQL al punto de conexión. El punto de conexión REST usa el Azure SQL cadena de conexión para conectarse al servidor SQL lógico y devuelve el nombre de la instancia de SQL Server.

Definición de la canalización

{
    "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 de canalización

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

Código de punto de conexión del servicio 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);
}

Consulte otras actividades de flujo de control admitidas: