

# Conexión a Adobe Marketo Engage
<a name="connecting-to-data-adobe-marketo-engage"></a>

Adobe Marketo Engage es una plataforma de automatización de marketing que permite a los profesionales del marketing administrar programas y campañas multicanal personalizados para clientes y posibles clientes.

**Topics**
+ [Compatibilidad de AWS Glue con Adobe Marketo Engage](adobe-marketo-engage-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](adobe-marketo-engage-configuring-iam-permissions.md)
+ [Configuración de Adobe Marketo Engage](adobe-marketo-engage-configuring.md)
+ [Configuración de las conexiones a Adobe Marketo Engage](adobe-marketo-engage-configuring-connections.md)
+ [Lectura desde entidades de Adobe Marketo Engage](adobe-marketo-engage-reading-from-entities.md)
+ [Escritura en entidades de Adobe Marketo Engage](adobe-marketo-engage-writing-to-entities.md)
+ [Opciones de conexión de Adobe Marketo Engage](adobe-marketo-engage-connection-options.md)
+ [Limitaciones y notas para el conector de Adobe Marketo Engage](adobe-marketo-engage-connector-limitations.md)

# Compatibilidad de AWS Glue con Adobe Marketo Engage
<a name="adobe-marketo-engage-support"></a>

AWS Glue es compatible con Adobe Marketo Engage de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede usar los trabajos de ETL de AWS Glue para consultar datos de Adobe Marketo Engage.

**¿Es compatible como destino?**  
Sí. Puede usar trabajos de ETL de AWS Glue para escribir datos en Adobe Marketo Engage.

**Versiones compatibles de la API de Supported Adobe Marketo**  
Se admiten las siguientes versiones de la API de Adobe Marketo Engage:
+ v1

Para conocer la compatibilidad de entidades por versión específica, consulte Entidades admitidas para el origen.

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="adobe-marketo-engage-configuring-iam-permissions"></a>

En el siguiente ejemplo de política se describen los permisos de AWS IAM necesarios para crear y utilizar conexiones. Si va a crear un nuevo rol, cree una política que contenga lo siguiente:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Si no desea utilizar el método anterior, puede utilizar las siguientes políticas de IAM administradas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): da acceso a recursos que precisan diversos procesos de AWS Glue para ejecutarse en su nombre. Entre estos recursos se incluyen AWS Glue, Amazon S3, IAM, CloudWatch Logs y Amazon EC2. Si aplica la convención de nomenclatura en los recursos especificados en esta política, los procesos de AWS Glue tienen los permisos necesarios. Normalmente, esta política se asocia a los roles que se especifican a la hora de definir rastreadores, trabajos y puntos de conexión de desarrollo.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): otorga acceso total a los recursos de AWS Glue cuando una identidad a la que está asociada la política utiliza la Consola de administración de AWS. Si sigue la convención de nomenclatura para los recursos especificados en esta política, los usuarios dispondrán de todas las funciones de la consola. Esta política se suele adjuntar a los usuarios de la consola AWS Glue.

# Configuración de Adobe Marketo Engage
<a name="adobe-marketo-engage-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos desde Adobe Marketo Engage, deberá cumplir estos requisitos:

## Requisitos mínimos
<a name="adobe-marketo-engage-configuring-min-requirements"></a>

Los requisitos mínimos son los siguientes:
+ Tener una cuenta de Adobe Marketo Engage con credenciales de cliente.
+ La cuenta de Adobe Marketo Engage debe disponer de acceso de API con una licencia válida.

Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de Adobe Marketo Engage. Si es una conexión típica, no necesita hacer nada más en Adobe Marketo Engage.

## Obtención de las credenciales de OAuth 2.0
<a name="adobe-marketo-engage-configuring-creating-adobe-marketo-engage-oauth2-credentials"></a>

Para obtener las credenciales de la API para poder hacer llamadas autenticadas a la instancia, consulte [Adobe Marketo Rest API](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/rest-api).

# Configuración de las conexiones a Adobe Marketo Engage
<a name="adobe-marketo-engage-configuring-connections"></a>

