Я пытаюсь вызвать простую лямбда-функцию Aws, используя PHP, как указано в документации, но я не получаю желаемого ответа.
PHP Лямбда-клиент
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 лямбда-функция
Здесь нет ничего, кроме этого простого кода, который возвращает «success» при успешном выполнении функции Lambda. Его рабочая находка в консоли Amazon Lambda.
exports.handler = function(event, context){
context.succeed("success");
};
Ответ от Amazon
Я получаю приватный объект данных, к которому у меня нет доступа. И согласно документации, полезная нагрузка должна быть ответом от функции. Но я получаю объект, к которому я снова не могу получить доступ, потому что данные родительского объекта являются частными.
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
(
)
)
)
)
)
)
Итак, как мне получить доступ к ответу из лямбда-функции? В чем может быть проблема здесь?
ОБНОВИТЬ
Я могу получить доступ к полезной нагрузке с помощью print_r($response['Payload']);
Но все же его бесполезно, потому что полезная нагрузка идет не так, как ожидается.
Ой! хорошо, я нашел ответ.
Вам нужно позвонить __toString()
метод GuzzleHttp\Psr7\Stream
Объект, который находится внутри Payload
,
Итак, делая print_r($response['Payload']->__toString());
выводит «Success», который является желаемым ответом лямбда-функции и тем, который я искал.
Надеюсь, это поможет кому-то в будущем.
Другой способ — позвонить, 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>";