使用 AWS PHP 开发工具包将“有效负载”传递给 AWS Lambda 函数
Posted
技术标签:
【中文标题】使用 AWS PHP 开发工具包将“有效负载”传递给 AWS Lambda 函数【英文标题】:Passing a 'Payload' to an AWS Lambda function with the AWS PHP SDK 【发布时间】:2015-08-02 07:52:03 【问题描述】:我正在尝试使用 aws php sdk 来调用 aws-lambda 函数并获取返回值,如下所示:
$client = LambdaClient::factory([
'key' => 'mykey',
'secret' => 'mysecret',
'region' => 'us-west-2'
]);
$payload = [
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
];
$result = $client->invoke([
'FunctionName' => 'testFunction',
'Payload' => json_encode($payload)
]);
由于某种原因,我在第 21 行的 StatusCodeVisitor.php 中遇到了 ErrorException。“非法字符串偏移 'StatusCode'”
当我不包括
'Payload' => json_encode($payload)
然后我没有收到错误,但我也没有将任何数据传递到我的 lambda 函数中,这违背了目的。
谁能看到我做错了什么?这似乎是一个微不足道的例子。
编辑 - 添加此功能的文档链接
http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.Lambda.LambdaClient.html#_invoke
【问题讨论】:
显示$payload
的内容
我已经,我创建 $payload 只是在我使用它的上面几行
一切都好哈哈,你让我担心了一秒钟:)
statsuCode 是响应...你能转储整个回报吗
不,它会引发异常。如果我捕获异常并将其转储,则异常消息是“非法字符串偏移 'StatusCode'”
【参考方案1】:
我遇到了同样的问题,由于某种奇怪的原因,AWS SDK 无法识别 PHP 中的关联数组。可能是因为在 PHP 中 JSON 编码关联数组成为对象时,SDK 期望它为 Array。
如下更改$payload
将解决此问题。
$payload = array('test1', 'test3', 'test3');
还请记住,如果您在 $payload
中进行了更改,您需要在 Lambda 函数中访问它们,如下所示:
exports.handler = function(event, context)
console.log('value1 =', event[0]);
console.log('value2 =', event[1]);
console.log('value3 =', event[2]);
context.succeed(event); // Echo back the first key value
// context.fail('Something went wrong');
;
更新
你可以这样传递信息:
$payload = array(
"key1" => array(),
"key2" => array()
);
【讨论】:
以上是关于使用 AWS PHP 开发工具包将“有效负载”传递给 AWS Lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章
从适用于 PHP 的 AWS 开发工具包中提取受保护的请求响应
如何在 AWS Lambda 上创建 EC2 时将脚本传递给 UserData 字段?
用于移动推送通知的 AWS SNS 的最大有效负载长度是多少?