

# Conexión a Anuncios de Instagram
<a name="connecting-to-data-instagram-ads"></a>

Instagram es una popular aplicación para compartir fotos que le permite conectarse con marcas, famosos, líderes de opinión, amigos, familiares y más. Es un servicio de redes sociales y para compartir fotos. Los usuarios pueden tomar fotos o grabar videos cortos y compartirlos con sus seguidores. Los anuncios de Instagram son publicaciones por las que las empresas pueden pagar para ofrecerlas a los usuarios de Instagram.

**Topics**
+ [Compatibilidad de AWS Glue con Anuncios de Instagram](instagram-ads-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](instagram-ads-configuring-iam-permissions.md)
+ [Configuración de Anuncios de Instagram](instagram-ads-configuring.md)
+ [Configuración de las conexiones de Anuncios de Instagram](instagram-ads-configuring-connections.md)
+ [Lectura desde entidades de Anuncios de Instagram](instagram-ads-reading-from-entities.md)
+ [Opciones de conexión en Anuncios de Instagram](instagram-ads-connection-options.md)
+ [Limitaciones y notas del conector de Anuncios de Instagram](instagram-ads-connector-limitations.md)

# Compatibilidad de AWS Glue con Anuncios de Instagram
<a name="instagram-ads-support"></a>

AWS Glue es compatible con Anuncios de Instagram de la siguiente manera:

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

**¿Es compatible como destino?**  
No.

**Versiones de la API de Anuncios de Instagram compatibles**  
Las siguientes versiones de la API de Anuncios de Instagram son compatibles:
+ v17.0
+ v18.0
+ v19.0
+ v20.0

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="instagram-ads-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 Anuncios de Instagram
<a name="instagram-ads-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos hacia o desde Anuncios de Instagram, debe cumplir estos requisitos:

## Requisitos mínimos
<a name="instagram-ads-configuring-min-requirements"></a>

