Ich versuche, eine Lambda-Funktion einzurichten, die eine Datei verarbeitet, wenn sie in einen S3-Bucket hochgeladen wird. Ich brauche eine Möglichkeit, um die Ausgabe console.log
beim Hochladen einer Datei zu sehen, kann aber nicht herausfinden, wie ich meine Lambda-Funktion mit CloudWatch verknüpfe.
Ich habe es mir überlegt, indem ich context
mir das Objekt angesehen habe, das meine Protokollgruppe /aws/lambda/wavToMp3
und der Protokolldatenstrom ist 2016/05/23/[$LATEST]hex_code_redacted
. Also habe ich diese Gruppe und diesen Stream in CloudWatch erstellt, aber es wird nichts daran protokolliert.
Antworten:
Damit die Lambda-Funktion einen Protokolldatenstrom erstellen und Protokolle in Cloudwatch veröffentlichen kann, muss die Lambda-Ausführungsrolle über die folgenden Berechtigungen verfügen.
Weitere Informationen finden Sie in der folgenden AWS-Dokumentation unter http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role
quelle
Log group not found
. Wenn Sie es hierNachdem Sie Ihre Richtlinie aktualisiert haben, müssen Sie anscheinend die Einstellungen Ihrer Funktion aktualisieren, um alle Jobinstanzen zu aktualisieren und neue Richtlinien zu lesen.
Wenn Sie also nach dem Aktualisieren Ihrer Rollenrichtlinie in IAM in der Lambda-Konsole einfach auf die Schaltfläche "Testen" klicken, verfügen die zwischengespeicherten Lambda-Instanzen weiterhin über alte Rollenberechtigungen, sodass weiterhin keine Protokolle in Cloudwatch-Protokolle geschrieben werden.
Ändern Sie einfach Ihr Timeout um eine Sekunde und klicken Sie auf die Schaltfläche "Speichern und testen". Daraufhin werden Protokolle in Cloudwatch angezeigt.
quelle
Ich hatte diese Berechtigungen bereits, aber es hat nicht funktioniert.
Ich habe das Timeout geändert, gespeichert und die Protokolle haben immer noch nicht funktioniert.
Ich habe eine andere Rolle zugewiesen und die Protokolle haben immer noch nicht funktioniert.
Am Ende habe ich auf "Benutzerdefinierte Rolle erstellen" und dann auf "Zulassen" geklickt. Dies war es und Protokolle wurden generiert, aber da ich keine neue Rolle, sondern meine vorhandene Rolle verwenden wollte, habe ich einfach meine vorhandene Rolle danach zugewiesen und es hat funktioniert. Technisch gesehen hätte ich also zur ursprünglichen Konfiguration zurückkehren sollen, die nicht funktioniert hat, aber jetzt funktioniert sie. Stelle dir das vor.
quelle
Anscheinend besteht eine weitere Notwendigkeit für die Protokollierung darin, dass die Lambda-Funktion den Abschluss anzeigen muss. Im Python-Kontext muss der Handler beispielsweise etwas anderes als zurückgeben
None
.quelle
Stellen Sie sicher, dass Sie in Ihrer Lambda-Funktion "Konfiguration" den vollständigen Pfad Ihrer "vorhandenen Rolle" haben:
Rolle: Wählen Sie eine vorhandene Rolle aus. Vorhandene Rolle: Servicerolle / Ihr Rollenname
Aus irgendeinem Grund funktioniert die Eingabe nur Ihres Rollennamens für einige Dienste (wie SES), nicht jedoch für CloudWatch.
Sie können auch versuchen, eine neue Rolle zu erstellen, anstatt eine vorhandene zu verwenden. Dadurch wird die Rolle mit der richtigen Konfiguration erstellt (hoffentlich).
quelle
Das Problem bestand darin, dass ich versucht habe, eine Protokollgruppe im Cloudformation-Skript zu erstellen, indem: AWS :: Logs :: LogGroup, und dann versucht wurde, das Lambda-Protokoll in diese Protokollgruppe zu verschieben. : P Anfänger Nach sorgfältiger Lektüre stellte ich fest, dass Lambda ein eigenes Protokoll mit dem oben genannten Format erstellt: / aws / lambda / Wir müssen dieser Protokollgruppe nur eine Richtlinienberechtigung oder nur eine generische Berechtigung mit der Ressource: arn: aws: Protokolle ::: *
hoffe das hilft
quelle
Vielleicht etwas spät, aber für diejenigen, die immer noch Schwierigkeiten haben, die Lambda-Protokolle in Cloudwatch zu sehen. Ich habe Folgendes in Bezug auf die Ausführungsrolle der Lambda-Funktion festgestellt: "Sie können eine vorhandene Rolle mit dieser Funktion verwenden. Beachten Sie, dass die Rolle von Lambda übernommen werden muss und über Berechtigungen für Cloudwatch-Protokolle verfügen muss." In IAM habe ich der Rolle, die ich meiner Funktion zugewiesen habe, "CloudWatchLogsFullAccess" gewährt. In Cloudwatch werden unter Protokolle die Protokolle für die Funktionen angezeigt, denen diese Rolle zugewiesen wurde.
quelle
Wie in anderen Antworten angegeben, müssen Sie Lambda die Berechtigung erteilen, Protokolle in Cloud-Watch-Protokollen zu veröffentlichen. AWS hatte nur dafür
AWSLambdaExecute
Richtlinien bereitgestellt . Es ist json ist -Sie können diese Richtlinie zu Ihrer Rolle hinzufügen, die Ihrem Lambda zugewiesen ist, und Sie sollten die Protokolle anzeigen.
HINWEIS: Es hat auch S3 Lese- / Schreibzugriff. Wenn Sie dies nicht möchten, können Sie eine benutzerdefinierte Richtlinie nur mit dem Protokollteil erstellen.
quelle
Es könnte bereits protokolliert werden, wir konnten die erwarteten Protokolle einfach nicht finden ...
z.B
Nach der Durchführung
GET /hello?world=1
,Lokale Konsole: (einfach und klar, nett!)
CloudWatch-Protokolle: (Können Sie das genaue Protokoll unten leicht finden?)
Fazit: Zu ausführlich, um die Originalprotokolle zu finden.
quelle
Ich bin auf dieses Problem gestoßen, aber keine der obigen Antworten hat mein Problem gelöst. Es stellt sich heraus, dass die Region irgendwie auf Ohio eingestellt war, als ich CloudWatch zum ersten Mal startete. Nachdem ich es in US East (N. Virginia) geändert habe, funktioniert alles einwandfrei.
quelle
CloudWatch
&CloudWatch Logs
sind verschiedene Berechtigungen, müssen SieCloudWatch Logs
der Richtlinie hinzufügen , die mit Ihrer Rolle verbunden ist.quelle
Es gibt eine Beschreibung mit dem Titel " Überwachen von AWS Lambda mit CloudWatch" mit einem Abschnitt "Verwenden von CloudWatch-Protokollen mit Lambda". Sieht so aus, als hätten Sie Ihre Antwort bereits gefunden, aber für alle ohne IAM-spezifische Probleme kann dies hilfreich sein.
quelle
Möglicherweise möchten Sie der Protokollausgabe die Spalte Letzte Aufnahmezeit hinzufügen . Es dauert einige Minuten, bis alle meine Ereignisse geschrieben sind.
quelle
Obwohl dies bereits beantwortet wurde, wollte ich nur meine Erfahrung hinzufügen, die für andere nützlich sein könnte.
Sogar die Berechtigungen sind entsprechend eingestellt, damit Lambda sich bei Cloudwatch anmelden kann. Manchmal dauert es 3-4 Stunden, um die Protokollgruppen wiederzugeben.
In meinem Fall bei Verwendung von Lambda für DynamoDB-Ereignisse, bei denen Lambda alle erforderlichen Berechtigungen für Cloudwatch und DynamoDB erteilt wurde. Es dauerte 4 Stunden, bis die Protokolle wiedergegeben wurden. Möglicherweise sind einige Synchronisierungsprobleme von AWS zu Ende. Nach 4 Stunden ohne Aktion von meinem Ende konnte ich die Cloudwatch-Protokolle sehen.
Stellen Sie außerdem sicher, dass Sie die Protokolle in derselben Region durchsuchen, in der Ihre Funktion erstellt wurde.
quelle
Juli 2020 Update !!
Protokolle befinden sich möglicherweise nicht in us-east-1. Suchen Sie nach Lambda-Randprotokollen in verschiedenen Regionen!
quelle