Skip to main content
 首页 » 编程设计

python之如何调用另一个 lambda 异步并将上下文传递给它

2025年05月04日13JeffreyZhao

我正在尝试使用 Python2.7 运行时来处理两个基本的 lambda 以进行 SQS 消息处理。一个 lambda 从 SQS 读取调用并通过上下文将数据传递给另一个 lambda。我能够调用其他 lambda,但其中的用户上下文为空。这是我的 SQS 阅读器 lambda 代码:

import boto3 
import base64 
import json 
import logging 
 
messageDict = {'queue_url': 'queue_url', 
       'receipt_handle': 'receipt_handle', 
       'body': 'messageBody'} 
ctx = { 
   'custom': messageDict, 
   'client': 'SQS_READER_LAMBDA', 
   'env': {'test': 'test'}, 
} 
 
payload = json.dumps(ctx) 
payloadBase64 = base64.b64encode(payload) 
 
client = boto3.client('lambda') 
client.invoke( 
    FunctionName='LambdaWorker', 
    InvocationType='Event', 
    LogType='None', 
    ClientContext=payloadBase64, 
    Payload=payload 
) 

这就是我尝试检查和打印调用的 lambda 中上下文变量内容的方式,这样我就可以在 CloudWatch 中检查日志:

memberList = inspect.getmembers(context) 
    for a in memberList: 
 
       logging.error(a) 

问题是没有任何效果,CloudWatch 显示用户上下文为空:

('client_context', None) 

我试过 example1 , example2 , example3 , example4

有什么想法吗?

请您参考如下方法:

我放弃了通过上下文传递数据的尝试。但是,我能够通过 Payload 参数传递数据:

client.invoke( 
    FunctionName='LambdaWorker', 
    InvocationType='Event', 
    LogType='None', 
    Payload=json.dumps(payload) 
) 

然后从调用的 lambda 中的事件参数中读取它:

ctx = json.dumps(event)