

# Conexión a ServiceNow
<a name="connecting-to-data-servicenow"></a>

ServiceNow es una plataforma SaaS basada en la nube para automatizar los flujos de trabajo de administración de TI. La plataforma ServiceNow se integra fácilmente con otras herramientas, lo que permite a los usuarios administrar proyectos, equipos e interacciones con los clientes mediante una variedad de aplicaciones y complementos. Como usuario de ServiceNow, puede conectar AWS Glue a su cuenta de ServiceNow. Tras ello, podrá utilizar ServiceNow como origen de datos en los trabajos de ETL. Ejecute estos trabajos para transferir datos entre ServiceNow y los servicios de AWS u otras aplicaciones compatibles.

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

# Compatibilidad de AWS Glue con ServiceNow
<a name="servicenow-support"></a>

AWS Glue es compatible con ServiceNow de la siguiente manera:

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

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

**Versiones de la API de ServiceNow compatibles**  
Las siguientes versiones de la API de ServiceNow son compatibles:
+ v2

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="servicenow-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 ServiceNow
<a name="servicenow-configuring"></a>

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

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

Los requisitos mínimos son los siguientes:
+ Tener una cuenta de ServiceNow con correo electrónico y contraseña. Para obtener más información, consulte [Creación de una cuenta de ServiceNow](#servicenow-configuring-creating-servicenow-account).
+ La cuenta de ServiceNow debe estar habilitada para el acceso de API. La API de ServiceNow se puede utilizar sin ningún costo adicional.

Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de ServiceNow.

## Creación de una cuenta de ServiceNow
<a name="servicenow-configuring-creating-servicenow-account"></a>

Para crear una cuenta de ServiceNow:

1. Diríjase a la página de registro de servicenow.com, introduzca sus datos y haga clic en **Continuar**.

1. Una vez que reciba un código de verificación en su correo electrónico registrado, introdúzcalo y seleccione **Verificar**.

1. Configure la autenticación multifactor u omita este paso.

Se crea la cuenta y ServiceNow muestra su perfil.

## Crear una instancia de desarrollador de ServiceNow
<a name="servicenow-configuring-creating-servicenow-developer-instance"></a>

Solicite una instancia de desarrollador después de iniciar sesión en ServiceNow.

1. En la [página de inicio de sesión de ServiceNow](https://signon.service-now.com/x_snc_sso_auth.do?pageId=username), introduzca las credenciales de su cuenta.

1. Seleccione el **Programa para desarrolladores de ServiceNow**.  
![\[\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/servicenow-dev-program.png)

1. Seleccione **Solicitar instancia** en la esquina superior derecha.

1. Introduzca sus responsabilidades laborales. Indique que está de acuerdo con las condiciones de uso y seleccione **Finalizar la configuración**.

1. Una vez creada la instancia, anote la URL y las credenciales de la instancia.

## Recuperar credenciales de autenticación básica
<a name="servicenow-configuring-basic-auth"></a>

Para recuperar las credenciales de autenticación básica para una cuenta gratuita:

1. En la [página de inicio de sesión de ServiceNow](https://signon.service-now.com/x_snc_sso_auth.do?pageId=username), introduzca las credenciales de su cuenta.

1. En la página de inicio, elija la sección de edición de perfil (esquina superior derecha) y seleccione **Administrar contraseña de instancia**.

1. Recupere las credenciales de inicio de sesión, como el nombre de usuario, la contraseña y la URL de la instancia.

**nota**  
Si está habilitada la MFA para la cuenta, añada el token de la MFA al final de la contraseña del usuario en la autenticación básica: <nombredeusuario>:<contraseña><token de MFA>

Para obtener más información, consulte [Compilación de aplicaciones](https://docs.servicenow.com/bundle/xanadu-application-development/page/build/custom-application/concept/build-applications.html) en la documentación de ServiceNow.

## Creación de credenciales de OAuth 2.0
<a name="servicenow-configuring-basic-auth"></a>

Para usar OAuth2.0 en el conector de ServiceNow, debe crear un cliente entrante para generar el ID de cliente y el secreto del cliente:

1. En la [página de inicio de sesión de ServiceNow](https://signon.service-now.com/x_snc_sso_auth.do?pageId=username), introduzca las credenciales de su cuenta.

1. En la página de inicio, elija **Iniciar compilación**.

1. En la página de App Engine Studio, busque **Registro de aplicaciones**.

1. Seleccione **Nuevo** en la esquina superior derecha.

1. Elija la opción **Crear un punto de conexión de la API de OAuth para clientes externos**.

1. Realice los cambios necesarios en la configuración de OAuth y seleccione **Actualizar**.

   Ejemplo de URL de redirección: https://us-east-1.console.aws.amazon.com/gluestudio/oauth

1. Seleccione la aplicación cliente de OAuth recién creada para recuperar el ID de cliente y el secreto del cliente.

1. Guarde el ID de cliente y el secreto del cliente para su posterior procesamiento.

Para configurar OAuth en una cuenta de desarrollador que no sea de producción:

1. Use el tema [Crear un perfil de autenticación](https://docs.servicenow.com/bundle/washingtondc-platform-security/page/integrate/authentication/task/create-an-authentication-profile.html) de la documentación de ServiceNow para crear un perfil de autenticación.

1. En el perfil de autenticación de OAuth, seleccione **Tipo** como OAuth y seleccione el cliente entrante creado anteriormente para configurar la **Entidad de OAuth**.

1. Si hay varios clientes, debe crear varios perfiles de autenticación para establecer la entidad OAuth requerida en el perfil de autenticación.

1. Si no se configuró, cree una política de acceso a la API de REST para dar acceso a la API TABLE. Consulte [Crear una política de acceso a la API de REST](https://docs.servicenow.com/bundle/washingtondc-platform-security/page/integrate/authentication/task/create-api-access-policy.html).

# Configuración de conexiones a ServiceNow
<a name="servicenow-configuring-connections"></a>

El tipo de concesión determina cómo AWS Glue se comunica con ServiceNow para solicitar el acceso a los datos. Su elección afecta a los requisitos que debe cumplir antes de crear la conexión. ServiceNow solo admite el tipo de concesión AUTHORIZATION\$1CODE para OAuth 2.0.
+ Este tipo de concesión se considera un OAuth de “tres vías”, ya que se basa en redirigir a los usuarios a un servidor de autorización externo para autenticar al usuario. Se utiliza para crear conexiones a través de la consola de AWS Glue. La consola de AWS Glue redirigirá al usuario a ServiceNow, donde deberá iniciar sesión y otorgar a AWS Glue los permisos solicitados para acceder a la instancia de ServiceNow.
+ Los usuarios aún pueden optar por crear una aplicación conectada propia en ServiceNow y proporcionar un identificador de cliente y un secreto de cliente propios al crear conexiones a través de la consola de AWS Glue. En este escenario, aún se abrirá ServiceNow 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 de actualización y un token de acceso. El token de acceso es de corta duración y se puede actualizar automáticamente sin la interacción del usuario mediante el token de actualización.
+ Para consultar la documentación pública de ServiceNow sobre la creación de una aplicación conectada para el flujo Authorization Code OAuth, consulte [Configuración de OAuth](https://docs.servicenow.com/bundle/vancouver-platform-security/page/administer/security/task/t_SettingUpOAuth.html).

Para configurar una conexión a ServiceNow:

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

   1. Para la autenticación básica, el secreto debe contener el secreto del consumidor de la aplicación conectada con `USERNAME` y `PASSWORD` como clave.

   1. Para un tipo de concesión de código de autorización, 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 el **Tipo de conexión**, elija ServiceNow.

   1. Proporcione el valor INSTANCE\$1URL de la instancia de ServiceNow a la que se desea 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 **Tipo de autenticación** que quiere utilizar para esta conexión en AWS Glue.

      1. Autenticación básica: este tipo de autenticación funciona bien en escenarios de automatización, ya que permite utilizar el nombre de usuario y la contraseña desde el comienzo con los permisos de un usuario en particular en la instancia de ServiceNow. AWS Glue puede usar el nombre de usuario y la contraseña para autenticar las API de ServiceNow. Introduzca las siguientes entradas solo en el caso de la autenticación básica: `Username` y `Password`.

      1. OAuth 2: ingrese las siguientes entradas solo en el caso de OAuth 2: `ClientId`, `ClientSecret`, `Authorization URL` y `Authorization Token URL`.

   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 de entidades de ServiceNow
<a name="servicenow-reading-from-entities"></a>

**Requisito previo**

Un objeto de tablas de ServiceNow desde el cual desearía leer. Necesitará el nombre del objeto, como pa\$1bucket o incident.

**Ejemplo:**

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2"
        "instanceUrl": "https://<instance-name>.service-now.com"
    }
)
```

**Detalles de la entidad y del campo de ServiceNow**:

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

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

**nota**  
El tipo de datos de estructura se convierte en un tipo de datos de cadena en la respuesta del conector.

**nota**  
`DML_STATUS` es un atributo adicional definido por el usuario que se utiliza para hacer un seguimiento de los registros CREADOS o ACTUALIZADOS.

## Consultas de partición
<a name="servicenow-reading-partitioning-queries"></a>

**Partición basada en campos**:

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.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/servicenow-reading-from-entities.html)
+ `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.

  Ejemplos de valor válido:

  ```
  "2024-01-30T06:47:51.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:

Ejemplo:

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2",
        "instanceUrl": "https://<instance-name>.service-now.com"
        "PARTITION_FIELD": "sys_created_on"
        "LOWER_BOUND": "2024-01-30T06:47:51.000Z"
        "UPPER_BOUND": "2024-06-30T06:47:51.000Z"
        "NUM_PARTITIONS": "10"
    }
```

**Partición basada en registros**:

Puede proporcionar la opción adicional `NUM_PARTITIONS` de Spark si quiere usar la simultaneidad en Spark. Con estos parámetros, la consulta original se divide en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.

En la partición basada en registros, el número total de registros presentes se consulta desde la API de ServiceNow y se divide por el número proporcionado `NUM_PARTITIONS`. A continuación, cada subconsulta obtiene simultáneamente el número de registros resultante.
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2",
        "instanceUrl": "https://<instance-name>.service-now.com"
        "NUM_PARTITIONS": "2"
    }
```

# Opciones de conexión a ServiceNow
<a name="servicenow-connection-options"></a>

Estas son las opciones para establecer la conexión con ServiceNow:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre del objeto en ServiceNow.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de REST de ServiceNow que desea usar. Por ejemplo: v1,v2,v3,v4.
+ `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. Por ejemplo: 2024-01-30T06:47:51.000Z.
+ `UPPER_BOUND`(cadena): se usa para leer. Un valor límite superior exclusivo del campo de partición elegido. Por ejemplo: 2024-06-30T06:47:51.000Z.
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer. Por ejemplo, 10.
+ `INSTANCE_URL`(cadena): (obligatorio) una URL de instancia de ServiceNow válida con el formato https://<nombre-de-instancia>.servicenow.com.
+ `PAGE_SIZE`(entero): define el tamaño de la página para consultar los registros. El tamaño de página predeterminado es 1000. Cuando se especifica un tamaño de página, ServiceNow devuelve solo el número definido de registros por llamada a la API, en lugar del conjunto de datos completo. El conector seguirá proporcionando el número total de registros y gestionará la paginación utilizando el tamaño de página que especificó. Si necesita un tamaño de página mayor, puede elegir cualquier valor de hasta 10 000, que es el máximo permitido. Se ignorará cualquier tamaño de página especificado superior a 10 000. En su lugar, el sistema utilizará el tamaño de página máximo permitido. Puede especificar el tamaño de página en la interfaz de usuario de AWS Glue Studio agregando una opción de conexión `PAGE_SIZE` con el valor que desee. Por ejemplo, 5000.

# Limitaciones y notas del conector de ServiceNow
<a name="servicenow-connector-limitations"></a>

Las siguientes son limitaciones o notas del conector de ServiceNow:
+ Según la [documentación de SaaS](https://www.servicenow.com/docs/bundle/washingtondc-application-development/page/build/applications/reference/r_GlobalDefaultFields.html), `sys_created_on`, `sys_updated_on` y `sys_mod_count` son campos generados por el sistema. El conector se basa en las API de SaaS para proporcionar estos campos en el cuerpo de la respuesta.
  + Si SaaS no genera estos campos para ninguna entidad, no se puede admitir la partición basada en filtros.
+ Si las API de SaaS no devuelven los campos `sys_created_on` y `sys_updated_on` de la respuesta, `DML_STATUS` no se pueden calcular.
+ Mejore el rendimiento y la eficiencia de lectura
  + El conector ServiceNow ahora clasifica automáticamente los registros en orden ascendente por el campo `sys_id` (debe estar presente en los metadatos) cuando el usuario no especifica ninguna cláusula ORDER BY. En este caso, los registros se paginarán mediante la nueva paginación optimizada basada en conjuntos de claves.
  + Si se especifica la cláusula ORDER BY, no se utilizará la nueva optimización y los registros se obtendrán mediante el método existente (paginación definida por el usuario con Order By y basada en Offset-Limit).