

Tras considerarlo detenidamente, hemos decidido dejar de utilizar Amazon Kinesis Data Analytics para aplicaciones SQL:

1. A partir del **1 de septiembre de 2025,** no proporcionaremos ninguna corrección de errores para las aplicaciones de Amazon Kinesis Data Analytics for SQL porque tendremos un soporte limitado debido a la próxima discontinuación.

2. A partir del **15 de octubre de 2025,** no podrá crear nuevas aplicaciones de Kinesis Data Analytics for SQL.

3. Eliminaremos sus aplicaciones a partir del **27 de enero de 2026**. No podrá iniciar ni utilizar sus aplicaciones de Amazon Kinesis Data Analytics para SQL. A partir de ese momento, el servicio de soporte de Amazon Kinesis Data Analytics para SQL dejará de estar disponible. Para obtener más información, consulte [Retirada de las aplicaciones de Amazon Kinesis Data Analytics para SQL](discontinuation.md).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configuración de salida de la aplicación
<a name="how-it-works-output"></a>



En el código de la aplicación, se escribe el resultado de las sentencias SQL en una o más secuencias de la aplicación. Si lo desea, puede añadir una configuración de salida a su aplicación para conservar todo lo escrito en una transmisión de la aplicación a un destino externo, como una transmisión de datos de Amazon Kinesis, una transmisión de entrega de Firehose o una función. AWS Lambda 

Existe un límite en cuanto al número de destinos externos que puede utilizar para conservar datos en la salida de una aplicación. Para obtener más información, consulte [Límites](limits.md). 

**nota**  
Le recomendamos que utilice un destino externo para almacenar los datos de secuencia de errores en la aplicación para que pueda investigar los errores. 



En cada una de estas configuraciones de salida, debe proporcionar lo siguiente:
+ **Nombre de la secuencia en la aplicación:** la secuencia que desea conservar en un destino externo. 

  Kinesis Data Analytics busca la secuencia en la aplicación que ha especificado en la configuración de salida. (El nombre de la transmisión distingue entre mayúsculas y minúsculas y debe coincidir exactamente). Asegúrese de que el código de su aplicación cree esta transmisión dentro de la aplicación. 
+ **Destino externo**: puede conservar los datos en un flujo de datos de Kinesis, un flujo de entrega de Firehose o una función de Lambda. Debe proporcionar el nombre de recurso de Amazon (ARN) de la transmisión o función. Además proporciona un rol de IAM que Kinesis Data Analytics puede asumir para escribir la secuencia o función en su nombre. Debe describir el formato de registro (JSON o CSV) que Kinesis Data Analytics debe utilizar a la hora de escribir en el destino externo.

Si Kinesis Data Analytics no puede escribir en el destino de streaming o de Lambda, el servicio sigue intentándolo de forma indefinida. Con ello se crea resistencia y la aplicación se queda retrasada. Si el problema no se resuelve, la aplicación finalmente detiene el procesamiento de datos nuevos. Puede monitorizar las [métricas de Kinesis Data Analytics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html) y establecer alarmas para los errores. Para obtener más información sobre las métricas y las alarmas, consulte [Uso de Amazon CloudWatch Metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) y [Creación de CloudWatch alarmas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html).

Puede configurar la salida de la aplicación usando la Consola de administración de AWS. La consola realiza la llamada a la API para guardar la configuración. 

## Creación de una salida mediante el AWS CLI
<a name="how-it-works-output-cli"></a>

En esta sección, se describe cómo crear la sección `Outputs` del cuerpo de la solicitud para una operación `CreateApplication` o `AddApplicationOutput`.

### Creación de una salida de secuencias de Kinesis
<a name="how-it-works-output-cli-streams"></a>

El siguiente fragmento de JSON muestra la sección `Outputs` del cuerpo de la solicitud `CreateApplication` que se utiliza para crear un destino hacia un flujo de datos de Amazon Kinesis.

```
"Outputs": [
   {
       "DestinationSchema": {
           "RecordFormatType": "string"
       },
       "KinesisStreamsOutput": {
           "ResourceARN": "string",
           "RoleARN": "string"
       },
       "Name": "string"
   }
 
]
```

### Creación de una salida de flujo de entrega de Firehose
<a name="how-it-works-output-cli-firehose"></a>

El siguiente fragmento de JSON muestra la sección `Outputs` del cuerpo de la solicitud `CreateApplication` que se utiliza para crear un destino hacia un flujo de entrega de Amazon Data Firehose.

