

# Conexión a una API de REST
<a name="connecting-to-data-rest-api"></a>

 AWS Glue le permite configurar un ConnectionType de la AWS Glue que se puede usar para conectar la AWS Glue a cualquier origen de datos basado en la API de REST. Se puede utilizar como un origen de datos en los trabajos de ETL. Se pueden ejecutar estos trabajos para transferir datos entre el origen de datos basado en la API de REST y los servicios de AWS u otras aplicaciones compatibles. 

**Topics**
+ [Compatibilidad de AWS Glue con la API de REST](rest-api-support.md)
+ [Políticas que contienen las operaciones de la API para registrar los tipos de conexiones y crear y usar conexiones](rest-api-configuring-iam-permissions.md)
+ [Configuración de ConnectionType de la API de REST](rest-api-configuring.md)
+ [Configuración de una conexión de la API de REST](rest-api-configuring-connections.md)
+ [Instructivo: Creación de un recurso ConnectionType y una conexión de la API de REST](rest-api-example.md)
+ [Limitaciones](rest-api-limitations.md)

# Compatibilidad de AWS Glue con la API de REST
<a name="rest-api-support"></a>

AWS Glue admite la API de REST de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede utilizar los trabajos de ETL de AWS Glue para consultar datos de un origen de datos basado en la API de REST.

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

# Políticas que contienen las operaciones de la API para registrar los tipos de conexiones y crear y usar conexiones
<a name="rest-api-configuring-iam-permissions"></a>

 En el siguiente ejemplo de la política de IAM se describen los permisos necesarios para registrar, crear, administrar y utilizar conexiones de la API de REST con los trabajos de ETL de la AWS Glue. Si va a crear un nuevo rol, cree una política que contenga lo siguiente: 

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

