Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

809
Vistas
AWS Lambda: llame a la función desde otro AWS lambda usando la invocación de boto3

Tengo una función lambda simple que se encuentra en el siguiente punto final:

https://******.execute-api.eu-west-2.amazonaws.com/lambda/add?x=1&y=2

AWS Chalice se utilizó para agregar puntos de enlace simples aquí.

 @app.route('/{exp}', methods=['GET']) def add(exp): app.log.debug("Received GET request...") request = app.current_request app.log.debug(app.current_request.json_body) x = request.query_params['x'] y = request.query_params['y'] if exp == 'add': app.log.debug("Received ADD command...") result = int(x) + int(y) return {'add': result}

Básicamente, verifica si la path es igual a add y suma dos valores de query_params .

Ahora, estoy tratando de invocar esta lambda en otra lambda.

Mi pregunta:

¿Cómo puedo pasar la path y query_params a mi función lambda original usando el cliente boto3 lambda?

Lo que he probado hasta ahora:

Agregué dos líneas al archivo policy.json que me permiten invocar la función original.

Vi muchas preguntas similares en StackOverflow, pero la mayoría de ellas pasan la carga útil como json.

 @app.route('/') def index(): lambda_client = boto3.client('lambda') invoke_response = lambda_client.invoke( FunctionName="function-name", InvocationType="RequestResponse" ) app.log.debug(invoke_response['Payload'].read())

¡Gracias de antemano!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tal vez pueda agregar el siguiente código a su función de agregar, para que también acepte cargas útiles:

 @app.route('/{exp}', methods=['GET']) def add(exp, *args, **kwargs): if isinstance(exp, dict): # exp is event here request = exp.get('request', {'x': 0, 'y': 0}) exp = exp.get('exp', 'add')

Voy a escribir un ejemplo general, y puedes modificarlo fácilmente para que se ajuste a tus necesidades. En su caso, el diccionario de datos tendría claves de request y exp , y necesita encontrar el arn de su función lambda.

Documentación de AWS Lambda.invoke

Supongamos que de ahora en adelante tenemos 2 Lambdas llamados "maestro" y "esclavo". el maestro llamará esclavo.

Actualmente existen 3 tipos de invocaciones:

  1. RequestResponse (predeterminado): el maestro llama y espera la respuesta del esclavo
  2. Evento: Asíncrono, llamadas maestras y olvidos
  3. DryRun: Verifique un poco antes de ejecutar

Me quedo con #1 RequestResponse:

Esclavo:

 def lambda_handler(event, context): result = {} result['event'] = event result['result'] = "It's ok" return result

Y su arn es algo así como arn:aws:lambda:us-east-1:xxxxxxxxxxxxxx:function:slave

En el ejemplo, el esclavo es solo una función de eco.

Ahora, el maestro necesita el permiso del rol necesario para llamarlo y el arn o nombre. Entonces puedes escribir algo como esto:

 import boto3 from datetime import datetime import json client = boto3.client('lambda') def lambda_handler(event, context): arn = 'arn:aws:lambda:us-east-1:xxxxxxxxxxxxxx:function:slave' data = {'my_dict': {'one': 1, 'two': 2}, 'my_list': [1,2,3], 'my_date': datetime.now().isoformat()} response = client.invoke(FunctionName=arn, InvocationType='RequestResponse', Payload=json.dumps(data)) result = json.loads(response.get('Payload').read()) return result

Por lo general, obtendría arn con algo como os.environ.get('slave_arn')

Todos los datos de/a lambdas deben ser JSON serializables.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda