Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

811
Visualizações
AWS Lambda: call function from another AWS lambda using boto3 invoke

I have simple lambda function that is located under following endpoint:

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

AWS Chalice was used for adding simple endpoints here.

@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}

Basically, it checks if the path is equal to add and sums two values from query_params.

Now, I am trying to invoke this lambda in another lambda.

My question:

How I can pass the path and query_params to my original lambda function using boto3 lambda client?

What I have tried so far:

I added two lines to policy.json file that allow me to invoke original function.

I saw a lot of similar question on StackOverflow, but most of them pass payload as a 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())

Thank you in advance!

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Maybe you can add the next code to your add function, so it accepts payloads too:

@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')

I'm going to write a general example, and you can easily modify it to match your needs. In your case the data dictionary would have request and exp keys, and you need to find your lambda function's arn.

AWS Documentation Lambda.invoke

Let's assume from now on we have 2 Lambdas named "master" and "slave". master will call slave.

At the moment there are 3 types of invocations:

  1. RequestResponse (Default): master calls and waits for slave response
  2. Event: Async, master calls and forgets
  3. DryRun: Do some verification before running

I keep with #1 RequestResponse:

Slave:

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

And its arn is something like arn:aws:lambda:us-east-1:xxxxxxxxxxxxxx:function:slave

In the example, slave is just an echo function

Now, the master needs the necessary role's permission to call it, and the arn or name. Then you can write something like this:

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

Usually you would get arn with something like os.environ.get('slave_arn')

All data from/to lambdas must be JSON serializable.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda