¿Puede una función de AWS Lambda llamar a otra?

Resuelto Silver asked hace 54 años • 21 respuestas

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!

Silver avatar Jan 01 '70 08:01 Silver
Aceptado

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

picsoung avatar Jul 31 '2015 12:07 picsoung

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 .

adamkonrad avatar Jul 30 '2015 18:07 adamkonrad

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": "*"
    }
Chenna V avatar Feb 19 '2016 21:02 Chenna V