Recibo un error cuando intento invocar una función lambda desde la CLI de AWS. Estoy usando la versión 2 de la CLI. Entiendo que debo pasar el argumento --payload
como una cadena que contiene un objeto JSON.
aws lambda invoke --function-name testsms --invocation-type Event --payload '{"key": "test"}' response.json
Obtuve el siguiente error:
Invalid base64: "{"key": "test"}"
He probado todo tipo de variantes para los caracteres de escape JSON, etc. También he intentado usar la opción file://test.json
y recibo el mismo error.
Parece que awscli v2 requiere que algunos parámetros estén codificados en base64.
De forma predeterminada, la AWS CLI versión 2 ahora pasa todos los parámetros de entrada y salida binaria como cadenas codificadas en base64. Un parámetro que requiere entrada binaria tiene su tipo especificado como blob (objeto grande binario) en la documentación.
El parámetro de carga útil para lamba invoke
es uno de estos tipos de blob
que deben estar codificados en base64.
--payload (blob) El JSON que desea proporcionar a su función de Lambda como entrada.
Una solución es usar openssl base64 para codificar su carga útil.
echo '{"key": "test"}' > clear_payload openssl base64 -out encoded_payload -in clear_payload aws lambda invoke --function-name testsms --invocation-type Event --payload file://~/encoded_payload response.json
Como dijo @MCI, AWS V2 tiene como valor predeterminado la entrada base 64. Para que su caso funcione, simplemente agregue un --cli-binary-format raw-in-base64-out
a su comando, por lo que sería
aws lambda invoke --function-name testsms \ --invocation-type Event \ --cli-binary-format raw-in-base64-out \ --payload '{"key": "test"}' response.json
Esta solución funcionó para mí y la encuentro más simple que tener que recordar/comprobar la página de manual para ver las banderas correctas cada vez.
aws lambda invoke --function-name my_func --payload $(echo "{\"foo\":\"bar\"}" | base64) out
En primer lugar, una cadena es un json válido.
en mi caso tuve este problema
$ aws --profile diegosasw lambda invoke --function-name lambda-dotnet-function --payload "Just Checking If Everything is OK" out An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Could not parse payload into json: Unrecognized token 'Just': was expecting ('true', 'false' or 'null') at [Source: (byte[])"Just Checking If Everything is OK"; line: 1, column: 6]
y resulta que el problema se debió a que AWS CLI intentó convertirlo a JSON. Escapar de las comillas dobles funcionó
$ aws --profile diegosasw lambda invoke --function-name lambda-dotnet-function --payload "\"Just Checking If Everything is OK\"" out { "StatusCode": 200, "ExecutedVersion": "$LATEST" }
En Windows, probé lo siguiente, que funcionó para mí
aws lambda invoke --function-name testsms --invocation-type Event --cli-binary-format raw-in-base64-out --payload {\"key\": \"test\"} response.json
Tenga en cuenta que agregó --cli-binary-format raw-in-base64-out
en el comando y escapó " a \" en la carga útil