调用另一个lamba通行证信息并读取lambda上的信息

时间:2018-08-02 01:40:58

标签: python amazon-web-services aws-lambda boto3

我正在尝试将信息从一个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?

1 个答案:

答案 0 :(得分:1)

显然,您应该使用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'})

客户端上下文包含有关客户端的数据,但customenv键下的数据可用于lambda函数。