Fehlerbehebung bei CloudWatch Events - Amazon CloudWatch Events
Meine Regel wurde ausgelöst, aber meine Lambda-Funktion nicht aufgerufenIch habe gerade eine Regel erstellt/bearbeitet, sie stimmt aber nicht mit einem Testereignis übereinMeine Regel hat sich zu dem in ScheduleExpression angegebenen Zeitpunkt nicht selbst ausgelöstMeine Regel wurde nicht zum erwarteten Zeitpunkt ausgelöstMeine Regel stimmt zwar mit &IAM;-API-Aufrufen überein, die Regel wurde aber nicht ausgelöstMeine Regel funktioniert nicht, da die mit der Regel verknüpfte &IAM;-Rolle beim Auslösen der Regel ignoriert wirdIch habe eine Regel mit einem Ereignismuster erstellt, das mit einer Ressource übereinstimmen sollte, sehe jedoch keine Ereignisse, die mit der Regel übereinstimmenMein Ereignis wurde am Ziel verzögert bereitgestelltEinige Ereignisse wurden nie in mein Ziel ausgeliefertMeine Regel wurde als Antwort auf ein Ereignis mehr als einmal ausgelöst. Welche Garantie bietet CloudWatch Events für das Auslösen von Regeln oder die Übermittlung von Ereignissen an das Ziel?Verhindern von EndlosschleifenMeine Ereignisse werden nicht in die Amazon SQS-Zielwarteschlange ausgeliefertMeine Regel wird ausgelöst, aber mir werden keine im Amazon SNS-Thema veröffentlichten Nachrichten angezeigtMein Amazon SNS-Thema besitzt nach wie vor Berechtigungen für CloudWatch Events, auch nachdem ich die mit dem Amazon SNS-Thema verknüpfte Regel gelöscht habeWelche IAM-Bedingungsschlüssel kann ich bei CloudWatch Events verwenden?Wie kann ich feststellen, ob CloudWatch Events-Regeln nicht eingehalten werden?

Fehlerbehebung bei CloudWatch Events

Anmerkung

Amazon EventBridge ist die bevorzugte Methode zum Verwalten Ihrer Ereignisse. CloudWatch Events und EventBridge liegen der gleiche Service und die gleiche API zugrunde, EventBridge bietet jedoch mehr Funktionen. Änderungen, die Sie in CloudWatch oder EventBridge vornehmen, werden in jeder Konsole angezeigt. Weitere Informationen finden Sie unter Amazon EventBridge.

Mit den in diesem Abschnitt beschriebenen Schritten können Sie Probleme mit CloudWatch Events beheben.

Themen

Meine Regel wurde ausgelöst, aber meine Lambda-Funktion nicht aufgerufen

Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen zur Einstellung der Lambda-Funktion verfügen. Führen Sie den folgenden Befehl ausAWS CLI (ersetzen Sie den Funktionsnamen durch Ihre Funktion und verwenden Sie die AWSRegion, in der sich Ihre Funktion befindet):

aws lambda get-policy --function-name MyFunction --region us-east-1

Die Ausgabe sollte folgendermaßen oder ähnlich aussehen:

{ "Policy": "{\"Version\":\"2012-10-17\", \"Statement\":[ {\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:us-east-1:123456789012:rule/MyRule\"}}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:MyFunction\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Sid\":\"MyId\"} ], \"Id\":\"default\"}" }

Wenn Ihnen folgendes angezeigt wird:

A client error (ResourceNotFoundException) occurred when calling the GetPolicy operation: The resource you requested does not exist.

Oder wenn Ihnen die Ausgabe zwar angezeigt wird, Sie aber events.amazonaws.com nicht als vertrauenswürdige Entität in der Richtlinie finden können, führen Sie den folgenden Befehl aus:

aws lambda add-permission \ --function-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule
Anmerkung

