
Ich habe eine Lambda-Funktion in Golang geschrieben. Ich führe sie durch Aufruf des HTTP-API-Gateways aus. Sie funktioniert einwandfrei, aber ich würde gerne Protokolle sehen, die in stderr geschrieben sind und von meinem Golang-Programm erstellt werden.
Ich habe es versuchtDas
aws logs describe-log-groups
aber es zeigt ein leeres Array:
{
"logGroups": []
}
Tatsächlich kann ich Protokolle nur sehen, wenn ich die Lambda-Funktion direkt ohne API-Gateway aufrufe, und zwar wie folgt:
aws lambda invoke --function-name $FUNCTION_NAME $output --log-type Tail --query 'LogResult'
In diesem Fall wird das Protokoll direkt nach dem Aufruf ausgedruckt.
Aber noch besser wäre es, die Protokolle der Lambda-Funktion zu sehen, wenn ich sie über das HTTP-API-Gateway aufrufe.
Aktualisierung 1
Ich habe eine Protokollgruppe mit dem Namen hinzugefügt /aws/lambda/$FUNCTION_NAME
:
aws logs create-log-group --log-group-name /aws/lambda/$FUNCTION_NAME
Und habe den Protokollstream hinzugefügt:
aws logs create-log-stream --log-group-name /aws/lambda/$FUNCTION_NAME --log-stream-name /aws/lambda/$FUNCTION_NAME
Dann rufe ich meine Lambda-Funktion über die API auf, um einige Protokolle zu erstellen. Jetzt überprüfe ich die Protokolle:
aws logs get-log-events --log-group-name /aws/lambda/$FUNCTION_NAME --log-stream-name /aws/lambda/$FUNCTION_NAME
Und erhalten Sie die Antwort:
{
"nextForwardToken": "f/7872383232323",
"events": [],
"nextBackwardToken": "b/8080823092093"
}
Ich habe also keine Veranstaltungen ... hmmm ...
Ich habe diese Protokollgruppe in der Konsole geprüft. Auch dort ist sie leer.
Aktualisierung 2
Ich habe CloudWatchFullAccess
der Rolle, die dieser Lambda-Funktion zugeordnet ist, eine Richtlinie hinzugefügt:
aws iam attach-role-policy --role-name $roleName \
--policy-arn arn:aws:iam::aws:policy/CloudWatchFullAccess
API aufgerufen, Protokolle erneut geprüft, immer noch leer. Interessant, dass beim Auflisten der Rollenrichtlinien ein leeres Array angezeigt wird. Obwohl ich oben gerade CloudWatchFullAccess festgelegt habe.
aws iam list-role-policies --role-name $roleName
{
"PolicyNames": []
}
Antwort1
Wenn Sie eine Lambda-Funktion erstellen, sollte ihr eine Protokollgruppe zugeordnet sein, aber es sieht so aus, als ob in Ihrem Konto keine vorhanden ist. Sie könnten versuchen, eine neue Protokollgruppe mit dem Namen zu erstellen '/aws/lambda/<function_name>'
und zu sehen, ob das Problem dadurch behoben wird. Ich würde auch versuchen, mich bei der Webkonsole anzumelden, um zu überprüfen, ob dort dasselbe Problem auftritt. Sie können die Protokollgruppe auch über die Konsole in Cloud Watch erstellen.