¿Puede una función de AWS Lambda llamar a otra?
Tengo 2 funciones Lambda: una que produce una cotización y otra que convierte una cotización en un pedido. Me gustaría que la función lambda Orden llame a la función Cotización para regenerar la cotización, en lugar de simplemente recibirla de un cliente que no es de confianza.
He buscado en todos los lugares que se me ocurren, pero no veo cómo haría para encadenar o llamar a las funciones... ¡seguramente esto existe!
Encontré una manera de usar aws-sdk
.
var aws = require('aws-sdk');
var lambda = new aws.Lambda({
region: 'us-west-2' //change to your region
});
lambda.invoke({
FunctionName: 'name_of_your_lambda_function',
Payload: JSON.stringify(event, null, 2) // pass params
}, function(error, data) {
if (error) {
context.done('error', error);
}
if (data.Payload) {
context.succeed(data.Payload);
}
});
Puede encontrar el documento aquí: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
Debe encadenar sus funciones Lambda a través de SNS. Este enfoque proporciona buen rendimiento, latencia y escalabilidad con un mínimo esfuerzo.
Su primer Lambda publica mensajes en su tema de SNS y el segundo Lambda está suscrito a este tema. Tan pronto como llegan mensajes al tema, el segundo Lambda se ejecuta con el mensaje como parámetro de entrada.
Consulte Invocación de funciones Lambda mediante notificaciones de Amazon SNS .
También puede utilizar este enfoque para invocar funciones Lambda entre cuentas a través de SNS .
Aquí hay un código de muestra para Python,
from boto3 import client as boto3_client
from datetime import datetime
import json
lambda_client = boto3_client('lambda')
def lambda_handler(event, context):
msg = {"key": "new_invocation", "at": datetime.now().isoformat()}
invoke_response = lambda_client.invoke(FunctionName="another_lambda_",
InvocationType='Event',
Payload=json.dumps(msg))
print(invoke_response)
Por cierto, también necesitaría agregar una política como esta a su función lambda
{
"Sid": "Stmt1234567890",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "*"
}