Adobe Marketo Engage admite el tipo de concesión CLIENT CREDENTIALS para OAuth2.
+ Este tipo de concesión se considera OAuth 2.0 de doble vía, ya que lo utilizan los clientes para obtener un código de acceso fuera del contexto de un usuario. AWS Glue puede utilizar el ID de cliente y el secreto de cliente para autenticar las API de Adobe Marketo Engage que proporcionan los servicios personalizados que se definan.
+ Cada servicio personalizado pertenece a un usuario exclusivo de la API con un conjunto de roles y permisos que autorizan al servicio a realizar acciones específicas. Un token de acceso está asociado a un único servicio personalizado.
+ Este tipo de concesión da lugar a un token de acceso de corta duración, que se puede renovar mediante una llamada a un punto de conexión de identidad.
+ Para consultar la documentación pública de Adobe Marketo Engage para OAuth 2.0 con credenciales de cliente, consulte [Autenticación](https://developers.adobe-marketo-engage.com/rest-api/authentication/) en la Guía para desarrolladores de Adobe Marketo Engage.

Para configurar una conexión a Adobe Marketo Engage:

1. En AWS Secrets Manager, cree un secreto con los siguientes detalles:

   1. En el caso de las aplicaciones conectadas administradas por el cliente, el secreto debe contener el secreto del consumidor de la aplicación conectada con `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` como clave.

   1. Nota: Debe crear un secreto por cada conexión en AWS Glue.

1. En AWS Glue Glue Studio, cree una conexión en **Conexiones de datos** según los pasos que se indican a continuación:

   1. Al seleccionar un **Tipo de conexión**, elija Adobe Marketo Engage.

   1. Proporcione la `INSTANCE_URL` de la instancia de Adobe Marketo Engage a la que se quiere conectar.

   1. Seleccione el rol de AWS IAM que AWS Glue pueda asumir y que tenga permisos para las siguientes acciones:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens.

   1. Seleccione las opciones de red si quiere usar su red.

1. Conceda el rol de IAM asociado a su permiso de trabajo de AWS Glue para leer `secretName`.

# Lectura desde entidades de Adobe Marketo Engage
<a name="adobe-marketo-engage-reading-from-entities"></a>

**Requisito previo**

Un objeto de Adobe Marketo Engage desde el que le gustaría leer. Necesitará el nombre del objeto, como clientes potenciales, actividades u objetos personalizados. En las siguientes tablas se muestran las entidades admitidas.

**Entidades compatibles con el origen (síncronas)**:


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| leads | Sí | Sí | No | Sí | No | 
| actividades | Sí | Sí | No | Sí | No | 
| customobjects | Sí | Sí | No | Sí | No | 

**Entidades compatibles con el origen (asíncronas)**:


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| leads | Sí | No | No | Sí | Sí | 
| actividades | Sí | No | No | Sí | No | 
| customobjects | Sí | No | No | Sí | Sí | 

**Ejemplo:**

```
adobe-marketo-engage_read = glueContext.create_dynamic_frame.from_options(
    connection_type="adobe-marketo-engage",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v2",
        "INSTANCE_URL": "https://539-t**-6**.mktorest.com"
    }
```

**Detalles de la entidad y el campo de Adobe Marketo Engage**:

**Entidades con metadatos estáticos**: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

**Entidades con metadatos dinámicos**:

Para las siguientes entidades, Adobe Marketo Engage proporciona puntos de conexión para obtener los metadatos de forma dinámica, de modo que la compatibilidad del operador se capture en el nivel del tipo de datos de cada entidad.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

## Consultas de particionamiento
<a name="adobe-marketo-engage-reading-partitioning-queries"></a>

Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere utilizar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.
+ `PARTITION_FIELD`: el nombre del campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`: un valor de límite inferior **inclusivo** del campo de partición elegido.

  Para el campo DateTime, aceptamos el valor en formato ISO.

  Ejemplo de valor válido:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.

En la tabla siguiente, se describen los detalles de compatibilidad de campos de particiones de entidades:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

Ejemplo:

```
adobe-marketo-engage_read = glueContext.create_dynamic_frame.from_options(
    connection_type="adobe-marketo-engage",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "createdAt"
        "LOWER_BOUND": "2024-07-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-07-02T00:00:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Escritura en entidades de Adobe Marketo Engage
<a name="adobe-marketo-engage-writing-to-entities"></a>

**Requisitos previos**
+ Un objeto de Adobe Marketo en el que desea escribir. Necesitará el nombre del objeto, como `leads` o `customobjects`.
+ El conector de Adobe Marketo admite tres operaciones de escritura:
  + INSERT
  + UPSERT
  + UPDATE
+ Para las operaciones de escritura `UPSERT` y `UPDATE`, debe proporcionar la opción `ID_FIELD_NAMES` para especificar el campo de ID para los registros. Cuando trabaje con la entidad `leads`, utilice `email` como `ID_FIELD_NAMES` para las operaciones `UPSERT` y `id` para las operaciones `UPDATE`. Para la entidad `customobjects`, utilice `marketoGUID` como `ID_FIELD_NAMES` tanto para las operaciones `UPDATE` como `UPSERT`.

**Entidades compatibles para destino (Sincrónico)**


| Nombre de la entidad | Se admitirá como conector de destino | Se puede insertar | Se puede actualizar | Se puede actualizar o insertar | 
| --- | --- | --- | --- | --- | 
| leads | Sí | Sí (masivo) | Sí (masivo) | Sí (masivo) | 
| customobjects | Sí | Sí (masivo) | Sí (masivo) | Sí (masivo) | 

**Ejemplo:**

**Operación INSERT:**

```
marketo_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="marketo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "WRITE_OPERATION": "INSERT"
    }
```

**Operación UPDATE:**

```
marketo_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="marketo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "WRITE_OPERATION": "UPDATE",
        "ID_FIELD_NAMES": "id"
    }
```

**nota**  
Para las entidades `leads` y `customobjects`, Adobe Marketo proporciona puntos de conexión para recuperar los metadatos de forma dinámica, de modo que los campos modificables se identifiquen en la respuesta de la API de Marketo.

# Opciones de conexión de Adobe Marketo Engage
<a name="adobe-marketo-engage-connection-options"></a>

Las siguientes son opciones de conexión para Adobe Marketo Engage:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre de su objeto en Adobe Marketo Engage.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de Rest de Adobe Marketo Engage que desea utilizar. Por ejemplo: v1.
+ `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Columnas que desee seleccionar para el objeto.
+ `FILTER_PREDICATE`(cadena): predeterminado: vacío. Se usa para leer. Debe estar en el formato de Spark SQL.
+ `QUERY`(cadena): predeterminado: vacío. Se usa para leer. Consulta completa de Spark SQL.
+ `PARTITION_FIELD`(cadena): se usa para leer. Campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`(cadena): se usa para leer. Un valor de límite inferior inclusivo del campo de partición elegido.
+ `UPPER_BOUND`(cadena): se usa para leer. Un valor límite superior exclusivo del campo de partición elegido. 
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer.
+ `TRANSFER_MODE`(cadena): Predeterminado: SYNC. Se utiliza para la lectura asíncrona.
+ `WRITE_OPERATION`(cadena): predeterminado: INSERT. Se utiliza para escribir. El valor debe ser INSERT, UPDATE, UPSERT.
+ `ID_FIELD_NAMES`(cadena): predeterminado: nulo. Necesario para UPDATE y UPSERT.

# Limitaciones y notas para el conector de Adobe Marketo Engage
<a name="adobe-marketo-engage-connector-limitations"></a>

Las siguientes son limitaciones o notas para el conector de Adobe Marketo Engage:
+ “sinceDatetime” y “activityTypeId” son parámetros de filtro obligatorios para la entidad de sincronización de actividades.
+ A las suscripciones se les asignan 50 000 llamadas a la API al día (que se restablecen diariamente a las 12:00 h CST). Se puede adquirir capacidad diaria adicional como parte de una suscripción a Adobe Marketo Engage. Como referencia, consulte la [Adobe Marketo Rest API](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/rest-api).
+ El intervalo de tiempo máximo para el filtro de intervalo de fechas (`createdAt` o `updatedAt`) es de 31 días. Como referencia, consulte [Bulk Extract - Marketo Developers](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract).
+ A las suscripciones se les asigna un máximo de 10 trabajos de extracción masiva en la cola en un momento dado. Como referencia, consulte [Bulk Extract - Marketo Developers](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract).
+ De forma predeterminada, los trabajos de extracción están limitados a 500 MB por día (que se restablece diariamente a las 12:00 h CST). Se puede adquirir capacidad diaria adicional como parte de una suscripción a Adobe Marketo Engage. Como referencia, consulte [Bulk Extract - Marketo Developers](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract).
+ La cantidad máxima de trabajos de exportación simultáneos es de 2. Como referencia, consulte [Bulk Extract - Marketo Developers](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract).
+ La cantidad máxima de trabajos de exportación en cola (incluidos los trabajos que se exportan actualmente) es de 10. Como referencia, consulte [Bulk Extract - Marketo Developers](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract).
+ El tamaño máximo de archivo permitido es de 1 GB para extraer de un trabajo masivo.
+ Una vez creado un trabajo asíncrono, el periodo de retención del archivo será de 7 días antes de expirar. Como referencia, consulte [Bulk Extract - Marketo Developers](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract).
+ `createdAt` o `updatedAt` son parámetros de filtro obligatorios para la entidad Async Leads.
+ En la entidad Async Activities, `createdAt` es un parámetro de filtro obligatorio.
+ En la entidad Async Custom Object, `updatedAt` es un parámetro de filtro obligatorio.
+ Al usar conectores de Saas AWS Glue, los usuarios no pueden identificar qué registros específicos fallaron durante una operación de escritura en las plataformas SaaS de destino en caso de fallos parciales.
+ Al utilizar operaciones de escritura sincrónica, todos los campos con valores nulos en el archivo de entrada se eliminarán de forma automática y no se enviarán a la plataforma SaaS.
+ Puede crear o actualizar hasta 300 registros en un lote para la escritura sincrónica.

Para obtener más información, consulte [Prácticas recomendadas de integración de Adobe Marketo Engage](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/marketo-integration-best-practices) y [Extracción masiva](https://https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-activity-extract).