También puede usar las siguientes políticas de IAM para permitir el acceso:
+ [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.

Si se proporcionan opciones de red al crear una conexión de la API de REST, también se deben incluir las siguientes acciones en el rol de IAM:

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

# Configuración de ConnectionType de la API de REST
<a name="rest-api-configuring"></a>

 Antes de poder utilizar la AWS Glue para transferir datos desde el origen de datos basado en la API de REST, debe cumplir estos requisitos: 

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

Los requisitos mínimos son los siguientes:
+  Se ha configurado y registrado un tipo de conexión de la API de REST de la AWS Glue. Consulte [Conectarse a las API de REST](https://docs.aws.amazon.com/glue/latest/dg/rest-api-connections.html). 
+  Si se utilizan las credenciales del cliente OAuth2, el código de autorización o el JWT, se debe configurar la aplicación cliente en consecuencia. 

 Si se cumplen estos requisitos, estará listo para conectar la AWS Glue al origen de datos basado en la API de REST. Por lo general, no se necesitan más configuraciones en el lado de la API de REST. 

# Configuración de una conexión de la API de REST
<a name="rest-api-configuring-connections"></a>

 Para configurar un conector de la API de REST de AWS Glue, debe configurar un tipo de conexión de la AWS Glue. Este tipo de conexión contiene detalles sobre las propiedades de funcionamiento del origen de datos de REST e interpreta aspectos como la autenticación, las solicitudes, las respuestas, la paginación, las validaciones y las entidades/los metadatos. Para obtener una lista completa de las propiedades necesarias para un tipo de conexión REST de AWS Glue, consulte la API [RegisterConnectionType](https://docs.aws.amazon.com/glue/latest/webapi/API_DescribeConnectionType.html) y los pasos para [conectarse a las API de REST](https://docs.aws.amazon.com/glue/latest/dg/rest-api-connections.html). 

 Al crear el conector de la API de REST, se necesita la siguiente política para permitir las acciones pertinentes: 

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

# Instructivo: Creación de un recurso ConnectionType y una conexión de la API de REST
<a name="rest-api-example"></a>

**Conexión a la API de REST de Foo**

 Crearemos un recurso ConnectionType de la API de REST de la AWS Glue y una conexión de la AWS Glue correspondiente para la API de REST de Foo. Esta API tiene las siguientes propiedades (que se pueden recuperar de la documentación de la API de REST). 
+  **URL de la instancia**: https://foo.cloud.com/rest/v1. 
+  **Tipo de autenticación**: OAuth2 (credenciales de cliente). 
+  **Método de REST**: GET. 
+  **Tipo de paginación**: compensación con las propiedades “limit” y “offset” situadas en el parámetro de consulta de la solicitud. 
+ **Entidades compatibles**:
  +  **Bar**: ruta relativa [/bar.json]. 
  +  **Baz**: ruta relativa [/baz.json]. 

 Una vez obtenidos todos los detalles, podemos empezar a crear la conexión de la AWS Glue a la API de REST de Foo. 

**Para crear una conexión de la API de REST**:

1.  Cree el tipo de conexión de la API de REST en la AWS Glue al llamar a la API de RegisterConnectionType mediante la API, la CLI o el SDK de AWS. Esto creará un nuevo recurso ConnectionType en la AWS Glue. 

   ```
   {
       "ConnectionType": "REST-FOO-CONNECTOR",
       "IntegrationType": "REST",
       "Description": "AWS Glue Connection Type for the FOO REST API",
       "ConnectionProperties": {
           "Url": {
               "Name": "Url",
               "Required": true,
               "DefaultValue": "https://foo.cloud.com/rest/v1",
               "PropertyType": "USER_INPUT"
           }
       },
       "ConnectorAuthenticationConfiguration": {
           "AuthenticationTypes": ["OAUTH2"],
           "OAuth2Properties": {
               "OAuth2GrantType": "CLIENT_CREDENTIALS"
           }
       },
       "RestConfiguration": {
           "GlobalSourceConfiguration": {
           "RequestMethod": "GET",
           "ResponseConfiguration": {
               "ResultPath": "$.result",
               "ErrorPath": "$.error.message"
           },
           "PaginationConfiguration": {
               "OffsetConfiguration": {
                   "OffsetParameter": {
                       "Key": "offset",
                       "PropertyLocation": "QUERY_PARAM"
                   },
                   "LimitParameter": {
                       "Key": "limit",
                       "PropertyLocation": "QUERY_PARAM",
                       "DefaultValue": "50"
                   }
               }
           }
       },
       "ValidationEndpointConfiguration": {
           "RequestMethod": "GET",
           "RequestPath": "/bar.json?offset=1&limit=10"
       },
       "EntityConfigurations": {
           "bar": {
               "SourceConfiguration": {
                   "RequestMethod": "GET",
                   "RequestPath": "/bar.json",
                   "ResponseConfiguration": {
                       "ResultPath": "$.result",
                       "ErrorPath": "$.error.message"
                   }
               },
               "Schema": {
                   "name": {
                       "Name": "name",
                       "FieldDataType": "STRING"
                   },
                   "description": {
                       "Name": "description",
                       "FieldDataType": "STRING"
                   },
                   "id": {
                       "Name": "id",
                       "FieldDataType": "STRING"
                   },
                   "status": {
                       "Name": "status",
                       "FieldDataType": "STRING"
                   }
               }
           }
       }
   }
   }
   ```

1.  En AWS Secrets Manager, crear un secreto. El secreto debe contener el secreto del consumidor de la aplicación conectada con `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` como clave. 
**nota**  
Debe crear un secreto por cada conexión en la AWS Glue.

1.  Cree la conexión de la AWS Glue al llamar a la API CreateConnection mediante la API, la CLI o el SDK de AWS. 

   1.  Haga referencia al nombre del tipo de conexión REST del paso 1 como “ConnectionType”. 

   1.  Proporcione la InstanceURL y cualquier otra propiedad de ConnectionProperties que se haya definido durante el proceso de registro de ConnectionType de la AWS Glue. 

   1.  Elija uno de los tipos de autenticación configurados. La API de REST de Foo usa OAuth2 con el tipo de concesión ClientCredentials. 

   1.  Proporcione **SecretArn** y otras **AuthenticationProperties** que estén configuradas. Por ejemplo, se ha configurado `OAUTH2` como AuthenticationType, por lo que se establecer “OAuth2Properties” en CreateConnectionInput. Esto requerirá propiedades como “OAuth2GrantType”, “TokenURL” y “OAuth2ClientApplication”. 

1.  Realice la solicitud CreateConnection que creará la conexión de la AWS Glue. 

   ```
   {
       "ConnectionInput": {
           "Name": "ConnectionFooREST",
           "ConnectionType": "REST-FOO-CONNECTOR",
           "ConnectionProperties": {},
           "ValidateCredentials": true,
           "AuthenticationConfiguration": {
               "AuthenticationType": "OAUTH2",
               "SecretArn": "arn:aws:secretsmanager:<region>:<accountId>:secret:<secretId>",
               "OAuth2Properties": {
                   "OAuth2GrantType": "CLIENT_CREDENTIALS",
                   "TokenUrl": "https://foo.cloud.com/oauth/token",
                   "OAuth2ClientApplication": {
                       "UserManagedClientApplicationClientId": "your-managed-client-id"
                   }
               }
           }
       }
   }
   ```

# Limitaciones
<a name="rest-api-limitations"></a>

Las siguientes son limitaciones para el conector de la API de REST:
+  El conector de la API de REST solo está disponible a través de la API, la CLI o el SDK de AWS. No se pueden configurar los conectores de REST a través de la consola. 
+  El AWS Glue REST ConnectionType solo se puede configurar para LEER datos del origen de datos basado en la API de REST. La conexión solo se puede utilizar como FUENTE en los trabajos de ETL de AWS Glue. 
+  No se admiten filtrado ni creación de particiones. 
+  No se admite la selección de campos. 