json — передача полезной нагрузки в функцию AWS Lambda с помощью AWS PHP SDK

Я пытаюсь использовать 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)
]);

По какой-то причине я получаю ErrorException в StatusCodeVisitor.php в строке 21. «Недопустимое смещение строки« StatusCode »»

Когда я не включаю

'Payload' => json_encode($payload)

Тогда я не получаю сообщение об ошибке, но я также не передаю никаких данных в свою лямбда-функцию, которая противоречит цели.

Кто-нибудь может увидеть что-то, что я могу делать неправильно? Это кажется тривиальным примером.

Редактировать — Добавление ссылки на документацию по этой функции

http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.Lambda.LambdaClient.html#_invoke

4

Решение

Я столкнулся с той же проблемой, и по какой-то странной причине AWS SDK не распознал ассоциированный массив в PHP. Возможно, потому что во время кодирования JSON ассоциативный массив в PHP становится объектом, и SDK ожидает его как массив.

изменения $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()
);
5

Другие решения

Других решений пока нет …