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
Comentarios