我正在尝试使用Python2.7运行时为SQS消息处理工作两个基本lambda。一个来自SQS的lambda读取调用并通过上下文将数据传递给另一个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中检查和打印context变量的内容,所以我可以检查CloudWatch中的日志:
memberList = inspect.getmembers(context)
for a in memberList:
logging.error(a)
问题无效,CloudWatch显示用户上下文为空:
('client_context', None)
我已尝试example1,example2,example3,example4
有什么想法吗?
答案 0 :(得分:6)
我放弃了尝试通过上下文传递数据。但是,我能够通过Payload参数传递数据:
client.invoke(
FunctionName='LambdaWorker',
InvocationType='Event',
LogType='None',
Payload=json.dumps(payload)
)
然后从调用的lambda中的event参数中读取它:
ctx = json.dumps(event)
答案 1 :(得分:1)
问题中的代码非常接近。唯一的问题是InvocationType类型:
这将与你问题中的代码一起使用:
client.invoke(
FunctionName='LambdaWorker',
InvocationType='RequestResponse',
LogType='None',
ClientContext=payloadBase64
)
然而,这会将调用更改为同步,这可能是不合需要的。这种行为的原因尚不清楚。