Senden von Lambda-Funktionsprotokollen an Amazon S3 - AWS Lambda

Senden von Lambda-Funktionsprotokollen an Amazon S3

Sie können Ihre Lambda-Funktion so konfigurieren, dass Protokolle mithilfe der Lambda-Konsole direkt an Amazon S3 gesendet werden. Dieses Feature bietet eine kostengünstige Lösung für die langfristige Speicherung von Protokollen und ermöglicht leistungsstarke Analyseoptionen mithilfe von Services wie Athena.

Anmerkung

Sie können Lambda-Funktionsprotokolle so konfigurieren, dass sie über die Lambda-Konsole, AWS CLI, AWS CloudFormation und alle AWS-SDKs an Amazon S3 gesendet werden.

Preisgestaltung

Informationen zu Preisen finden Sie unter Amazon CloudWatch – Preise.

Erforderliche Berechtigungen für das Amazon-S3-Protokollziel

Wenn Sie die Lambda-Konsole verwenden, um Amazon S3 als Protokollziel Ihrer Funktion zu konfigurieren, benötigen Sie Folgendes:

  1. Die erforderlichen IAM-Berechtigungen für die Verwendung von CloudWatch Logs mit Lambda.

  2. Zu … Einrichten eines CloudWatch-Logs-Abonnementfilters, um Lambda-Funktionsprotokolle an Amazon S3 zu senden. Dieser Filter definiert, welche Protokollereignisse für Ihren Amazon-S3-Bucket bereitgestellt werden.

Einrichten eines CloudWatch-Logs-Abonnementfilters, um Lambda-Funktionsprotokolle an Amazon S3 zu senden

Um Protokolle von CloudWatch Logs an Amazon S3 zu senden, müssen Sie einen Abonnementfilter erstellen. Dieser Filter definiert, welche Protokollereignisse für Ihren Amazon-S3-Bucket bereitgestellt werden. Ihr Amazon-S3-Bucket muss sich in derselben Region befinden wie Ihre Protokollgruppe.

So erstellen Sie einen Abonnementfilter für Amazon S3

  1. Erstellen Sie einen Amazon-Simple-Storage-Service-(Amazon S3)-Bucket. Wir empfehlen, dass Sie einen Bucket verwenden, der speziell für CloudWatch Logs erstellt wurde. Wenn Sie jedoch einen vorhandenen Bucket verwenden möchten, gehen Sie direkt zu Schritt 2.

    Führen Sie den folgenden Befehl aus, und ersetzen Sie die Platzhalter-Region mit der Region, die Sie verwenden möchten:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket2 --create-bucket-configuration LocationConstraint=region
    Anmerkung

    amzn-s3-demo-bucket2 ist ein Beispiel für den Namen eines Amazon-S3-Buckets. Er ist reserviert. Damit dieses Verfahren funktioniert, müssen Sie ihn durch den eindeutigen Namen Ihres Amazon-S3-Buckets ersetzen.

    Das Folgende ist Ausgabebeispiel:

    { "Location": "/amzn-s3-demo-bucket2" }
  2. Erstellen Sie die IAM-Rolle, die CloudWatch Logs die Berechtigung erteilt, Daten an Ihren Amazon-S3-Bucket zu senden. Diese Richtlinie enthält einen globalen Bedingungskontextschlüssel vom Typ „aws:SourceArn“, um das Confused-Deputy-Problem zu vermeiden. Weitere Informationen finden Sie unter Confused-Deputy-Prävention.

    1. Verwenden Sie einen Text-Editor zum Erstellen einer Vertrauensrichtlinie in einer Datei ~/TrustPolicyForCWL.json wie folgt:

      { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } }, "Action": "sts:AssumeRole" } }
    2. Verwenden Sie den Befehl create-role, um die IAM-Rolle zu erstellen und die Datei mit der Vertrauensrichtlinie anzugeben. Notieren Sie den zurückgegebenen Wert Role.Arn, da Sie ihn in einem späteren Schritt benötigen:

      aws iam create-role \ --role-name CWLtoS3Role \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoS3Role", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/CWLtoS3Role" } }
  3. Erstellen Sie eine Berechtigungsrichtlinie, um zu definieren, welche Aktionen CloudWatch Logs an Ihrem Konto durchführen darf. Verwenden Sie zunächst einen Text-Editor zum Erstellen einer Berechtigungsrichtlinie in einer Datei ~/PermissionsForCWL.json:

    { "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket2/*"] } ] }

    Verknüpfen Sie die Berechtigungsrichtlinie mit dem folgenden Befehl put-role-policy mit der Rolle:

    aws iam put-role-policy --role-name CWLtoS3Role --policy-name Permissions-Policy-For-S3 --policy-document file://~/PermissionsForCWL.json
  4. Erstellen Sie eine Delivery-Protokollgruppe oder verwenden Sie eine vorhandene Delivery-Protokollgruppe.

    aws logs create-log-group --log-group-name my-logs --log-group-class DELIVERY --region REGION_NAME
  5. PutSubscriptionFilter zum Einrichten des Ziels

    aws logs put-subscription-filter --log-group-name my-logs --filter-name my-lambda-delivery --filter-pattern "" --destination-arn arn:aws:s3:::amzn-s3-demo-bucket2 --role-arn arn:aws:iam::123456789012:role/CWLtoS3Role --region REGION_NAME

