调用另一个lamba传递信息并读取lambda上的信息

问题描述 投票:0回答:1

我试图将信息从一个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呢?

python amazon-web-services aws-lambda boto3
1个回答
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函数使用。

© www.soinside.com 2019 - 2024. All rights reserved.