Wenn die Richtlinie nicht korrekt ist, können Sie die Regel auch in der CloudWatch Events-Konsole bearbeiten, indem Sie die Richtlinie entfernen und anschließend der Regel wieder hinzufügen. Die CloudWatch Events-Konsole legt die richtigen Berechtigungen auf dem Ziel fest.

Wenn Sie einen bestimmten Lambda-Alias oder eine spezielle Version verwenden, müssen Sie die --qualifier-Parameter in den Befehlen aws lambda get-policy und aws lambda add-permission hinzufügen.

aws lambda add-permission \ --function-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule --qualifier alias or version

Ein weiterer Grund, warum die Lambda-Funktion möglicherweise nicht ausgelöst wird, könnte darin bestehen, dass die Richtlinie, die Ihnen bei der Ausführung von get-policy angezeigt wird, ein SourceAccount-Feld enthält. Eine SourceAccount-Einstellung verhindert, dass CloudWatch Events die Funktion aufrufen können.

Ich habe gerade eine Regel erstellt/bearbeitet, sie stimmt aber nicht mit einem Testereignis überein

Wenn Sie an einer Regel oder deren Zielen Änderungen vornehmen, stimmen die Einstellungen der eingehenden Ereignisse möglicherweise nicht sofort mit den aktualisierten Regeln überein. Warten Sie einen Augenblick, bis die Änderungen wirksam werden. Stimmen die Ereignisse nach dieser Zeit immer noch nicht überein, können Sie zum weiteren Debugging in auch mehrere CloudWatch-Metriken für die Regel prüfen wie z. B. TriggeredRules, Invocations und FailedInvocations. Weitere Informationen zu diesen Metriken finden Sie unter Amazon CloudWatch Events-Metriken veröffentlichen im Amazon CloudWatch-Benutzerhandbuch.

Wenn die Regel von einem Ereignis aus einem AWS-Service ausgelöst wird, können Sie auch die Aktion TestEventPattern verwenden, um mit einem Testereignis das Ereignismuster der Regel zu testen und sicherzustellen, dass das Ereignismuster der Regel korrekt eingestellt ist. Weitere Informationen finden Sie unterTestEventPatternin derAPI-Referenz für Amazon CloudWatch Eventsaus.

Meine Regel hat sich zu dem in ScheduleExpression angegebenen Zeitpunkt nicht selbst ausgelöst

Die Zeitangaben in ScheduleExpressions basieren auf der koordinierten Weltzeit (UTC). Stellen Sie sicher, dass Sie den Zeitplan für die Selbstauslösung der Regel auf UTC-Zeitzone eingestellt haben. Wenn ScheduleExpression korrekt ist, befolgen Sie die Schritte unter Ich habe gerade eine Regel erstellt/bearbeitet, sie stimmt aber nicht mit einem Testereignis überein.

Meine Regel wurde nicht zum erwarteten Zeitpunkt ausgelöst

Wenn Sie eine Regel zur Ausführung in jedem Zeitraum erstellen, unterstützt CloudWatch Events das Festlegen einer exakten Startzeit nicht. Der Countdown beginnt zu laufen, sobald Sie die Regel erstellen.

Sie können einen Cron-Ausdruck verwenden, um Ziele zu einem bestimmten Zeitpunkt aufzurufen. Sie können beispielsweise einen Cron-Ausdruck zum Erstellen einer Regel verwenden, die alle 4 Stunden exakt bei Minute 0 ausgelöst wird. In der CloudWatch-Konsole verwenden Sie den Cron-Ausdruck 0 0/4 * * ? * und mit der AWS CLI den Cron-Ausdruck cron(0 0/4 * * ? *). Wenn Sie beispielsweise eine Regel namens TestRule erstellen, die alle 4 Stunden mit der AWS CLI ausgelöst wird, geben Sie bei der Eingabeaufforderung Folgendes ein:

aws events put-rule --name TestRule --schedule-expression 'cron(0 0/4 * * ? *)'

Sie können den Cron-Ausdruck 0/5 * * * ? * verwenden, um eine Regel nach 5 Minuten auszulösen. Beispiel:

