it-swarm.com.de

AWS-Lambda-Funktion kann nicht in CloudWatch protokolliert werden (Textausgabe)

Ich versuche, eine Lambda-Funktion einzurichten, die eine Datei verarbeitet, wenn sie in einen S3-Bucket hochgeladen wird. Ich brauche eine Möglichkeit, die Ausgabe von console.log anzuzeigen, wenn ich eine Datei hochlade, aber ich kann nicht herausfinden, wie ich meine Lambda-Funktion mit CloudWatch verknüpfen kann.

Ich schätzte es, indem ich mir das context-Objekt ansah, dass meine Protokollgruppe /aws/lambda/wavToMp3 und der Protokolldatenstrom 2016/05/23/[$LATEST]hex_code_redacted ist. Ich habe diese Gruppe und diesen Stream in CloudWatch erstellt, es wird jedoch nichts darauf protokolliert.

38
ffxsam

Damit die Lambda-Funktion einen Log-Stream erstellen und Protokolle in Cloudwatch veröffentlichen kann, muss die Lambda-Ausführungsrolle die folgenden Berechtigungen haben.

{
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                 "logs:CreateLogStream",
                 "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
} 

Weitere Informationen finden Sie in der folgenden AWS-Dokumentation http://docs.aws.Amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role

66
Shibashis

Nachdem Sie Ihre Richtlinie aktualisiert haben, müssen Sie anscheinend die Einstellungen Ihrer Funktion aktualisieren, um alle Jobinstanzen zu aktualisieren, um neue Richtlinien zu lesen. 

Wenn Sie also in der Lambda-Konsole einfach auf die Schaltfläche "Test" klicken, nachdem Sie Ihre Rollenrichtlinie in IAM aktualisiert haben, verfügen die zwischengespeicherten Lambda-Instanzen weiterhin über alte Rollenberechtigungen, so dass weiterhin keine Protokolle in die Cloudwatch-Protokolle geschrieben werden. 

Ändern Sie einfach Ihr Timeout um eine Sekunde und klicken Sie auf die Schaltfläche "Speichern und Testen". Jetzt werden Protokolle in Cloudwatch angezeigt.

95
hoonoh

Damit die Lambda-Funktion einen Log-Stream erstellen und Protokolle in Cloudwatch veröffentlichen kann, muss die Lambda-Ausführungsrolle die folgenden Berechtigungen haben

Ich hatte diese Berechtigungen bereits, aber es funktionierte nicht.

Ändern Sie einfach Ihr Timeout um eine Sekunde und klicken Sie auf die Schaltfläche "Speichern und Testen". Jetzt werden Protokolle in Cloudwatch angezeigt.

Ich habe das Timeout geändert, gespeichert und die Protokolle funktionierten immer noch nicht.

Ich habe eine andere Rolle zugewiesen und Protokolle funktionierten immer noch nicht. 

Was am Ende für mich gearbeitet hat, war "Anlegen einer benutzerdefinierten Rolle" und dann "Zulassen". Dies war es und es wurden Protokolle erstellt, aber da ich keine neue Rolle verwenden wollte, sondern meine vorhandene Rolle, habe ich einfach meine vorhandene Rolle zugewiesen und es hat funktioniert. Technisch gesehen hätte ich zur ursprünglichen Konfiguration zurückkehren sollen, die nicht funktioniert hat, aber jetzt funktioniert es. Stelle dir das vor.

12
tomusiaka

Anscheinend ist eine weitere Notwendigkeit für die Protokollierung, dass die Lambda-Funktion den Abschluss anzeigen muss. Zum Beispiel muss der Handler im Python-Kontext etwas anderes als None zurückgeben.

3
Vic

Stellen Sie sicher, dass Sie den vollständigen Pfad Ihrer "Vorhandenen Rolle" in Ihrer Lambda-Funktion "Konfiguration" haben:

Rolle: Wählen Sie eine vorhandene Rolle aus Vorhandene Rolle: Dienstrolle/IhrRollenname

Aus irgendeinem Grund funktioniert die Eingabe nur yourRoleName 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).

Das Problem bestand darin, dass ich versucht habe, eine Protokollgruppe im Cloudformations-Skript zu erstellen, indem: AWS :: Logs :: LogGroup. : P Novice Nach eingehender Lektüre stellte ich fest, dass Lambda ein eigenes Protokoll mit dem oben genannten Format erstellt: /aws/lambda/Wir müssen dieser Richtliniengruppe nur eine Richtlinienberechtigung erteilen, oder eine generische Berechtigung mit der Ressource: arn: aws: logs ::: *

hoffe das hilft

0

Wie in anderen Antworten angegeben, müssen Sie Lambda die Erlaubnis geben, Protokolle in Cloud-Überwachungsprotokollen zu veröffentlichen. Dafür hatte AWS AWSLambdaExecute Richtlinien bereitgestellt. Es ist Json -

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Sie können diese Richtlinie in 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.

0
Aniket Thakur

Es könnte bereits protokollieren, wir konnten die erwarteten Protokolle einfach nicht finden ...

z.B.

app.use(function simpleLogger (req, res, next) {
  console.info('[Logger]', req.method, req.originalUrl)
  next()
})

Nach dem Ausführen von GET /hello?world=1

Lokale Konsole: (einfach und klar, Nizza!)

[Logger] GET /hello?world=1

CloudWatch-Protokolle: (finden Sie unten das genaue Protokoll)?

START RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0 Version: $LATEST
2018-12-04T09:26:11.236Z  a3552c34-f7a6-11e8-90ba-2fb886f31fb0  [Logger] GET /hello?world=1
END RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0
REPORT RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0  Duration: 41.02 ms  Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 29 MB

Fazit: zu ausführlich, um die ursprünglichen Protokolle zu finden.

0
Ken Berkeley

CloudWatch & CloudWatch Logs sind unterschiedliche Berechtigungen. Sie müssen CloudWatch Logs zu der Richtlinie hinzufügen, die Ihrer Rolle zugeordnet ist.

0
Sherry Li

Es gibt eine Beschreibung namens Überwachen von AWS Lambda mit CloudWatch mit einem Abschnitt über "Verwenden von CloudWatch-Protokollen mit Lambda". Sieht so aus, als hätten Sie Ihre Antwort bereits gefunden, aber für alle, die keine IAM-spezifischen Probleme haben, kann dies hilfreich sein.

0
mbarlocker

Vielleicht ein bisschen spät, aber für diejenigen, die immer noch Schwierigkeiten haben, die Lambda-Protokolle in Cloudwatch zu sehen. Ich habe dies in Bezug auf die Ausführungsrolle der Lambda-Funktion bemerkt: "Sie können eine vorhandene Rolle mit dieser Funktion verwenden. Beachten Sie, dass die Rolle von Lambda übernommen werden muss und über Cloudwatch-Protokollberechtigungen verfügt." Also habe ich in IAM der Rolle, die ich meiner Funktion zugewiesen habe, "CloudWatchLogsFullAccess" erteilt. In Cloudwatch werden unter Protokolle die Protokolle für die Funktionen angezeigt, denen diese Rolle zugewiesen ist.

0
Clive Sargeant

Ich bin auf dieses Problem gestoßen, aber keine der obigen Antworten hat mein Problem gelöst. Es stellte sich heraus, dass die Region irgendwie in Ohio lag, als ich CloudWatch zum ersten Mal startete. Nachdem ich es in US-Ost (N. Virginia) geändert habe, funktioniert alles gut.

0
xfx