Estaba tratando de trabajar con AWS Lambda usando awscli en una instancia de ubuntu ec2 y no tengo acceso a la consola de aws. Tenga en cuenta que no estoy usando serverless o zapper, comprimo directamente mi archivo main.py junto con los archivos de dependencia como se menciona aquí
Ejecuto la función así
aws lambda invoke --function-name python-test --invocation-type RequestResponse outfile.txt
Los errores dados en el archivo de salida son muy vagos y no ayudan en la depuración, sino que me confunden más. Usando el sistema del administrador, puedo reconocer los errores cuando ejecuto una prueba en la consola, pero ¿cómo puedo verificar esos registros usando awscli?
Así que intenté ejecutar aws cloudwatch list-metrics > cloudwatch_logs.log y busqué el nombre de la función 'python-test' en el archivo cloudwatch_logs.log. Puedo encontrar Namespace , MetricName , Dimensions para esta función, pero ¿cómo se accede a la registros?
¡Cualquier ayuda con enlaces a ejemplos similares es muy apreciada!
Primero, obtenga el nombre del grupo de registros :
aws logs describe-log-groups --query logGroups[*].logGroupName [ "/aws/lambda/MyFunction" ]Luego, enumere los flujos de registros para ese grupo de registros:
aws logs describe-log-streams --log-group-name '/aws/lambda/MyFunction' --query logStreams[*].logStreamName [ "2018/02/07/[$LATEST]140c61ffd59442b7b8405dc91d708fdc" ]Finalmente, obtenga los eventos de registro para esa transmisión:
aws logs get-log-events --log-group-name '/aws/lambda/MyFunction' --log-stream-name '2018/02/07/[$LATEST]140c61ffd59442b7b8405dc91d708fdc' { "nextForwardToken": "f/33851760153448034063427449515194237355552440866456338433", "events": [ { "ingestionTime": 1517965421523, "timestamp": 1517965421526, "message": "START RequestId: bca9c478-0ba2-11e8-81db-4bccfc644168 Version: $LATEST\n" }, { "ingestionTime": 1517965424581, "timestamp": 1517965424567, "message": "END RequestId: bca9c478-0ba2-11e8-81db-4bccfc644168\n" }, { "ingestionTime": 1517965424581, "timestamp": 1517965424567, "message": "REPORT RequestId: bca9c478-0ba2-11e8-81db-4bccfc644168\tDuration: 3055.39 ms\tBilled Duration: 3100 ms \tMemory Size: 128 MB\tMax Memory Used: 35 MB\t\n" } ], "nextBackwardToken": "b/33851760085631457914695824538087252860391482425578356736" }sabor jq :
Enumere el nombre del grupo AWS lambda (si la lista es demasiado grande, es posible que desee filtrarla con grep ):
aws logs describe-log-groups | jq -r ".logGroups[].logGroupName" Luego lea la propiedad del message de la última secuencia con:
LOG_GROUP_NAME="/aws/lambda/awesomeFunction" LOG_STREAM_NAME=$(aws logs describe-log-streams --log-group-name "${LOG_GROUP_NAME}" | jq -r '.logStreams | sort_by(.creationTime) | .[-1].logStreamName') aws logs get-log-events --log-group-name "${LOG_GROUP_NAME}" --log-stream-name "${LOG_STREAM_NAME}" | jq -r '.events[] | select(has("message")) | .message' Es posible que desee poner esto en un archivo logs.sh
Si desea más u otras transmisiones, es posible que desee modificar la .logStreams[0]
El uso de AWS CLI puede ser un poco irritante porque el nombre de la transmisión cambia a medida que modifica su función. Descubrí que usar awslogs ( https://github.com/jorgebastida/awslogs ) es un mejor flujo de trabajo.
Enumere los grupos:
awslogs groupsFiltrar Resultados.
awslogs groups|grep myfunctionLuego obtenga los registros del grupo.
awslogs get /aws/lambda/ShortenStack-mutationShortenLambdaBC1758AD-6KW0KAD3TYVE Por defecto son los últimos 5 minutos, pero puede agregar el parámetro -s para elegir un tiempo, por ejemplo, -s 10m para los últimos 10 minutos.
La salida está coloreada si está en la terminal, o simple si la está canalizando a través de otros comandos, por ejemplo, grep para encontrar algo.