aws events put-rule --name TestRule --schedule-expression 'cron(0/5 * * * ? *)'

CloudWatch Events stellt in Planungsausdrücken keine Präzision der zweiten Ebene bereit. Die feinste Zeitauflösung bei Verwendung eines Cron-Ausdrucks ist eine Minute. Aufgrund der verteilten Struktur der CloudWatch Events- und Ziel-Services kann die Verzögerung zwischen dem Zeitpunkt, an dem die geplante Regel ausgelöst wird, und dem Zeitpunkt, an dem der Ziel-Service die Ziel-Ressource ausführt, einige Sekunden betragen. Die geplante Regel wird innerhalb der angegebenen Minute ausgelöst, aber nicht exakt in der 0. Sekunde.

Meine Regel stimmt zwar mit &IAM;-API-Aufrufen überein, die Regel wurde aber nicht ausgelöst

Der IAM-Service ist nur in der Region USA Osten (N. Virginia) verfügbar, daher stehen auch alle AWSAPI-Aufrufereignisse von IAM nur in dieser Region zur Verfügung. Weitere Informationen finden Sie unter Beispiele für CloudWatch Events aus unterstützten Services.

Meine Regel funktioniert nicht, da die mit der Regel verknüpfte &IAM;-Rolle beim Auslösen der Regel ignoriert wird

IAM-Rollen für Regeln werden nur für in Zusammenhang mit Kinesis-Streams stehende Ereignisse verwendet. Für Lambda-Funktionen und Amazon SNS-Themen müssen Sie ressourcenbasierte Berechtigungen erteilen.

Stellen Sie sicher, dass die regionalen AWS STS Endpunkte aktiviert sind. Bei Übernahme der von Ihnen bereitgestellten IAM-Rolle kommuniziert CloudWatch Events mit den regionalen AWS STS-Endpunkten. Weitere Informationen finden Sie unter AWS STS in einer AWS-Region aktivieren und deaktivieren im IAM-Benutzerhandbuch.

Ich habe eine Regel mit einem Ereignismuster erstellt, das mit einer Ressource übereinstimmen sollte, sehe jedoch keine Ereignisse, die mit der Regel übereinstimmen

Die meisten Services in AWSbehandeln den Doppelpunkt (:) oder Schrägstrich (/) in Amazon-Ressourcennamen (ARNs) als genau dieses Zeichen. CloudWatch Events arbeitet jedoch mit einer genauen Übereinstimmung der Ereignismuster und -regeln. Verwenden Sie also die richtigen ARN-Zeichen zum Erstellen von Ereignismustern, sodass sie mit der ARN-Syntax in dem Ereignis übereinstimmen.

Darüber hinaus wird nicht bei jedem Ereignis das Ressourcenfeld ausgefüllt (z. B. AWS API-Aufrufereignisse aus CloudTrail).

Mein Ereignis wurde am Ziel verzögert bereitgestellt

CloudWatch Events versucht, ein Ereignis bis zu 24 Stunden für ein Ziel bereitzustellen, außer in Szenarien, in denen Ihre Zielressource eingeschränkt ist. Der erste Versuch erfolgt, sobald das Ereignis im Ereignis-Stream eintrifft. Wenn beim Ziel-Service jedoch Problem auftreten, plant CloudWatch Events automatisch eine weitere Bereitstellung in der Zukunft. Sind nach dem Eintreffen des Ereignisses 24 Stunden vergangen, werden keine weiteren Versuche mehr geplant und die Metrik FailedInvocations wird in CloudWatch veröffentlicht. Wir empfehlen, dass Sie für die Metrik FailedInvocations einen CloudWatch-Alarm erstellen.

Einige Ereignisse wurden nie in mein Ziel ausgeliefert

Wenn ein Ziel einer CloudWatch Events-Regel für eine längere Zeit eingeschränkt ist, versucht CloudWatch Events möglicherweise keine wiederholte Bereitstellung. Wenn das Ziel beispielsweise nicht darauf ausgelegt ist, den eingehenden Ereignisdatenverkehr zu verarbeiten, und der Zielservice Anforderungen einschränkt, die CloudWatch Events für Sie ausführt, versucht CloudWatch Events möglicherweise keine wiederholte Bereitstellung.