Los requisitos mínimos son los siguientes:
+ Se accede a las cuentas estándar de Instagram directamente a través de Facebook.
+ Se necesita la autenticación del usuario para generar el token de acceso.
+ El conector del SDK de Anuncios de Instagram implementará el flujo *OAuth del token de acceso de usuario*.
+ Usamos OAuth2.0 para autenticar nuestras solicitudes de API en Anuncios de Instagram. Esta autenticación basada en la web pertenece a la arquitectura de autenticación multifactor (MFA), que es un superconjunto de 2FA.
+ El usuario debe conceder permisos para acceder a los puntos de conexión. Para acceder a los datos del usuario, la autorización del punto de conexión se administra mediante [permisos](https://developers.facebook.com/docs/permissions) y [características](https://developers.facebook.com/docs/features-reference).

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

Para obtener las credenciales de la API para poder hacer llamadas autenticadas a la instancia, consulte [API Graph](https://developers.facebook.com/docs/graph-api/).

# Configuración de las conexiones de Anuncios de Instagram
<a name="instagram-ads-configuring-connections"></a>

Anuncios de Instagram admite el tipo de concesión AUTHORIZATION\$1CODE para OAuth 2.
+ Este tipo de concesión se considera un OAuth de tres vías, ya que se basa en redirigir a los usuarios al servidor de autorización externo para autenticar al usuario. Se utiliza para crear conexiones a través de la consola de AWS Glue.
+ Los usuarios pueden optar por crear una aplicación conectada propia en Instagram Ads y proporcionar su propio ID y secreto de cliente al crear conexiones a través de la consola de AWS Glue. En este caso, se les continuará redirigiendo a Anuncios de Instagram para iniciar sesión y autorizar a AWS Glue para que acceda a sus recursos.
+ Este tipo de concesión da como resultado un token acceso. Un token de usuario del sistema que caduca es válido durante 60 días a partir de la fecha de generación o actualización. Para crear continuidad, el desarrollador debe actualizar el token de acceso en un plazo de 60 días. De lo contrario, se pierde el token de acceso y es necesario que el desarrollador obtenga uno nuevo para recuperar el acceso a la API. Consulte [Actualización del identificador de acceso](https://developers.facebook.com/docs/marketing-api/system-users/install-apps-and-generate-tokens/).

Configuración de una conexión de Anuncios de Instagram:

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**, seleccione Anuncios de Instagram.

   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. Proporcione el ID de cliente de la aplicación cliente administrada por el usuario.

   1. Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens. El secreto seleccionado debe tener una clave `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` cuyo valor sea el secreto del cliente de la aplicación conectada.

   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 Anuncios de Instagram
<a name="instagram-ads-reading-from-entities"></a>

**Requisito previo**

Un objeto de Anuncios de Instagram desde el cual le gustaría leer. Necesitará el nombre del objeto. En las siguientes tablas se muestran las entidades admitidas.

**Entidades compatibles como origen:**


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| Campaña | Sí | Sí | No | Sí | Sí | 
| Conjunto de anuncios | Sí | Sí | No | Sí | Sí | 
| Anuncios | Sí | Sí | No | Sí | Sí | 
| Creatividad de anuncios | No | Sí | No | Sí | No | 
| Información: cuenta | No | Sí | No | Sí | No | 
| Imagen del anuncio | Sí | Sí | No | Sí | No | 
| Información: anuncio | Sí | Sí | No | Sí | Sí | 
| Información: conjunto de anuncios | Sí | Sí | No | Sí | Sí | 
| Información: campaña | Sí | Sí | No | Sí | Sí | 

**Ejemplo:**

```
instagramAds_read = glueContext.create_dynamic_frame.from_options(
    connection_type="instagramads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0"
    }
```

## Detalles de la entidad y el campo de Anuncios de Instagram
<a name="instagram-ads-reading-entity-and-field-details"></a>

Para obtener más información acerca de las entidades y los detalles de los campos, consulte:
+ [Campaña](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group)
+ [Conjunto de anuncios](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign)
+ [Anuncio](https://developers.facebook.com/docs/marketing-api/reference/adgroup)
+ [Creatividad de anuncios](https://developers.facebook.com/docs/marketing-api/reference/ad-creative)
+ [Ad Account Insight](https://developers.facebook.com/docs/marketing-api/reference/ad-account/insights)
+ [Ad Image](https://developers.facebook.com/docs/marketing-api/reference/ad-image)
+ [Ad Insights](https://developers.facebook.com/docs/marketing-api/reference/adgroup/insights/)
+ [AdSets Insights](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign/insights)
+ [Campaigns Insights](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group/insights)

Para obtener más información, consulte [API de marketing](https://developers.facebook.com/docs/marketing-api/reference/v21.0).

**nota**  
Los tipos de datos de estructura y lista se convierten en tipos de datos de cadena en respuesta a los conectores.

## Consultas de particionamiento
<a name="instagram-ads-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.

  En el campo DateTime, aceptamos el formato de marca de tiempo de Spark que se utiliza en las consultas de Spark SQL.

  Ejemplo de valor válido:

  ```
  "2022-01-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.

  Ejemplo de valor válido:

  ```
  "2024-01-02T00:00:00.000Z"
  ```
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
instagramADs_read = glueContext.create_dynamic_frame.from_options(
    connection_type="instagramads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0",
        "PARTITION_FIELD": "created_time"
        "LOWER_BOUND": "2022-01-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-01-02T00:00:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Opciones de conexión en Anuncios de Instagram
<a name="instagram-ads-connection-options"></a>

Las siguientes son opciones de conexión para Anuncios de Instagram:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre de su objeto en Anuncios de Instagram.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. La versión de la API de Graph de Anuncios de Instagram que desea utilizar. Por ejemplo: v21.
+ `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 lectura. Campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`(cadena): se usa para lectura. Un valor de límite inferior inclusivo del campo de partición elegido.
+ `UPPER_BOUND`(cadena): se usa para lectura. 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.

# Limitaciones y notas del conector de Anuncios de Instagram
<a name="instagram-ads-connector-limitations"></a>

Las siguientes son limitaciones o notas para el conector de Anuncios de Instagram:
+ El recuento de llamadas de una aplicación es el número de llamadas que un usuario puede hacer durante un periodo continuo de una hora, multiplicado por 200 por el número de usuarios. Para obtener información sobre los límites de frecuencia, consulte [Límites de frecuencia](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/) y [Límites de frecuencia de casos de uso comercial](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/#buc-rate-limits).