Para agentes de IA: hay un Ć­ndice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las pĆ”ginas estĆ”n disponibles agregando .md a cualquier ruta URL.
Docs Menu

$externalFunction

$externalFunction

La etapa $externalFunction activa procesos en un recurso específico de AWS Lambda. Su solicitud al proceso AWS Lambda puede ser sincrónica o asincrónica.

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.

1

Con la CLI de AWS o a través de la Interfaz de Usuario de AWS, crea una función lambda.

Nota

  • Los recursos de AWS Lambda deben crearse con un tipo de autenticación AWS_IAM, que requiere que crees un rol y una polĆ­ticade AWS IAM.

  • Solo se admite el tipo de respuesta en bĆŗfer, no de transmisión.

2

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

Nota

  • Su polĆ­tica de AWS IAM debe incluir la acción lambda:InvokeFunction.

  • Debe remplazar los valores de marcador de posición ExternalId y Resource con los suyos propios, que estĆ”n disponibles a travĆ©s del proceso de configuración de acceso unificado de AWS. Ten en cuenta que el ExternalId de este ejemplo incluye un comodĆ­n que coincide con cualquier Lambda Function cuyo nombre comience con function-.

3

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>"
}
]
}
  1. 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.

  2. Crea un nuevo rol (o modifica uno existente) con el role-trust-policy.json que se muestra en el modal.

  3. 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.

  4. En la consola de AWS, ve a IAM > Roles y selecciona tu rol.

  5. En la pestaƱa permissions, aƱade un nuevo "inline permission" para permitir que este rol invoque tus lambda(s). El ejemplo permission-policy.json proporcionado anteriormente agrega el permiso para ejecutar cualquier lambda con el nombre <function-name>.

  6. 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.

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"

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",
}}

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

connectionName

string

Requerido

Etiqueta que identifica la conexión en el Registro de Conexiones, a la que se envía la solicitud.

functionName

string

Requerido

El ARN completo de AWS o el nombre de la función AWS Lambda que se va a activar.

execution

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:

  • sync

  • async

Por defecto a sync, que es necesaria si las etapas restantes en su pipeline de Atlas Stream Processing requieren la salida de la función AWS Lambda.

as

string

Condicional

Nombre del campo para la respuesta de la REST API.

Obligatorio cuando execution es "sync" y esta etapa no es la etapa final (receptor) en el pipeline. Al establecer este campo cuando execution es "async" devuelve un error.

Si el endpoint devuelve 0 bytes, el operador no configura el campo as.

onError

string

Opcional

Comportamiento cuando el operador encuentra un HTTPS Status Code o una falla relacionada con Lambda Runtime. Debe ser uno de los siguientes valores:

  • "dlq" : Pase el documento afectado a la fila de letra muerta.

  • "ignore" : No haga nada con el documento afectado.

  • "fail" : Finalizar el procesador de flujo en caso de error.

onError no se activa en errores que surjan de una configuración incorrecta del propio operador $externalFunction, como expresiones no vÔlidas.

Se establece por defecto en "dlq".

payload

arreglo

Opcional

Pipeline interno personalizado que permite personalizar el cuerpo de la solicitud enviado al endpoint de la API. payload soporta las siguientes expresiones:

  • $project

  • $addFields

  • $replaceRoot

  • $set

parallelism

entero

Opcional

Número mÔximo de solicitudes paralelas realizadas a la función externa. Los valores de paralelismo mÔs altos pueden aumentar el rendimiento. Sin embargo, los valores mÔs altos también requieren mÔs recursos computacionales.

Para establecer este campo en un valor mayor que 1, debe establecer execution en "sync". Se establece por defecto en 1.

El valor mÔximo que puede establecer depende del nivel de su procesador de transmisión. Para obtener mÔs información, consulte Guía de selección de nivel de Atlas Stream Processing.

Cada procesador de flujo tiene un valor mƔximo de paralelismo acumulado determinado por su nivel. El paralelismo acumulativo de un procesador de flujo se calcula de la siguiente manera:

parallelism total - parallelized stages

Donde parallelism total es la suma de todos los valores parallelism mayores que 1 en las etapas $source, $lookup, $merge, $emit y $externalFunction, y parallelized stages es la cantidad de estas etapas con valores parallelism mayores que 1.

Por ejemplo, si tu etapa $source establece un valor parallelism de 4, tu etapa $lookup no define un valor parallelism (por lo tanto, se toma el valor por defecto 1), y tu etapa $merge define un valor parallelism de 2, entonces tiene dos parallelized stages y el paralelismo acumulativo de su procesador de flujo se calcula como (4 + 2) - 2.

Si un procesador de flujo supera el paralelismo acumulativo mƔximo para su nivel, Atlas Stream Processing genera un error e informa del nivel mƭnimo de procesador requerido para el nivel de paralelismo previsto. Debe escalar el procesador a un nivel superior o reducir los valores de paralelismo de sus etapas para resolver el error. Para aprender mƔs, consulte Procesamiento de flujos.

partitionBy

expresión

Opcional

Expresión utilizada para dividir el flujo de entrada en hilos paralelos. Atlas Stream Processing asigna cada documento de entrada con el mismo resultado de expresión partitionBy al mismo hilo.

Si este campo no se especifica, Atlas Stream Processing distribuye los documentos de entrada entre los subprocesos paralelos sin tener en cuenta el contenido del documento.

Para establecer este campo, debe establecer execution en "sync" y parallelism en un valor mayor que 1.

La etapa $externalFunction envía una solicitud al recurso AWS Lambda especificado. Si la solicitud es sincrónica, la respuesta se devuelve en el campo especificado y el pipeline continúa procesando. Si la solicitud es asincrónica, el pipeline continúa procesando sin esperar la 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

"dlq"

El documento afectado se envĆ­a a la fila de letra muerta.

"ignore"

El documento afectado se ignora.

"fail"

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.