Meine Regel wurde als Antwort auf ein Ereignis mehr als einmal ausgelöst. Welche Garantie bietet CloudWatch Events für das Auslösen von Regeln oder die Übermittlung von Ereignissen an das Ziel?

In seltenen Fällen kann die gleiche Regel mehr als einmal für ein einzelnes Ereignis oder eine geplante Zeit ausgelöst werden, oder dasselbe Ziel kann für eine bestimmte ausgelöste Regel mehr als einmal aufgerufen werden.

Verhindern von Endlosschleifen

In CloudWatch Events ist die Erstellung von Regeln möglich, die zu Endlosschleifen führen. Bei diesen Schleifen wird eine Regel wiederholt ausgelöst. Eine Regel kann beispielsweise erkennen, dass sich ACLs in einem S3-Bucket geändert haben, und Software auslösen, die sie in den gewünschten Zustand ändern. Ist die Regel nicht sorgfältig geschrieben, löst die anschließende Änderung der ACLs die Regel erneut aus, wodurch eine Endlosschleife entsteht.

Um dies zu verhindern, schreiben Sie die Regeln so, dass die ausgelösten Aktionen nicht erneut die gleiche Regel auslösen. Beispielsweise können Sie die Regel nur auslösen lassen, wenn ACLs in einem schlechten Zustand erkannt werden, anstatt nach jeder Änderung.

Eine Endlosschleife kann schnell höhere Gebühren als erwartet verursachen. Wir empfehlen Ihnen, die Budgetierung zu verwenden, über die Sie benachrichtigt werden, wenn die Gebühren das von Ihnen angegebene Kontingent überschreiten. Weitere Informationen finden Sie unter Verwalten der Kosten mit Budgets.

Meine Ereignisse werden nicht in die Amazon SQS-Zielwarteschlange ausgeliefert

Die Amazon SQS-Warteschlange kann verschlüsselt werden. Wenn Sie eine Regel mit einer verschlüsselten Amazon SQS-Warteschlange als Ziel erstellen, muss der folgende Abschnitt in Ihrer KMS-Schlüsselrichtlinie enthalten sein, damit das Ereignis erfolgreich an die verschlüsselte Warteschlange übermittelt werden kann.

