Estoy tratando de invocar mi lambda usando aws cli:
$ aws lambda invoke \ --function-name soc-update-dynamodb-java \ --invocation-type Event \ --payload file://invoke-payload.json \ response.jsonSin embargo, recibo este mensaje:
Ocurrió un error (InvalidRequestContentException) al llamar a la operación Invoke: No se pudo analizar el cuerpo de la solicitud en json: UTF-8 byte medio 0x28 no válido en [Fuente: (byte[])"E�(�����U�슉�� �Ø��k.....
El contenido de payload.json es un json similar a un evento s3:
{ "Records": [ { "eventVersion": "2.0", "eventSource": "aws:s3", "awsRegion": "eu-central-1", "eventTime": "1970-01-01T00:00:00.000Z", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "requestParameters": { "sourceIPAddress": "127.0.0.1" }, "responseElements": { "x-amz-request-id": "EXAMPLE123456789", "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH" }, "s3": { "s3SchemaVersion": "1.0", "configurationId": "testConfigRule", "bucket": { "name": "soc-connect", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::example" }, "object": { "key": "example.key", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] }Puedo ejecutarlo desde la consola web de aws usando este evento, pero tengo problemas para intentar invocarlo usando aws cli.
Obtuve la codificación de invocar-payload.json:
$ file -i invoke-payload.json invoke-payload.json: text/plain; charset=us-ascii Como puede ver, la codificación es us-ascii .
EDITAR
También intenté enviar la carga útil incrustada en el comando. Como puede ver en la imagen, recibo el mismo mensaje:
¿Algunas ideas?
use la sintaxis fileb:// ("archivo binario") para el parámetro de carga útil para que no tenga que ejecutarlo a través de base64
... --archivo de carga útilb://invoke-payload.json
Para la AWS CLI versión 2, agregue --cli-binary-format para asegurarse de que la carga útil se interprete correctamente.
$ aws lambda invoke \ --function-name soc-update-dynamodb-java \ --invocation-type Event \ --payload file://invoke-payload.json \ --cli-binary-format raw-in-base64-out \ response.jsonA continuación, le mostramos cómo probar su Lambda dándole una breve carga JSON y mostrando el resultado en la terminal:
aws lambda invoke \ --payload '{"beer": "tasty"}' --function-name myfunc \ --cli-binary-format raw-in-base64-out \ /dev/stdoutBasándose en la respuesta de antklim