无法在 PHP 客户端中获得 aws lambda 函数响应
Cannot get aws lambda function response in PHP client
我正尝试按照文档中的说明使用 PHP 调用一个简单的 Aws Lambda 函数,但我没有得到所需的响应。
PHP Lambda 客户端
require './aws/aws-autoloader.php';
use Aws\Lambda\LambdaClient;
$client = LambdaClient::factory(array(
'version' => "latest",
'credentials' => array(
'key' => '*******',
'secret' => '*******'
),
'region' => '*******'
));
$response = $client->invoke([
'FunctionName' => 'myLambda', // REQUIRED
'InvocationType' => 'RequestResponse',
'Payload' => '{"key":"value"}',
]);
echo "<pre>";
print_r($response);
print_r($response->data);
?>
Node.js Lambda 函数
这只有 returns "success" 成功执行 Lambda 函数的简单代码。它在 Amazon Lambda 控制台中的工作发现。
exports.handler = function(event, context){
context.succeed("success");
};
亚马逊的回应
我得到一个我无法访问的私有数据对象。根据文档,有效负载应该是函数的响应。但是,我得到一个对象,我又不能访问它,因为父对象数据是私有的。
Aws\Result Object
(
[data:Aws\Result:private] => Array
(
[Payload] => GuzzleHttp\Psr7\Stream Object
(
[stream:GuzzleHttp\Psr7\Stream:private] => Resource id #6
[size:GuzzleHttp\Psr7\Stream:private] =>
[seekable:GuzzleHttp\Psr7\Stream:private] => 1
[readable:GuzzleHttp\Psr7\Stream:private] => 1
[writable:GuzzleHttp\Psr7\Stream:private] => 1
[uri:GuzzleHttp\Psr7\Stream:private] => php://temp
[customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
(
)
)
[StatusCode] => 200
[FunctionError] =>
[LogResult] =>
[@metadata] => Array
(
[statusCode] => 200
[effectiveUri] => https://lambda.*********.amazonaws.com/2015-03-31/functions/myLambda/invocations
[headers] => Array
(
[content-type] => application/json
[date] => Wed, 06 Apr 2016 12:33:05 GMT
[x-amzn-remapped-content-length] => 0
[x-amzn-requestid] => ******-*****-*****-****-*******************
[content-length] => 9
[connection] => keep-alive
)
[transferStats] => Array
(
[http] => Array
(
[0] => Array
(
)
)
)
)
)
)
那么,如何从 Lambda 函数访问响应?这可能是什么问题?
更新
我可以使用 print_r($response['Payload']);
访问有效载荷
但是,仍然没有用,因为 Payload 没有按预期到达。
哦!好吧,我找到了答案。
您需要调用 Payload
.
中 GuzzleHttp\Psr7\Stream
对象的 __toString()
方法
所以,执行 print_r($response['Payload']->__toString());
输出 "Success",这是 Lambda 函数的期望响应,也是我正在寻找的响应。
希望这对以后的人有所帮助。
另一种方法是调用 getContents()
流对象,如下所示:
$result = $client->invoke(array(
// FunctionName is required
'FunctionName' => 'myService-beta-hello',
'InvocationType' => 'RequestResponse',
'LogType' => 'Tail',
'Payload' => '{"key1":"value1", "key2":"value2","key3":"value3"}',
//'Qualifier' => 'string',
));
print "<pre>";
print_r($result);
print_r($result['Payload']->getContents());
print "</pre>";
require_once 'aws/aws-autoloader.php';
use Aws\Lambda\LambdaClient;
$client = LambdaClient::factory([
'version' => 'latest',
'region' => 'us-east-1',
'credentials' => [
'key' => 'YOUR_AWS_ACCESS_KEY_ID',
'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY',
]
]);
$result = $client->invoke([
// The name your created Lamda function
'FunctionName' => 'calculation',
]);
var_dump((string)$result->get('Payload'));
我正尝试按照文档中的说明使用 PHP 调用一个简单的 Aws Lambda 函数,但我没有得到所需的响应。
PHP Lambda 客户端
require './aws/aws-autoloader.php';
use Aws\Lambda\LambdaClient;
$client = LambdaClient::factory(array(
'version' => "latest",
'credentials' => array(
'key' => '*******',
'secret' => '*******'
),
'region' => '*******'
));
$response = $client->invoke([
'FunctionName' => 'myLambda', // REQUIRED
'InvocationType' => 'RequestResponse',
'Payload' => '{"key":"value"}',
]);
echo "<pre>";
print_r($response);
print_r($response->data);
?>
Node.js Lambda 函数 这只有 returns "success" 成功执行 Lambda 函数的简单代码。它在 Amazon Lambda 控制台中的工作发现。
exports.handler = function(event, context){
context.succeed("success");
};
亚马逊的回应 我得到一个我无法访问的私有数据对象。根据文档,有效负载应该是函数的响应。但是,我得到一个对象,我又不能访问它,因为父对象数据是私有的。
Aws\Result Object
(
[data:Aws\Result:private] => Array
(
[Payload] => GuzzleHttp\Psr7\Stream Object
(
[stream:GuzzleHttp\Psr7\Stream:private] => Resource id #6
[size:GuzzleHttp\Psr7\Stream:private] =>
[seekable:GuzzleHttp\Psr7\Stream:private] => 1
[readable:GuzzleHttp\Psr7\Stream:private] => 1
[writable:GuzzleHttp\Psr7\Stream:private] => 1
[uri:GuzzleHttp\Psr7\Stream:private] => php://temp
[customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
(
)
)
[StatusCode] => 200
[FunctionError] =>
[LogResult] =>
[@metadata] => Array
(
[statusCode] => 200
[effectiveUri] => https://lambda.*********.amazonaws.com/2015-03-31/functions/myLambda/invocations
[headers] => Array
(
[content-type] => application/json
[date] => Wed, 06 Apr 2016 12:33:05 GMT
[x-amzn-remapped-content-length] => 0
[x-amzn-requestid] => ******-*****-*****-****-*******************
[content-length] => 9
[connection] => keep-alive
)
[transferStats] => Array
(
[http] => Array
(
[0] => Array
(
)
)
)
)
)
)
那么,如何从 Lambda 函数访问响应?这可能是什么问题?
更新
我可以使用 print_r($response['Payload']);
访问有效载荷
但是,仍然没有用,因为 Payload 没有按预期到达。
哦!好吧,我找到了答案。
您需要调用 Payload
.
GuzzleHttp\Psr7\Stream
对象的 __toString()
方法
所以,执行 print_r($response['Payload']->__toString());
输出 "Success",这是 Lambda 函数的期望响应,也是我正在寻找的响应。
希望这对以后的人有所帮助。
另一种方法是调用 getContents()
流对象,如下所示:
$result = $client->invoke(array(
// FunctionName is required
'FunctionName' => 'myService-beta-hello',
'InvocationType' => 'RequestResponse',
'LogType' => 'Tail',
'Payload' => '{"key1":"value1", "key2":"value2","key3":"value3"}',
//'Qualifier' => 'string',
));
print "<pre>";
print_r($result);
print_r($result['Payload']->getContents());
print "</pre>";
require_once 'aws/aws-autoloader.php';
use Aws\Lambda\LambdaClient;
$client = LambdaClient::factory([
'version' => 'latest',
'region' => 'us-east-1',
'credentials' => [
'key' => 'YOUR_AWS_ACCESS_KEY_ID',
'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY',
]
]);
$result = $client->invoke([
// The name your created Lamda function
'FunctionName' => 'calculation',
]);
var_dump((string)$result->get('Payload'));