{ "Sid": "Allow CWE to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

Meine Regel wird ausgelöst, aber mir werden keine im Amazon SNS-Thema veröffentlichten Nachrichten angezeigt

Stellen Sie sicher, dass Sie für das Amazon SNS-Thema die richtigen Berechtigungen festgelegt haben. Führen Sie mit AWS CLI den folgenden Befehl aus (ersetzen Sie den Thema-ARN durch Ihr Thema und verwenden Sie die AWS-Region, in der sich Ihr Thema befindet):

aws sns get-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic"

Die angezeigten Richtlinienattribute sollten wie folgt aussehen:

"{\"Version\":\"2012-10-17\", \"Id\":\"__default_policy_ID\", \"Statement\":[{\"Sid\":\"__default_statement_ID\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"*\"}, \"Action\":[\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\", \"SNS:DeleteTopic\", \"SNS:GetTopicAttributes\", \"SNS:Publish\", \"SNS:RemovePermission\", \"SNS:AddPermission\", \"SNS:Receive\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}},{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}]}"

Wenn Ihnen eine Richtlinie ähnlich der folgenden angezeigt wird, haben Sie nur die Standard-Richtlinien festgelegt:

"{\"Version\":\"2008-10-17\", \"Id\":\"__default_policy_ID\", \"Statement\":[{\"Sid\":\"__default_statement_ID\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"*\"}, \"Action\":[\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\", \"SNS:DeleteTopic\", \"SNS:GetTopicAttributes\", \"SNS:Publish\", \"SNS:RemovePermission\", \"SNS:AddPermission\", \"SNS:Receive\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}}]}"

Wenn Ihnen in Ihrer Richtlinie events.amazonaws.com nicht mit der Publish-Berechtigung angezeigt wird, verwenden Sie die AWS CLI, um das Richtlinienattribut für das Thema festzulegen.

Kopieren Sie die aktuelle Richtlinie, und fügen Sie die folgende Anweisung der Anweisungsliste hinzu:

{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}

Die neue Richtlinie sollte wie die oben beschriebene aussehen.

Legen Sie die Themenattribute mit der fest AWS CLI:

aws sns set-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic" --attribute-name Policy --attribute-value NEW_POLICY_STRING
Anmerkung

Wenn die Richtlinie nicht korrekt ist, können Sie die Regel auch in der CloudWatch Events-Konsole bearbeiten, indem Sie die Richtlinie entfernen und anschließend der Regel wieder hinzufügen. CloudWatch Events legt die richtigen Berechtigungen für das Ziel fest.

Mein Amazon SNS-Thema besitzt nach wie vor Berechtigungen für CloudWatch Events, auch nachdem ich die mit dem Amazon SNS-Thema verknüpfte Regel gelöscht habe

Wenn Sie eine Regel mit Amazon SNS als Ziel erstellen, fügt CloudWatch Events in Ihrem Namen die Berechtigung Ihrem Amazon SNS-Thema hinzu. Wenn Sie die Regel kurz nach ihrer Erstellung löschen, kann CloudWatch Events die Berechtigung möglicherweise nicht aus Ihrem Amazon SNS-Thema entfernen. Wenn dies geschieht, können Sie die Berechtigung von dem Thema mithilfe des Befehls Amazon SNS set-topic-attributes entfernen.

Welche IAM-Bedingungsschlüssel kann ich bei CloudWatch Events verwenden?

CloudWatch Events unterstützt die AWS-weiten Bedingungsschlüssel (siehe Verfügbare Schlüssel im IAM Benutzerhandbuch), sowie die folgenden servicespezifischen Bedingungsschlüssel.

Wie kann ich feststellen, ob CloudWatch Events-Regeln nicht eingehalten werden?

Sie können den folgenden Alarm verwenden, um benachrichtigt zu werden, wenn Ihre CloudWatch Events-Regeln nicht eingehalten werden.

Um einen Alarm zu erstellen, der warnt, wenn Regeln nicht eingehalten werden,
  1. Öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/.

  2. Wählen Sie Create Alarm aus. Wählen Sie im Fenster CloudWatch Metrics by Category die Option Events Metrics aus.

  3. Wählen Sie in der Liste der Metriken FailedInvocations aus.

  4. Wählen Sie über dem Diagramm Statistic und Sum aus.

  5. Wählen Sie einen Wert für Period aus, z. B. 5 Minuten. Wählen Sie Next.

  6. Geben Sie unter Alarm Threshold für Name einen eindeutigen Namen für den Alarm ein, z. B. myFailedRules. Geben Sie für Description eine Beschreibung des Alarms ein. Beispiel: Regeln übermitteln keine Ereignisse an das Ziel.

  7. Wählen Sie für is die Option >= und 1 aus. Geben Sie für for die Option 10 ein.

  8. Wählen Sie unter Actionsfür Whenever this alarm die Option State is ALARM aus.

  9. Wählen Sie für Send notification to (Benachrichtigung senden an) ein vorhandenes Amazon SNS-Thema aus oder erstellen Sie ein neues. Um ein neues Thema zu erstellen, wählen Sie New list aus. Geben Sie einen Namen für das neue Amazon SNS-Thema ein, z. B.: myFailedRules.

  10. Geben Sie für Email list (E-Mail-Liste) eine durch Kommata getrennte Liste der E-Mail-Adressen ein, die benachrichtigt werden sollen, wenn der Alarm in den Status ALARM versetzt wird.

  11. Wählen Sie Create Alarm aus.