Senden von Lambda-Funktionsprotokollen an Amazon S3

In der Lambda-Konsole können Sie Funktionsprotokolle direkt an Amazon S3 senden, nachdem Sie eine neue Funktion erstellt haben. Führen Sie dazu diese Schritte aus:

  1. Melden Sie sich bei der AWS-Managementkonsole an, und öffnen Sie die Lambda-Konsole.

  2. Wählen Sie den Namen Ihrer Funktion.

  3. Wählen Sie die Registerkarte Konfiguration aus.

  4. Wählen Sie die Registerkarte Überwachungs- und Betriebstools aus.

  5. Wählen Sie im Abschnitt „Protokollierungskonfiguration“ die Option Bearbeiten aus.

  6. Wählen Sie im Abschnitt „Protokollinhalt“ ein Protokollformat aus.

  7. Führen Sie im Abschnitt „Protokollziel“ die folgenden Schritte aus:

    1. Wählen Sie einen Zielservice aus.

    2. Wählen Sie Neue Protokollgruppe erstellen oder Vorhandene Protokollgruppe aus.

      Anmerkung

      Wenn Sie eine vorhandene Protokollgruppe für ein Amazon-S3-Ziel auswählen, stellen Sie sicher, dass es sich bei der ausgewählten Protokollgruppe um einen Delivery-Protokollgruppentyp handelt.

    3. Wählen Sie einen Amazon-S3-Bucket als Zielort für Ihre Funktionsprotokolle.

    4. Die Protokollgruppe für CloudWatch Delivery wird angezeigt.

  8. Wählen Sie Speichern.

Anmerkung

Wenn die in der Konsole angegebene IAM-Rolle nicht über die erforderlichen Berechtigungen verfügt, schlägt die Einrichtung des Ziels fehl. Informationen zur Behebung dieses Problems finden Sie unter Erforderliche Berechtigungen für das Amazon-S3-Protokollziel.

Kontoübergreifende Protokollierung

Sie können Lambda so konfigurieren, dass Protokolle in einem anderen AWS-Konto an ein Amazon-S3-Bucket gesendet werden. Dies erfordert die Einrichtung eines Ziels und die Konfiguration der entsprechenden Berechtigungen in beiden Konten.

Detaillierte Anweisungen zur Einrichtung der kontoübergreifenden Protokollierung, einschließlich der erforderlichen IAM-Rollen und -Richtlinien, finden Sie unter Einrichten eines neuen kontoübergreifenden Abonnements in der CloudWatch-Logs-Dokumentation.