лямбда вызывает команду cli, считывающую полезную нагрузку lamdba по-разному - PullRequest
0 голосов
/ 23 апреля 2020

Я создал функцию AWS lamdba, которую я запускаю с помощью сценария Windows bat. Сценарий windows bat принимает переменную среды windows USERNAME как часть полезной нагрузки.

Я успешно работаю на локальном компьютере со следующим синтаксисом:

aws lambda invoke --function-name ConnectDesktops --payload "{\"Name\": \"%USERNAME%\" }" response.json

Однако затем я передал этот bat-файл своим конечным пользователям, если они сталкиваются с ошибками при выполнении той же команды

Произошла ошибка (InvalidRequestContentException) при вызове операции Invoke: Не удалось разобрать тело запроса в json: неожиданный символ ('©' (код 169)): ожидаемое пространство, разделяющее значения root -уровня в [Source: (byte []) "5��F�b����" ; строка: 1, столбец: 3]

Переменная среды разрешается на их рабочем столе, но я все же разрешил ее вручную и попробовал несколько альтернатив для полезной нагрузки

aws lambda invoke --function-name ConnectDesktops --payload "{\"Name\": \"User1\" }" response.json

aws lambda invoke --function-name ConnectDesktops --payload "{"Name": "User1" }" response.json

aws lambda invoke --function-name ConnectDesktops --payload '{"Name": "User1"}' response.json

aws lambda invoke --function-name ConnectDesktops --payload {"Name": "User1"} response.json

Все с тем же результатом или, возможно, что-то вроде

Неизвестные параметры: response. json,} '

Опять же, начальная команда фактически работает на моем собственном рабочем столе, и мы оба используем Windows 10 и инструмент командной строки cmd.

Моя aws лямбда-функция записана в Python 3.8 и запускается так

import boto3
from botocore.exceptions import ClientError

client=boto3.client('ec2')

def lambda_handler(event, context):

    name=event['Name']

Буду признателен за любые предложения.

1 Ответ

0 голосов
/ 30 апреля 2020

Хорошо, поэтому я нашел ответ.

Конечно, между моей установкой и моими коллегами должна была быть разница, и разница заключалась в том, что мы использовали версию Amazon CLI.

I был на V1, где вышеуказанная команда работает нормально, но мои коллеги использовали V2, где вам нужно добавить параметр --cli-binary-format raw-in-base64-out

. Вы можете проверить, какую версию CLI вы используете, выполнив следующую команду: aws --version

Полная рабочая команда CLI V2 для справки: aws lambda invoke --function-name ConnectDesktops --payload "{\"Name\": \"%USERNAME%\" }" --cli-binary-format raw-in-base64-out response.json

...