```
"Outputs": [
   {
       "DestinationSchema": {
           "RecordFormatType": "string"
       },
       "KinesisFirehoseOutput": {
           "ResourceARN": "string",
           "RoleARN": "string"
       },
       "Name": "string"
   }
]
```

### Creación de una salida de la función de Lambda
<a name="how-it-works-output-cli-lambda"></a>

El siguiente fragmento de JSON muestra la `Outputs` sección del cuerpo de la `CreateApplication` solicitud para crear un destino de AWS Lambda función.

```
"Outputs": [
   {
       "DestinationSchema": {
           "RecordFormatType": "string"
       },
       "LambdaOutput": {
           "ResourceARN": "string",
           "RoleARN": "string"
       },
       "Name": "string"
   }
]
```

# Uso de una función de Lambda como salida
<a name="how-it-works-output-lambda"></a>

Si AWS Lambda se utiliza como destino, puede realizar más fácilmente el posprocesamiento de los resultados de SQL antes de enviarlos a un destino final. Entre las tareas de procesamiento posterior más frecuentes se incluyen las siguientes:
+ Acumulación de varias filas en un solo registro
+ Combinación de resultados actuales con resultados anteriores para procesar los datos que llegan tarde
+ Efectuar la entrega en diferentes destinos en función del tipo de información
+ Traducción del formato de los registros (por ejemplo, traducirlos a Protobuf)
+ Manipulación o transformación de cadenas
+ Enriquecimiento de datos después del procesamiento analítico
+ Procesamiento personalizado para casos de uso geoespaciales
+ Cifrado de datos

Las funciones Lambda pueden entregar información analítica a una variedad de AWS servicios y otros destinos, incluidos los siguientes:
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)
+ Personalizadas APIs
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/)
+ [Amazon Aurora](http://aurora.apache.org/)
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/)
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/)
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/)
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/)

Para obtener más información acerca de cómo crear aplicaciones de Lambda, consulte [Introducción a AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html).

