New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Wie erstelle ich eine EventBridge-Regel, die den Eingangstransformator verwendet, um eine Amazon-SNS-Benachrichtigung für Menschen lesbar zu machen?
Ich möchte eine Amazon-EventBridge-Regel erstellen, um eine benutzerdefinierte Amazon Simple Notification Service (Amazon SNS)-Benachrichtigung zu initiieren, die für Menschen lesbar ist.
Kurzbeschreibung
Um Amazon-SNS-Ereignisbenachrichtigungen für Menschen lesbar zu machen, verwende den Eingabe-Transformer in EventBridge. Der Eingabe-Transformer kann Text aus einem Ereignis anpassen, bevor er an das Ziel einer EventBridge-Regel gesendet wird. Weitere Informationen findest du im Tutorial: Verwendung von Eingabe-Transformern, um Ereignisse in EventBridge zu transformieren
Du kannst ein SNS-Thema als Ziel konfigurieren, um benutzerdefinierten Ereignistext vom Eingabe-Transformer zu empfangen. Du kannst auch eine EventBridge-Regel erstellen, die den API-Aufrufen im Zusammenhang mit Sicherheitsgruppen entspricht, die von AWS CloudTrail erfasst werden. Die Regel ist mit einem Ereignismuster konfiguriert, das zu den entsprechenden API-Aufrufen passt.
Die folgende Lösung enthält zwei Beispielereignisse, mit denen du deine eigene EventBridge-Regel erstellen kannst, um eine Amazon-SNS-Benachrichtigung für Menschen lesbar zu machen.
Lösung
Beispielereignis für die Änderung des Amazon-EC2-Status
Im folgenden Beispiel wird ein SNS-Thema als Ziel konfiguriert, das benutzerdefinierten Ereignistext vom Eingabe-Transformer empfängt. Beim Ereignis handelt es sich um eine Statusänderung von Amazon Elastic Compute Cloud (Amazon EC2), die im JSON-Format auf dem EventBridge-Event Bus veröffentlicht wird:
{ "version": "0", "id": "2ad63080-2526-d42c-4983-123456789", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "0123456789", "time": "2023-05-17T16:30:32Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:0123456789:instance/i-12345abcdefg" ], "detail": { "instance-id": "i-12345abcdefg", "state": "running" } }
Der Eingabe-Transformer hat die folgenden Abschnitte:
- Eingabepfad: Hier definierst du Variablen, die einen JSON-Pfad verwenden, um auf Werte in der ursprünglichen Ereignisquelle zu verweisen.
- **Vorlage:**Eine Vorlage für die Informationen, die du an dein Ziel weitergeben möchtest.
Eingabepfad
Informationen zum Erstellen eines Eingabepfads findest du unter Beispiele für Eingangstransformationen. Verwende für dieses Beispiel den folgenden Eingabepfad:
{ "timestamp": "$.time", "instance": "$.detail.instance-id", "state": "$.detail.state" }
Vorlagen
Verwende für dieses Beispiel die folgenden Vorlagen.
Beispiel 1:
"Instance <instance> is in <state> state"
Beispiel 2:
"At <timestamp>, Instance <instance> changed its state to <state>. "
Die obigen Beispielvorlagen senden Nachrichten im folgenden Format an das Ziel.
Beispiel 1:
"Instance i-12345abcdefg is in running state"
Beispiel 2:
"At 2023-05-17T16:30:32Z, Instance i-12345abcdefg changed its state to running. "
EventBridge für die Verwendung des Eingangstransformators konfigurieren
Gehe wie folgt vor, um EventBridge so zu konfigurieren, dass benutzerdefinierte Nachrichten an ein SNS-Thema gesendet werden:
Hinweis: Diese Anweisungen befolgen die Schritte zur Konfiguration des Eingabe-Transformers unter Erstellen von Regeln, die auf Ereignisse in Amazon EventBridge reagieren.
-
Definiere eine EventBridge-Regel für Amazon-EC2-Statusänderungsereignisse.
-
Erstelle das Ereignismuster. Wähle im Abschnitt zur Methode der Erstellung für Methode die Option Benutzerdefiniertes Muster (JSON-Editor) aus.
-
Gib für Ereignismuster das folgende JSON-Beispiel für Amazon EC2-Zustandsänderungsereignisse ein:
{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }
-
Wähle Nächster Schritt aus.
-
Wähle als Zieltypen den AWS-Service aus.
-
Wähle unter Ein Ziel auswählen die Option SNS-Thema aus. Wähle dann dein Thema aus der Dropdown-Liste aus.
-
Wähle für Zusätzliche Einstellungen in der Dropdown-Liste Zieleingabe konfigurieren die Option Eingabe-Transformer aus. Wähle dann Eingabe-Transformer konfigurieren aus.
-
Kopiere im Abschnitt Zieleingabe-Transformer für Eingabepfad den folgenden JSON-Code und füge ihn ein:
{ "timestamp": "$.time", "instance": "$.detail.instance-id", "state": "$.detail.state" }
-
Kopiere für Eingabe-Vorlage die folgenden Zeichenkettenvorlagen und füge sie ein:
"Instance <instance> is in <state> state" "At <timestamp>, Instance <instance> changed its state to <state>. "
-
Wähle Bestätigen und dann Nächster Schritt aus.
-
(Optional) Füge deiner Regel Tags hinzu und wähle dann Nächster Schritt aus.
-
Überprüfe die Details der Regel und wähle dann Regel erstellen aus.
Beispielereignis für den API-Aufruf einer Amazon-EC2-Sicherheitsgruppe
Verwende im folgenden Beispielereignis CreateSecurityGroup in einer Virtual Private Cloud (VPC), um eine Sicherheitsgruppe zu erstellen. CloudTrail erfasst das Ereignis, und das Ereignis wird im folgenden JSON-Format auf CloudWatch veröffentlicht:
{ "version": "0", "id": "41dff147-cfbc-492a-9a98-9dd00d082417", "detail-type": "AWS API Call via CloudTrail", "source": "aws.ec2", "account": "123456789012", "time": "2017-07-14T16:36:23Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "1.05", "userIdentity": { "type": "Root", "principalId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "accountId": "123456789012", "accessKeyId": "ASIAIRP4G1234567891Q", "userName": "iamuser", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2017-07-14T16:27:38Z" } } }, "eventTime": "2017-07-14T16:36:23Z", "eventSource": "ec2.amazonaws.com", "eventName": "CreateSecurityGroup", "awsRegion": "us-east-1", "sourceIPAddress": "72.21.196.64", "userAgent": "console.ec2.amazonaws.com", "requestParameters": { "groupName": "test", "groupDescription": "test", "vpcId": "vpc-54a4232d" }, "responseElements": { "_return": true, "groupId": "sg-82d531f3" }, "requestID": "a4609e55-69ac-4a2d-8057-843dc8b4658b", "eventID": "7774b898-59c1-48a5-9c41-af1bcaa04612", "eventType": "AwsApiCall" } }
Beispiel für die Erstellung einer benutzerdefinierten, für Menschen lesbaren Benachrichtigung
Verwende das folgende Beispiel, um benutzerdefinierte, für Menschen lesbare Benachrichtigungen von EventBridge im JSON-Format zu erstellen.
-
Erstelle eine EventBridge-Regel für API-Aufrufe im Zusammenhang mit Sicherheitsgruppen. Wähle für Ereignismuster die Option Benutzerdefiniertes Ereignismuster erstellen aus. Ändere das Beispielereignismuster für deinen Anwendungsfall. Beachte, dass die Beispielbenachrichtigung für CreateSecurityGroup gilt. Das folgende Beispielereignismuster umfasst jedoch alle API-Aufrufaktionen, die sich auf Sicherheitsgruppen beziehen:
{ "source": [ "aws.ec2" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "ec2.amazonaws.com" ], "eventName": [ "CreateSecurityGroup", "AuthorizeSecurityGroupEgress", "AuthorizeSecurityGroupIngress", "DeleteSecurityGroup", "RevokeSecurityGroupEgress", "RevokeSecurityGroupIngress", "DescribeStaleSecurityGroups", "DescribeSecurityGroups", "DescribeSecurityGroupReferences" ] } }
-
Wähle als Zieltypen den AWS-Service aus.
-
Wähle unter Ein Ziel auswählen die Option SNS-Thema aus. Wähle dann dein Thema aus der Dropdown-Liste aus.
-
Wähle für Zusätzliche Einstellungen in der Dropdown-Liste Zieleingabe konfigurieren die Option Eingabe-Transformer aus. Wähle dann Eingabe-Transformer konfigurieren aus.
-
Füge im Abschnitt Zieleingabe-Transformer für Eingabepfad den folgenden JSON-Code ein. Füge alle Schlüssel-Wert-Paare hinzu, die du in der Benachrichtigung verwenden möchtest. Ändere den folgenden Beispieleingabepfad für deinen Anwendungsfall:
{ "sgname": "$.detail.requestParameters.groupName", "sourceip": "$.detail.sourceIPAddress", "vpcid": "$.detail.requestParameters.vpcId", "action": "$.detail.eventName", "sgid": "$.detail.responseElements.groupId", "time": "$.detail.eventTime", "region": "$.detail.awsRegion", "user": "$.detail.userIdentity.userName", "reqid": "$.detail.requestID" }
-
Füge für Eingabe-Vorlage die folgenden Zeichenkettenvorlagen ein. Füge eine Zeichenfolge mit Platzhaltern für Werte aus dem Eingabepfad ein. Diese Zeichenfolge ist der für Menschen lesbare Text deiner Benachrichtigung. Ändere die folgende Beispieleingabevorlage für deinen Anwendungsfall:
"User <user> has executed API call <action> from source IP <sourceip> on security group <sgid>/<sgname> that belongs to vpc <vpcid> in region <region> at time(UTC) <time>. The Request ID is <reqid>."
-
Wähle Bestätigen und dann Nächster Schritt aus.
-
(Optional) Füge deiner Regel Tags hinzu und wähle dann Nächster Schritt aus.
-
Überprüfe die Details der Regel und wähle dann Regel erstellen aus.
Problembehandlung
Wenn du beim Speichern einer Vorlage mit Zeilenumbrüchen die Fehlermeldung Invalid InputTemplate erhältst, schließe jede Zeile mit doppelten Anführungszeichen. Siehe folgende Beispiele:
"<type> <arn> has executed action API <action> on Security Group <sgid> located in AWS region <region> at <time> (UTC)." "Request ID: <requestid>" "Event ID: <eventid>" "Event Source: <eventsource>" "Event Type: <eventtype>"
Wenn die Regel ausgeführt wird, das Ziel aber nicht aufrufen kann, konfiguriere eine Warteschlange für unzustellbare Nachrichten, damit EventBridge Fehler empfängt, die sich auf den Eingabe-Transformer beziehen.
EventBridge unterstützt maximal 100 Variablen in Eingabepfadzuordnungen. Um mehr als 10 Variablen zu extrahieren, übergib das gesamte Ereignis an eine AWS-Lambda-Funktion. Schreibe diese Funktion, um deine Variablen zu analysieren und einen Nachrichtentext im für die Veröffentlichung erforderlichen Format zu erstellen. Erstelle dann einen Nachrichtentext im erforderlichen Format für die Veröffentlichung in Amazon SNS. Weitere Informationen findest du unter Wie kann ich mithilfe einer Lambda-Funktion eine Nachricht zu einem Amazon-SNS-Thema veröffentlichen?

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 3 Monaten
- AWS OFFICIALAktualisiert vor 3 Monaten