Tutorial: Uso de AWS Lambda con Amazon Kinesis - AWS Lambda

Tutorial: Uso de AWS Lambda con Amazon Kinesis

En este tutorial, creará una función de Lambda para consumir eventos de un flujo de datos de Kinesis.

  1. Una aplicación personalizada escribe los registros en el flujo.

  2. AWS Lambda sondea el flujo y, cuando detecta registros nuevos en él, llama a la función de Lambda.

  3. AWS Lambda ejecuta la función de Lambda asumiendo el rol de ejecución que se especificó en el momento de crear la función de Lambda.

Requisitos previos

En este tutorial, se presupone que tiene algunos conocimientos sobre las operaciones básicas de Lambda y la consola de Lambda. Si aún no lo ha hecho, siga las instrucciones de Cree una función de Lambda con la consola. para crear su primera función Lambda.

Para completar los pasos siguientes, necesitará un shell o un terminal de línea de comando para ejecutar los comandos. Los comandos y la salida esperada se enumeran en bloques separados:

aws --version

Debería ver los siguientes datos de salida:

aws-cli/2.0.57 Python/3.7.4 Darwin/19.6.0 exe/x86_64

Para comandos largos, se utiliza un carácter de escape (\) para dividir un comando en varias líneas.

En Linux y macOS, use su administrador de shell y paquetes preferido.

nota

En Windows, algunos comandos de la CLI de Bash que se utilizan habitualmente con Lambda (por ejemplo, zip) no son compatibles con los terminales integrados del sistema operativo. Para obtener una versión de Ubuntu y Bash integrada con Windows, instale el subsistema de Windows para Linux. Los comandos de la CLI de ejemplo de esta guía utilizan el formato Linux. Los comandos que incluyen documentos JSON en línea deben reformatearse si utiliza la CLI de Windows.

Crear el rol de ejecución

Cree el rol de ejecución que concederá a su función permiso para obtener acceso a los recursos de AWS.

Para crear un rol de ejecución
  1. Abra la página Roles en la consola de IAM.

  2. Elija Create role.

  3. Cree un rol con las propiedades siguientes.

    • Trusted entity (Entidad de confianza): AWS Lambda.

    • Permisos: AWSLambdaKinesisExecutionRole.

    • Nombre de rol: lambda-kinesis-role.

La política AWSLambdaKinesisExecutionRole tiene permisos que la función necesita para leer elementos de Kinesis y escribir registros a CloudWatch Logs.

Creación de la función

A continuación se muestra código de ejemplo que recibe un evento de Kinesis como entrada y procesa los mensajes que contiene. Con fines ilustrativos, el código escribe parte de los datos de los eventos de entrada en CloudWatch Logs.

nota

Para ver código de muestra en otros lenguajes, consulte Código de función de ejemplo.