**Topics**
+ [Permisos para utilizar Lambda como salida](#how-it-works-output-lambda-perms)
+ [Métricas para utilizar Lambda como salida](#how-it-works-output-lambda-metrics)
+ [Modelo de datos de entrada de eventos y modelo de respuesta de registros para utilizar Lambda como salida](#how-it-works-output-lambda-model)
+ [Frecuencia de invocación de Lambda como salida](#how-it-works-output-lambda-frequency)
+ [Adición de una función de Lambda para su uso como salida](#how-it-works-output-lambda-procedure)
+ [Errores comunes de Lambda como salida](#how-it-works-output-lambda-troubleshooting)
+ [Creación de funciones de Lambda como destinos de aplicaciones](how-it-works-output-lambda-functions.md)

## Permisos para utilizar Lambda como salida
<a name="how-it-works-output-lambda-perms"></a>

Para utilizar Lambda como salida, el rol de IAM de salida de Lambda de la aplicación requiere la política de permisos siguiente:

```
{
   "Sid": "UseLambdaFunction",
   "Effect": "Allow",
   "Action": [
       "lambda:InvokeFunction",
       "lambda:GetFunctionConfiguration"
   ],
   "Resource": "FunctionARN"
}
```

## Métricas para utilizar Lambda como salida
<a name="how-it-works-output-lambda-metrics"></a>

Utiliza Amazon CloudWatch para monitorizar el número de bytes enviados, los éxitos y los errores, etc. Para obtener información sobre CloudWatch las métricas emitidas por Kinesis Data Analytics con Lambda como salida, consulte Amazon [Kinesis Analytics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html) Metrics.

## Modelo de datos de entrada de eventos y modelo de respuesta de registros para utilizar Lambda como salida
<a name="how-it-works-output-lambda-model"></a>

Para enviar los registros de salida de Kinesis Data Analytics, la función de Lambda debe respetar los modelos de datos de entrada de eventos y de respuesta de registros. 

### Modelo de datos de entrada de eventos
<a name="how-it-works-output-lambda-model-request"></a>

Kinesis Data Analytics envía continuamente los registros de salida de la aplicación a la Lambda como salida con el siguiente modelo de solicitud. Dentro de la función, debe iterar por la lista y aplicar la lógica de negocio para cumplir los requisitos de salida (tales como la transformación de datos antes de enviarlos a su destino final).


| Campo | Description (Descripción) | 
| --- | --- | 
| Campo | Description (Descripción) | 
| --- | --- | 
| Campo | Description (Descripción) | 
| --- | --- | 
| invocationId | El ID de invocación de Lambda (GUID aleatorio). | 
| applicationArn | El nombre de recurso de Amazon (ARN) de la aplicación de análisis de datos de Kinesis Data Analytics. | 
| registros [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 
| recordId | ID de registro (GUID aleatorio) | 
| lambdaDeliveryRecordMetadata |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 
| data | Carga del registro de salida codificada en Base64 | 
| retryHint | Número de reintentos de entrega | 

**nota**  
`retryHint` es un valor que aumenta para cada error de entrega. Este valor no se conserva de forma duradera y se restablece si la aplicación se interrumpe.

### Modelo de respuesta de registros
<a name="how-it-works-output-lambda-model-response"></a>

Cada registro enviado a su Lambda como función de salida (con registro IDs) debe confirmarse con una `Ok` o `DeliveryFailed` y debe contener los siguientes parámetros. De lo contrario, Kinesis Data Analytics lo considera un error de entrega.


| Campo | Description (Descripción) | 
| --- | --- | 
| registros [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 
| recordId | El ID de registro se transfiere desde Kinesis Data Analytics hacia Lambda durante la invocación. Cualquier discrepancia entre el ID del registro original y el ID del registro reconocido se considera un error de entrega. | 
| result | El estado de entrega del registro. Los valores posibles son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 

## Frecuencia de invocación de Lambda como salida
<a name="how-it-works-output-lambda-frequency"></a>

Una aplicación de análisis de datos de Kinesis Data Analytics almacena en búfer los registros de salida e invoca con frecuencia la función de destino de AWS Lambda .
+ Si los registros se emiten a la transmisión de destino dentro de la aplicación de análisis de datos como una ventana giratoria, la función de AWS Lambda destino se invoca por cada activador de la ventana oscilante. Por ejemplo, si se utiliza una ventana de saltos de 60 segundos para emitir los registros a la secuencia en la aplicación de destino, la función de Lambda se invoca una vez cada 60 segundos.
+ Si los registros se emiten a la secuencia en la aplicación de destino dentro de la aplicación como ventana deslizante o de consulta continua, la función de destino de Lambda se invoca aproximadamente una vez por segundo.

**nota**  
Se aplican los [límites de tamaño de carga de solicitud de invocación para cada función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/limits.html). Si se superan esos límites, los registros salientes se dividen y se envían a través de varias llamadas de funciones de Lambda.

## Adición de una función de Lambda para su uso como salida
<a name="how-it-works-output-lambda-procedure"></a>

El siguiente procedimiento muestra cómo añadir una función de Lambda como salida para una aplicación de Kinesis Data Analytics.

1. [Inicie sesión en la consola Managed Service for Apache Flink Consola de administración de AWS y ábrala en /kinesisanalytics. https://console.aws.amazon.com](https://console.aws.amazon.com/kinesisanalytics)

1. Elija la aplicación en la lista y, a continuación, elija **Application details**.

1. En la sección **Destination**, elija **Connect new destination**.

1. En el elemento **Destination**, elija la **función AWS Lambda **.

1. En la sección **Entregar registros a AWS Lambda**, elija una función de Lambda existente o elija **Crear nueva**.

1. Si va a crear una función de Lambda nueva, haga lo siguiente:

   1. Elija una de las plantillas que se proporcionan. Para obtener más información, [Creación de funciones de Lambda como destinos de aplicaciones](how-it-works-output-lambda-functions.md).

   1. Se abre la página **Create Function** (Crear función) en una nueva pestaña del navegador web. En el cuadro **Name** (Nombre), indique un nombre significativo para la función (por ejemplo, **myLambdaFunction**).

   1. Actualice la plantilla con la funcionalidad de procesamiento posterior que necesite su aplicación. Para obtener más información acerca de la creación de una función de Lambda, consulte [Introducción](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) en la *Guía para desarrolladores de AWS Lambda *.

   1. En la consola de Kinesis Data Analytics, en la lista **función de Lambda**, elija la función de Lambda que acaba de crear. Elija **\$1LATEST** para la versión de la función de Lambda.

1. En la sección **In-application stream**, elija **Choose an existing in-application stream**. En **In-application stream name**, elija la secuencia de salida de la aplicación. Los resultados de la secuencia de salida seleccionada se envían a la función de salida de Lambda.

1. Deje el resto del formulario con los valores predeterminados, y elija **Save and continue**.

Ahora, la aplicación envía los registros de la secuencia en la aplicación a la función de Lambda. Puedes ver los resultados de la plantilla predeterminada en la CloudWatch consola de Amazon. Monitorice la métrica `AWS/KinesisAnalytics/LambdaDelivery.OkRecords` para ver el número de registros entregados a la función de Lambda.

## Errores comunes de Lambda como salida
<a name="how-it-works-output-lambda-troubleshooting"></a>

A continuación se indican los motivos comunes por los que puede no efectuarse la entrega a una función de Lambda.
+ No todos los registros (con registro IDs) de un lote que se envían a la función Lambda se devuelven al servicio Kinesis Data Analytics. 
+ En la respuesta falta el campo de estado o el ID de registro. 
+ Los tiempos de espera de la función de Lambda no son suficientes para ejecutar la lógica de negocio de la función de Lambda.
+ La lógica de negocio de la función de Lambda no captura todos los errores, lo que provoca tiempos de espera y resistencias que se deben a las excepciones no controladas. En ocasiones se denominan mensajes de “píldora venenosa”.

Para errores de entrega de datos, Kinesis Data Analytics sigue reintentando las invocaciones de Lambda en el mismo conjunto de registros hasta que tiene éxito. Para obtener información sobre los errores, puede supervisar las siguientes métricas: CloudWatch 
+ Lambda como métrica de CloudWatch salida de la aplicación Kinesis Data Analytics: indica el número de éxitos y fracasos, entre otras estadísticas. Para obtener más información, consulte [Amazon Kinesis Analytics Metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html).
+ AWS Lambda CloudWatch métricas y registros de funciones.

# Creación de funciones de Lambda como destinos de aplicaciones
<a name="how-it-works-output-lambda-functions"></a>

La aplicación Kinesis Data Analytics puede AWS Lambda utilizar funciones como salida. Kinesis Data Analytics proporciona plantillas para crear funciones de Lambda que se utilizan como destino de las aplicaciones. Utilice estas plantillas como punto de partida para el procesamiento posterior de la salida de las aplicaciones. 

**Topics**
+ [Creación de una función de Lambda como destino en Node.js](#how-it-works-lambda-dest-nodejs)
+ [Creación de una función de Lambda como destino en Python](#how-it-works-lambda-dest-python)
+ [Creación de una función de Lambda como destino en Java](#how-it-works-lambda-dest-java)
+ [Creación de una función de Lambda como destino en .NET](#how-it-works-lambda-net)

## Creación de una función de Lambda como destino en Node.js
<a name="how-it-works-lambda-dest-nodejs"></a>

La siguiente plantilla para crear una función de Lambda de destino en Node.js está disponible en la consola:


| Esquema de Lambda como salida | Lenguaje y versión | Description (Descripción) | 
| --- | --- | --- | 
| kinesis-analytics-output | Node.js 12.x | Envía los registros de salida de una aplicación de Kinesis Data Analytics a un destino personalizado. | 

## Creación de una función de Lambda como destino en Python
<a name="how-it-works-lambda-dest-python"></a>

Las siguientes plantillas para crear una función de Lambda de destino en Python están disponibles en la consola:


| Esquema de Lambda como salida | Lenguaje y versión | Description (Descripción) | 
| --- | --- | --- | 
| kinesis-analytics-output-sns | Python 2.7 | Entregue registros de salida desde una aplicación de Kinesis Data Analytics a Amazon SNS. | 
| kinesis-analytics-output-ddb | Python 2.7 | Entregue registros de salida desde una aplicación de Kinesis Data Analytics a Amazon DynamoDB. | 

## Creación de una función de Lambda como destino en Java
<a name="how-it-works-lambda-dest-java"></a>

Para crear una función de Lambda como destino en Java, utilice las clases de [eventos de Java](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events).

El código siguiente ilustra un ejemplo de función de Lambda como destino creada en Java:

```
public class LambdaFunctionHandler
        implements RequestHandler<KinesisAnalyticsOutputDeliveryEvent, KinesisAnalyticsOutputDeliveryResponse> {

    @Override
    public KinesisAnalyticsOutputDeliveryResponse handleRequest(KinesisAnalyticsOutputDeliveryEvent event,
            Context context) {
        context.getLogger().log("InvocatonId is : " + event.invocationId);
        context.getLogger().log("ApplicationArn is : " + event.applicationArn);

        List<KinesisAnalyticsOutputDeliveryResponse.Record> records = new ArrayList<KinesisAnalyticsOutputDeliveryResponse.Record>();
        KinesisAnalyticsOutputDeliveryResponse response = new KinesisAnalyticsOutputDeliveryResponse(records);

        event.records.stream().forEach(record -> {
            context.getLogger().log("recordId is : " + record.recordId);
            context.getLogger().log("record retryHint is :" + record.lambdaDeliveryRecordMetadata.retryHint);
            // Add logic here to transform and send the record to final destination of your choice.
            response.records.add(new Record(record.recordId, KinesisAnalyticsOutputDeliveryResponse.Result.Ok));
        });
        return response;
    }

}
```

## Creación de una función de Lambda como destino en .NET
<a name="how-it-works-lambda-net"></a>

Para crear una función de Lambda como destino en .NET, utilice las clases de [eventos de .NET](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents).

El código siguiente ilustra un ejemplo de función de Lambda como destino creada en C\$1:

```
public class Function
    {
        public KinesisAnalyticsOutputDeliveryResponse FunctionHandler(KinesisAnalyticsOutputDeliveryEvent evnt, ILambdaContext context)
        {
            context.Logger.LogLine($"InvocationId: {evnt.InvocationId}");
            context.Logger.LogLine($"ApplicationArn: {evnt.ApplicationArn}");

            var response = new KinesisAnalyticsOutputDeliveryResponse
            {
                Records = new List<KinesisAnalyticsOutputDeliveryResponse.Record>()
            };

            foreach (var record in evnt.Records)
            {
                context.Logger.LogLine($"\tRecordId: {record.RecordId}");
                context.Logger.LogLine($"\tRetryHint: {record.RecordMetadata.RetryHint}");
                context.Logger.LogLine($"\tData: {record.DecodeData()}");

                // Add logic here to send to the record to final destination of your choice.

                var deliveredRecord = new KinesisAnalyticsOutputDeliveryResponse.Record
                {
                    RecordId = record.RecordId,
                    Result = KinesisAnalyticsOutputDeliveryResponse.OK
                };
                response.Records.Add(deliveredRecord);
            }
            return response;
        }
    }
```

Para obtener más información sobre cómo crear funciones de Lambda para el procesamiento previo y como destino en .NET, consulte [https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents).

# Modelo de entrega para conservar la salida de las aplicaciones en destinos externos
<a name="failover-checkpoint"></a>

Amazon Kinesis Data Analytics utiliza un modelo de entrega de tipo "al menos una vez" para enviar la salida de las aplicaciones a los destinos configurados. Cuando una aplicación se está ejecutando, Kinesis Data Analytics tiene puntos de comprobación internos. Estos puntos de comprobación son momentos determinados en los que se han entregado registros de salida en los destinos sin pérdida de datos. El servicio utiliza los puntos de control necesarios para garantizar que la salida de la aplicación se entregue al menos una vez a los destinos configurados.

En una situación normal, la aplicación procesa los datos entrantes de forma continua. Kinesis Data Analytics graba el resultado en los destinos configurados, como un flujo de datos de Kinesis o un flujo de entrega de Firehose. Sin embargo, es posible que la aplicación se interrumpa ocasionalmente; por ejemplo:
+ Puede optar por detener la aplicación y reiniciarla más adelante.
+ Puede eliminar el rol de IAM que Kinesis Data Analytics necesita para escribir la salida de la aplicación en el destino configurado. Sin el rol de IAM, Kinesis Data Analytics no tiene permisos para escribir en un destino externo.
+ Una interrupción de la red o errores en otros servicios internos provocan que se detenga la ejecución de la aplicación momentáneamente. 

Cuando la aplicación se reinicia, Kinesis Data Analytics se asegura de que continúa el procesamiento y escribe la salida desde un punto anterior o igual al momento en que se produjo el error. Esto ayuda a asegurarse de que no se pierde la entrega de ninguna salida de la aplicación a los destinos configurados. 

Supongamos que ha configurado varios destinos desde la misma secuencia en la aplicación. Después de que la aplicación se recupere de un error, Kinesis Data Analytics reanuda la conservación de la salida en los destinos configurados desde el último registro que se entregó en el destino más lento. Esto podría resultar en el mismo registro de salida enviado más de una vez a otros destinos. En este caso, es obligatorio gestionar las posibles duplicidades en el destino de forma externa. 