AWS Lambda -Interacción de dos funciones

Existen varias formas de hacer que dos funciones Lambda interactúen.

1 Invocación Directa (Síncrona)

Una Lambda invoca directamente a otra usando el SDK de AWS.

import boto3
import json

lambda_client = boto3.client('lambda')

def lambda_handler(event, context):
    # Invocar segunda Lambda de forma síncrona
    response = lambda_client.invoke(
        FunctionName='segunda-lambda',
        InvocationType='RequestResponse',  # Síncrona
        Payload=json.dumps({
            'data': 'información a enviar'
        })
    )

    # Leer respuesta
    response_payload = json.loads(response['Payload'].read())

    return {
        'statusCode': 200,
        'body': json.dumps(response_payload)
    }

2 Invocación Asíncrona

Para procesos que no requieren respuesta inmediata:

lambda_client.invoke(
    FunctionName='segunda-lambda',
    InvocationType='Event',  # Asíncrona
    Payload=json.dumps({'data': 'información'})
)

3 A través de SQS (Recomendado para desacoplamiento)

import boto3

sqs = boto3.client('sqs')

def lambda_handler(event, context):
    # Lambda 1 envía mensaje a SQS
    sqs.send_message(
        QueueUrl='https://sqs.region.amazonaws.com/account/queue-name',
        MessageBody=json.dumps({'data': 'información'})
    )

4 A través de SNS (Pub/Sub)

import boto3

sns = boto3.client('sns')

def lambda_handler(event, context):
    # Lambda 1 publica en SNS
    sns.publish(
        TopicArn='arn:aws:sns:region:account:topic-name',
        Message=json.dumps({'data': 'información'})
    )

5 A través de EventBridge

import boto3

events = boto3.client('events')

def lambda_handler(event, context):
    events.put_events(
        Entries=[{
            'Source': 'custom.app',
            'DetailType': 'transaction',
            'Detail': json.dumps({'data': 'información'})
        }]
    )

6 A través de Step Functions

Define un flujo de trabajo que coordine ambas Lambdas:

{
  "StartAt": "PrimeraLambda",
  "States": {
    "PrimeraLambda": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:account:function:primera",
      "Next": "SegundaLambda"
    },
    "SegundaLambda": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:account:function:segunda",
      "End": true
    }
  }
}

Para invocación directa, la primera Lambda necesita:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "lambda:InvokeFunction",
    "Resource": "arn:aws:lambda:region:account:function:segunda-lambda"
  }]
}

¿Cuál elegir?

Invocación directa: Respuesta inmediata necesaria

SQS: Desacoplamiento, retry automático, alta disponibilidad

SNS: Múltiples suscriptores (fan-out)

EventBridge: Enrutamiento complejo basado en reglas

Step Functions: Orquestación de flujos complejos

Artículos Relacionados

Comentarios