我试图将信息从一个lambda(函数1)传递给另一个lambda(函数2)。 我知道用boto3我会用它来调用函数1
load = {
'id': 25,
'Info': 'Information',
}
json_load = json.dumps(load)
response = client.invoke(
FunctionName='string',
Payload=json_load,
)
我怎么会在函数2中读取json_load呢?
显然你应该使用InvocationType='RequestResponse'
并通过ClientContext
传递数据。
来自Lambda.invoke() doesn't send client context · Issue #1388 · aws/aws-sdk-js:
看起来您需要将要发送的数据放在获取JSON.stringify和base64编码的对象中的密钥自定义下。例如,使用以下客户端代码:
var AWS = require('aws-sdk');
var la = new AWS.Lambda({ region: 'us-west-2' });
var ctx = {
custom: { foo: 'bar' },
client: { snap: ['crackle', 'pop']},
env: { fizz: 'buzz' },
};
la.invoke({
FunctionName: 'contextPrinter',
ClientContext: AWS.util.base64.encode(JSON.stringify(ctx)),
InvocationType: 'RequestResponse',
Payload: JSON.stringify({ baz: 'quux' })
}, function (err, data) { return console.log(err, data); });
和以下lambda:
def lambda_handler(event, context):
print("context", context.client_context)
print("client", ', '.join(i for i in dir(context.client_context.client) if not i.startswith('__')))
print("custom", context.client_context.custom)
print("env", context.client_context.env)
我得到以下日志输出:
('context', <__main__.ClientContext object at 0x7f5705898170>)
('client', 'app_package_name, app_title, app_version_code, app_version_name, installation_id')
('custom', {u'foo': u'bar'})
('env', {u'fizz': u'buzz'})
客户端上下文包含有关客户端的数据,但custom
或env
密钥下的数据可供lambda函数使用。