ejemplo index.js
console.log('Loading function'); exports.handler = function(event, context) { //console.log(JSON.stringify(event, null, 2)); event.Records.forEach(function(record) { // Kinesis data is base64 encoded so decode here var payload = Buffer.from(record.kinesis.data, 'base64').toString('ascii'); console.log('Decoded payload:', payload); }); };
Para crear la función
  1. Copie el código de muestra en un archivo con el nombre index.js.

  2. Cree un paquete de implementación.

    zip function.zip index.js
  3. Cree una función de Lambda con el comando create-function.

    aws lambda create-function --function-name ProcessKinesisRecords \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs12.x \ --role arn:aws:iam::123456789012:role/lambda-kinesis-role

Probar la función de Lambda

Invoque la función de Lambda manualmente mediante el comando de la CLI de invoke AWS Lambda y un evento de Kinesis de muestra.

Probar la función de Lambda
  1. Copie el siguiente JSON en un archivo y guárdelo como input.txt.

    { "Records": [ { "kinesis": { "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "approximateArrivalTimestamp": 1545084650.987 }, "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-kinesis-role", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" } ] }
  2. Utilice el comando invoke para enviar el evento a la función.

    aws lambda invoke --function-name ProcessKinesisRecords --payload file://input.txt out.txt

    La opción cli-binary-format es obligatoria si va a usar la versión 2 de AWS CLI. Para que esta sea la configuración predeterminada, ejecute aws configure set cli-binary-format raw-in-base64-out. Para obtener más información, consulte las opciones globales de la línea de comandos admitidas de AWS CLI.

    La respuesta se guardará en el archivo out.txt.

Creación de un flujo de Kinesis

Utilice el comando create-stream para crear un flujo.

aws kinesis create-stream --stream-name lambda-stream --shard-count 1

Ejecute el siguiente comando describe-stream para obtener el ARN del flujo.

aws kinesis describe-stream --stream-name lambda-stream

Debería ver los siguientes datos de salida:

{ "StreamDescription": { "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "StartingHashKey": "0", "EndingHashKey": "340282366920746074317682119384634633455" }, "SequenceNumberRange": { "StartingSequenceNumber": "49591073947768692513481539594623130411957558361251844610" } } ], "StreamARN": "arn:aws:kinesis:us-west-2:123456789012:stream/lambda-stream", "StreamName": "lambda-stream", "StreamStatus": "ACTIVE", "RetentionPeriodHours": 24, "EnhancedMonitoring": [ { "ShardLevelMetrics": [] } ], "EncryptionType": "NONE", "KeyId": null, "StreamCreationTimestamp": 1544828156.0 } }

Utilice el ARN del flujo en el siguiente paso para asociar el flujo a la función de Lambda.

Añadir un origen de eventos en AWS Lambda

Ejecute el comando siguiente AWS CLI add-event-source.

aws lambda create-event-source-mapping --function-name ProcessKinesisRecords \ --event-source arn:aws:kinesis:us-west-2:123456789012:stream/lambda-stream \ --batch-size 100 --starting-position LATEST

Tenga en cuenta el ID de mapeo para un uso posterior. Para obtener una lista de mapeos de orígenes de eventos, ejecute el comando list-event-source-mappings.

aws lambda list-event-source-mappings --function-name ProcessKinesisRecords \ --event-source arn:aws:kinesis:us-west-2:123456789012:stream/lambda-stream

En la respuesta, puede verificar que el valor de estado es enabled. Los mapeos de orígenes de eventos se pueden deshabilitar para poner en pausa temporalmente el sondeo sin perder de registros.

Prueba de la configuración

Para probar el mapeo de origen de eventos, agregue los registros de eventos a su flujo de Kinesis. El valor de --data es una cadena que la CLI codifica en base64 antes de enviarlo a Kinesis. Puede ejecutar el mismo comando más de una vez para añadir varios registros al flujo.

aws kinesis put-record --stream-name lambda-stream --partition-key 1 \ --data "Hello, this is a test."

Lambda utiliza el rol de ejecución para leer los registros desde el flujo. A continuación, se invoca la función de Lambda y se pasan lotes de registros. La función descodifica los datos de cada registro y los registra, enviando la salida a CloudWatch Logs. Puede ver los registros en la consola de CloudWatch.

Limpiar los recursos de

A menos que desee conservar los recursos que creó para este tutorial, puede eliminarlos ahora. Si elimina los recursos de AWS que ya no utiliza, evitará gastos innecesarios en su cuenta de AWS.

Para eliminar el rol de ejecución
  1. Abra la página Roles en la consola de IAM.

  2. Seleccione el rol de ejecución que creó.

  3. Elija Eliminar (Delete).

  4. Si desea continuar, escriba el nombre del rol en el campo de entrada de texto y elija Delete (Eliminar).

Para eliminar la función de Lambda
  1. .Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Seleccione la función que ha creado.

  3. Elija Actions (Acciones), Delete (Eliminar).

  4. Escriba delete en el campo de entrada de texto y elija Delete (Eliminar).

Para eliminar el flujo de Kinesis
  1. Inicie sesión en la AWS Management Console y abra la consola de Kinesis en https://console.aws.amazon.com/kinesis.

  2. Seleccione el flujo que ha creado.

  3. Elija Actions (Acciones), Delete (Eliminar).

  4. Introduzca delete en el campo de entrada de texto.

  5. Elija Eliminar.