Definición
La etapa activa procesos en un recurso especĆfico de AWS Lambda. Su solicitud al proceso de AWS Lambda puede ser sĆncrona o $externalFunction asĆncrona.
Crea una función AWS Lambda y autentĆcate con Unified AWS Access
Para llamar a un recurso de AWS Lambda desde dentro de tu pipeline de Atlas Stream Processing, tu AWS Lambda debe estar implementado en la misma región de AWS en la que tu Atlas Stream Processing esté implementado. Para obtener mÔs información sobre cómo implementar un recurso de AWS Lambda, consulta la documentación de AWS.
Crea una función de AWS Lambda.
Con la CLI de AWS o a través de la Interfaz de Usuario de AWS, crea una función lambda.
Configurar acceso unificado a AWS.
Nota
El procedimiento que se describe aquà solo cubre el flujo bÔsico de configuración en la interfaz de usuario de Atlas. Para aprender mÔs, consultar la documentación Configurar el acceso unificado a AWS.
Acceso requerido
Para configurar el acceso unificado a AWS, debes tener acceso a Organization Owner o a Project Owner en el proyecto.
Requisitos previos
Una cuenta de Atlas.
Nota
Su polĆtica de AWS IAM debe incluir la acción
lambda:InvokeFunction.Debe remplazar los valores de marcador de posición
ExternalIdyResourcecon los suyos propios, que estĆ”n disponibles a travĆ©s del proceso de configuración de acceso unificado de AWS. Ten en cuenta que elExternalIdde este ejemplo incluye un comodĆn que coincide con cualquier Lambda Function cuyo nombre comience confunction-.
AƱade relaciones de confianza a un rol existente en la interfaz de usuario de Atlas
A continuación, debes habilitar tu rol autogestionado de AWS IAM para ejecutar el recurso AWS Lambda.
permission-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-east-1:257394458927:function:<function-name>" } ] }
Navegue a la pÔgina de integración de AWS IAM en su proyecto de Atlas y se debe hacer clic en el botón Authorize an AWS IAM role.
Crea un nuevo rol (o modifica uno existente) con el
role-trust-policy.jsonque se muestra en el modal.Una vez que el rol se cree (o el rol existente se actualice con la nueva polĆtica de confianza), pega el ARN del rol en la ventana emergente.
En la consola de AWS, ve a IAM > Roles y selecciona tu rol.
En la pestaƱa permissions, aƱade un nuevo "inline permission" para permitir que este rol invoque tus lambda(s). El ejemplo
permission-policy.jsonproporcionado anteriormente agrega el permiso para ejecutar cualquier lambda con el nombre<function-name>.Por último, navegue hasta su espacio de trabajo de Atlas Stream Processing, agregue un nuevo AWS Lambda connection y elija el AWS IAM Role ARN que configuró en el paso anterior.
Conecta tu espacio de trabajo de Atlas Stream Processing a tu función AWS Lambda
Para enviar una solicitud a tu recurso de AWS Lambda desde tu pipeline de Atlas Stream Processing, primero debes agregar tu recurso de AWS Lambda como una conexión en tu recurso de Atlas Stream Processing.
Puedes añadir tu recurso AWS Lambda como conexión a través de la interfaz de usuario de Atlas, la Atlas CLI o la API de Atlas, como se muestra en el siguiente ejemplo. Puedes actualizar el marcador de posición roleArn en el ejemplo con el arn de tu configuración de AWS IAM.
Nota
Este comando curl utiliza un token de acceso de cuenta de servicio (OAuth 2.0) para autenticar en lugar de claves API. Para obtener mÔs información, consulte Introducción a la API de administración de Atlas.
curl --header "Authorization: Bearer {ACCESS-TOKEN}" \ --header "Content-Type: application/json" \ --header "Accept: application/vnd.atlas.2023-02-01+json" \ --include \ --data '{"name": "TestAWSLambdaConnection","type": "AWSLambda","aws": {"roleArn": "arn:aws:iam::<aws_account>:role/<role_name>"}}' \ --request POST "https://cloud.mongodb.com/api/atlas/v2/groups/<group_id>/streams/<tenant_name>/connections"
Sintaxis
Solicitud mĆnima
El siguiente ejemplo muestra los campos obligatorios para una solicitud mĆnima.
{ $externalFunction: { connectionName: "myLambdaConnection", functionName: "arn:aws:lambda:region:account-id:function:function-name", as: "response", }}
Solicitud personalizada
El siguiente ejemplo personalizado especifica el manejo de errores, la ejecución sĆncrona y un documento de Atlas Stream Processing preprocesado como carga Ćŗtil ademĆ”s de los campos requeridos ilustrados anteriormente.
{ $externalFunction: { connectionName: "myLambdaConnection", functionName: "arn:aws:lambda:region:account-id:function:function-name", execution: "sync" as: "response", onError: "fail", payload: [{$replaceRoot: { newRoot: "$fullDocument.payloadToSend" } }, { $addFields: { sum: { $sum: "$randomArray" }}}, { $project: { success: 1, sum: 1 }}], }}
Nota
El campo onError define el comportamiento para errores a nivel de API tanto para solicitudes sĆncronas como asĆncronas a su recurso AWS Lambda, asĆ como errores de la función AWS Lambda para solicitudes sĆncronas.
La etapa $externalFunction procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| string | Requerido | Etiqueta que identifica la conexión en el Registro de Conexiones, a la que se envĆa la solicitud. |
| string | Requerido | El ARN completo de AWS o el nombre de la función AWS Lambda que se va a activar. |
| enum | Opcional | ParĆ”metro que especifica si la función de AWS Lambda debe llamarse de forma sĆncrona o asĆncrona. Los valores aceptados son:
Por defecto a |
| string | Opcional | Nombre del campo para la respuesta de la REST API. Si el endpoint devuelve 0 bytes, el operador no configura el campo |
| string | Opcional | Comportamiento cuando el operador encuentra un
Se establece por defecto en |
| arreglo | Opcional | Pipeline interno personalizado que permite personalizar el cuerpo de la solicitud enviado al endpoint de la API.
|
Comportamiento
La etapa envĆa una solicitud al recurso de AWS Lambda especificado. Si la solicitud es sĆncrona, la respuesta se devuelve en el campo especificado y la canalización continĆŗa el procesamiento. Si la solicitud es asĆncrona, la canalización continĆŗa el procesamiento sin esperar la $externalFunction respuesta.
Si una solicitud sĆncrona falla, el comportamiento de manejo de errores del pipeline estĆ” determinado por el campo onError. Si la solicitud es asĆncrona, el campo onError se aplica solo a errores de la API de AWS, en lugar de errores de función de AWS Lambda. Si el campo onError no se especifica, el comportamiento por defecto es enviar el documento afectado a la fila de letra muerta.
onError Valor | Comportamiento |
|---|---|
| El documento afectado se envĆa a la fila de letra muerta. |
| El documento afectado se ignora. |
| El procesador de flujo se termina en caso de error. |
Si la canalización no puede convertir el documento a un JSON correcto o la canalización configurada no crea un objeto BSON vĆ”lido como producto de la etapa final, el documento se envĆa a la fila de letra muerta independientemente del ajuste onError.
Los errores que surgen de una configuración incorrecta del operador $externalFunction en sĆ, como expresiones no vĆ”lidas, no desencadenan el comportamiento onError. En cambio, el procesador de flujo falla con un mensaje de error. La pipeline de Atlas Stream Processing reintenta las solicitudes fallidas que pueden ser resultado de errores transitorios.