Erste Schritte: Erstellen Sie eine Amazon EventBridge Event Bus-Regel - Amazon EventBridge

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erste Schritte: Erstellen Sie eine Amazon EventBridge Event Bus-Regel

Um uns mit EventBridge Regeln und ihren Funktionen vertraut zu machen, verwenden wir eine CloudFormation Vorlage zum Einrichten einer Event-Bus-Regel und der zugehörigen Komponenten, einschließlich einer Ereignisquelle, eines Ereignismusters und eines Ziels. Anschließend können wir untersuchen, wie Regeln funktionieren, um die gewünschten Ereignisse auszuwählen.

Die Vorlage erstellt eine Regel für den Standard-Event-Bus. Diese Regel verwendet ein Ereignismuster, um nach Ereignissen aus einem bestimmten Amazon S3 S3-Bucket zu filtern. Die Regel sendet passende Ereignisse an das angegebene Ziel, ein Amazon SNS SNS-Thema. Jedes Mal, wenn ein Objekt im Bucket erstellt wird, sendet die Regel eine Benachrichtigung an das Thema, das dann eine E-Mail an Ihre angegebene E-Mail-Adresse sendet.

Die bereitgestellten Ressourcen bestehen aus:

  • Ein Amazon S3 S3-Bucket mit aktivierten EventBridge Benachrichtigungen, der als Ereignisquelle fungiert.

  • Ein Amazon SNS SNS-Thema und ein E-Mail-Abonnement als Ziel für Benachrichtigungen.

  • Eine Ausführungsrolle, die EventBridge die erforderlichen Berechtigungen für die Veröffentlichung im Amazon SNS SNS-Thema gewährt.

  • Die Regel selbst, die:

    • Definiert ein Ereignismuster, das nur Object Created Ereignissen aus dem spezifischen Amazon S3 S3-Bucket entspricht.

    • Gibt das Amazon SNS SNS-Thema als Ziel an, an das passende EventBridge Ereignisse gesendet werden.

Spezifische technische Details der Vorlage finden Sie unterDetails zur Vorlage.

Amazon S3 S3-Ereignisse werden dem Ereignismuster der Regel zugeordnet und an ein SNS-Thema gesendet, wenn sie übereinstimmen.

Bevor Sie beginnen

Um Amazon S3-Ereignisse empfangen zu können EventBridge, müssen Sie die Aktivierung EventBridge in Amazon S3 vornehmen. In diesem Thema EventBridge wird davon ausgegangen, dass es aktiviert ist. Weitere Informationen finden Sie unter Enabling EventBridge im Amazon S3 S3-Benutzerhandbuch.

Die Regel erstellen mit CloudFormation

Um die Regel und die zugehörigen Ressourcen zu erstellen, erstellen wir eine CloudFormation Vorlage und verwenden sie, um einen Stack zu erstellen, der eine Beispielregel mit Quelle und Ziel enthält.

Wichtig

Wenn Sie einen Stack anhand dieser Vorlage erstellen, werden Ihnen die verwendeten Amazon-Ressourcen in Rechnung gestellt.

Erstellen Sie zunächst die CloudFormation Vorlage.

  1. Klicken Sie im Abschnitt „Vorlage“ auf das Kopiersymbol auf der Registerkarte JSON oder YAML, um den Inhalt der Vorlage zu kopieren.

  2. Fügen Sie den Inhalt der Vorlage in eine neue Datei ein.

  3. Speichern Sie die Datei lokal.

Verwenden Sie als Nächstes die Vorlage, die Sie gespeichert haben, um einen CloudFormation Stack bereitzustellen.

Erstellen Sie den Stack mit CloudFormation (Konsole)
  1. Öffnen Sie die CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation/.

  2. Auf der Seite Stacks wählen Sie im Menü Stack erstellen die Option Mit neuen Ressourcen (Standard) aus.

  3. Legen Sie die Vorlage fest:

    1. Wählen Sie unter Voraussetzung die Option Vorhandene Vorlage wählen aus.

    2. Wählen Sie unter Vorlage angeben die Option Eine Vorlagendatei hochladen aus.

    3. Klicken Sie auf Datei auswählen, navigieren Sie zur gewünschten Vorlagendatei und wählen Sie diese aus.

    4. Wählen Sie Weiter aus.

  4. Geben Sie die Stack-Details ein:

    1. Geben Sie einen Stack-Namen ein.

    2. Geben Sie für BucketNameeinen weltweit eindeutigen Bucket-Namen ein. Amazon S3 S3-Bucket-Namen müssen für alle AWS Konten eindeutig sein.

    3. Für SNSTopicDisplayName, SNSTopicName und RuleName, akzeptieren Sie die Standardwerte oder geben Sie Ihre eigenen ein.

    4. Geben Sie für EmailAddresseine gültige E-Mail-Adresse ein, an die Sie Benachrichtigungen erhalten möchten.

    5. Wählen Sie Weiter aus.

  5. Konfigurieren Sie die Stack-Optionen:

    1. Wählen Sie unter Optionen für Stack-Fehler die Option Löschen aller neu erstellten Ressourcen aus.

      Anmerkung

      Durch Auswahl dieser Option vermeiden Sie möglicherweise anfallende Kosten für Ressourcen, deren Löschrichtlinie die Beibehaltung auch vorsieht, wenn die Stack-Erstellung fehlschlägt. Weitere Informationen finden Sie unter DeletionPolicy-Attribut im Benutzerhandbuch zu CloudFormation .

    2. Akzeptieren Sie alle anderen Standardwerte.

    3. Markieren Sie unter Funktionen das Kästchen, um zu bestätigen, dass CloudFormation dadurch IAM-Ressourcen in Ihrem Konto erstellt werden könnten.

    4. Wählen Sie Weiter aus.

  6. Überprüfen Sie die Stack-Details und klicken Sie auf Absenden.

Erstellen Sie den Stack mit CloudFormation ()AWS CLI

Sie können den Stack auch verwenden AWS CLI , um den Stack zu erstellen.

  • Verwenden Sie den Befehl create-stack.

    • Akzeptieren Sie die Standardwerte der Vorlagenparameter und geben Sie den Stacknamen, die E-Mail-Adresse und den Bucket-Namen an. Verwenden Sie den template-body Parameter, um den Inhalt der Vorlage zu übergeben oder template-url um einen URL-Speicherort anzugeben.

      aws cloudformation create-stack \ --stack-name eventbridge-rule-tutorial \ --template-body template-contents \ --parameters \ ParameterKey=EmailAddress,ParameterValue=your.email@example.com \ ParameterKey=BucketName,ParameterValue=my-unique-bucket-name \ --capabilities CAPABILITY_IAM
    • Überschreiben Sie die Standardwerte eines oder mehrerer Vorlagenparameter. Beispiel:

      aws cloudformation create-stack \ --stack-name eventbridge-rule-tutorial \ ----template-body template-contents \ --parameters \ ParameterKey=EmailAddress,ParameterValue=your.email@example.com \ ParameterKey=BucketName,ParameterValue=my-custom-bucket-name \ ParameterKey=RuleName,ParameterValue=my-custom-rule-name \ --capabilities CAPABILITY_IAM

CloudFormation erstellt den Stapel. Sobald die Stack-Erstellung abgeschlossen ist, können die Stack-Ressourcen verwendet werden. Auf der Registerkarte Ressourcen der Stack-Detailseite können Sie die in Ihrem Konto bereitgestellten Ressourcen anzeigen.

Nachdem der Stack erstellt wurde, erhalten Sie eine Bestätigungs-E-Mail für das Abonnement an die von Ihnen angegebene Adresse. Sie müssen dieses Abonnement bestätigen, um Benachrichtigungen zu erhalten.

Erkunden Sie die Funktionen von Regeln

Sobald die Regel erstellt wurde, können Sie die EventBridge Konsole verwenden, um die Regelausführung zu beobachten und die Übertragung von Testereignissen zu testen.

  1. Die EventBridge Konsole zu https://console.aws.amazon.com/events/Hause öffnen? #/Regeln.

  2. Wählen Sie die Regel aus, die Sie erstellt haben.

    Auf der Regeldetailseite werden im Abschnitt Regeldetails Informationen über die Regel angezeigt, einschließlich ihres Ereignismusters und ihrer Ziele.

Untersuchung des Ereignismusters

Bevor wir die Regeloperation testen, untersuchen wir das von uns angegebene Ereignismuster, um zu steuern, welche Ereignisse an das Ziel gesendet werden. Die Regel sendet nur Ereignisse an das Ziel, die den Musterkriterien entsprechen. In diesem Fall möchten wir nur das Ereignis, das Amazon S3 generiert, wenn ein Objekt in unserem speziellen Bucket erstellt wird.

  • Auf der Seite mit den Regeldetails können Sie unter Ereignismuster sehen, dass das Ereignismuster nur Ereignisse auswählt, bei denen:

    • Die Quelle ist der Amazon S3 S3-Service (aws.s3)

    • Der Detailtyp ist Object Created

    • Der Bucket-Name entspricht dem Namen des Buckets, den wir erstellt haben

    { "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": { "name": ["eventbridge-rule-example-source"] } } }

Ereignisse werden über die Regel gesendet

Als Nächstes generieren wir Ereignisse in der Ereignisquelle, um zu testen, ob der Regelabgleich und die Regelzustellung korrekt funktionieren. Dazu laden wir ein Objekt in den S3-Bucket hoch, den wir als Ereignisquelle angegeben haben.

  1. Öffnen Sie die Amazon S3 S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie in der Bucket-Liste den Bucket aus, den Sie mit der Vorlage erstellt haben.

  3. Klicken Sie auf Upload.

  4. Laden Sie eine Testdatei hoch, um ein Object Created Ereignis zu generieren:

    1. Wählen Sie Dateien hinzufügen und wählen Sie eine Datei von Ihrem Computer aus.

    2. Klicken Sie auf Upload.

  5. Warten Sie einen Moment, bis das Ereignis bearbeitet EventBridge und die Benachrichtigung gesendet wurde.

  6. Suchen Sie in Ihrer E-Mail nach einer Benachrichtigung über das Ereignis zur Objekterstellung. Die E-Mail wird Details zum S3-Ereignis enthalten, einschließlich des Bucket-Namens und des Objektschlüssels.

Regelmetriken anzeigen

Sie können Metriken für Ihre Regel einsehen, um zu überprüfen, ob Ereignisse korrekt verarbeitet werden.

  1. Wählen Sie in der EventBridge Konsole Ihre Regel aus.

  2. Wählen Sie die Registerkarte Metriken aus.

  3. Sie können Metriken wie die folgenden anzeigen:

    • Aufrufe: die Häufigkeit, mit der die Regel ausgelöst wurde.

    • TriggeredRules: Die Anzahl der Regeln, die durch übereinstimmende Ereignisse ausgelöst wurden.

Bereinigung: Löschen von Ressourcen

Als letzten Schritt löschen wir den Stack und die darin enthaltenen Ressourcen.

Wichtig

Ihnen werden die im Stapel enthaltenen Amazon-Ressourcen in Rechnung gestellt, solange sie existieren.

  1. Öffnen Sie die CloudFormation Konsole unter. https://console.aws.amazon.com/cloudformation/

  2. Wählen Sie auf der Seite Stacks den aus der Vorlage erstellten Stack aus und klicken Sie auf Löschen. Bestätigen Sie dann Löschen.

    CloudFormation initiiert das Löschen des Stacks und aller darin enthaltenen Ressourcen.

CloudFormation Details zur Vorlage

Diese Vorlage erstellt Ressourcen und gewährt Berechtigungen in Ihrem Konto.

Ressourcen

Mit der CloudFormation Vorlage für dieses Tutorial werden die folgenden Ressourcen in Ihrem Konto erstellt:

Wichtig

Wenn Sie einen Stack anhand dieser Vorlage erstellen, werden Ihnen die verwendeten Amazon-Ressourcen in Rechnung gestellt.

  • AWS::S3::Bucket: Ein Amazon S3 S3-Bucket, der als Ereignisquelle für die Regel fungiert und EventBridge Benachrichtigungen aktiviert hat.

  • AWS::SNS::Topic: Ein Amazon SNS SNS-Thema, das als Ziel für die Ereignisse dient, auf die die Regel zutrifft.

  • AWS::SNS::Subscription: Ein E-Mail-Abonnement für das SNS-Thema.

  • AWS::IAM::Role: IAM-Ausführungsrollen, die Berechtigungen für den EventBridge Service und die Lambda-Bereinigungsfunktion gewähren.

  • AWS::Events::Rule: Die Regel, die die Amazon S3 S3-Bucket-Ereignisse mit dem Amazon SNS SNS-Thema verbindet.

  • AWS::Lambda::Function: Eine Lambda-Funktion, die den Amazon S3 S3-Bucket leert, wenn der Stack gelöscht wird, wodurch das saubere Löschen aller Ressourcen ermöglicht wird.

Berechtigungen

Die Vorlage enthält eine AWS::IAM::Role Ressource, die eine Ausführungsrolle darstellt. Diese Rolle gewährt dem EventBridge Dienst (events.amazonaws.com) die folgenden Berechtigungen in Ihrem Konto.

Die folgenden Berechtigungen werden über die verwaltete Richtlinie gewährtAmazonSNSFullAccess:

  • Voller Zugriff auf Ressourcen und Abläufe von Amazon SNS

CloudFormation Vorlage

Speichern Sie den folgenden YAML-Code als separate Datei, um ihn als CloudFormation Vorlage für dieses Tutorial zu verwenden.

YAML
AWSTemplateFormatVersion: '2010-09-09' Description: '[AWSDocs] EventBridge: event-bus-rule-get-started' Parameters: BucketName: Type: String Description: Name of the S3 bucket (must be globally unique) SNSTopicDisplayName: Type: String Description: Display name for the SNS topic Default: eventbridge-rule-example-target SNSTopicName: Type: String Description: Name for the SNS topic Default: eventbridge-rule-example-target RuleName: Type: String Description: Name for the EventBridge rule Default: eventbridge-rule-example EmailAddress: Type: String Description: Email address to receive notifications AllowedPattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+[a-zA-Z0-9-]*(\\.[a-zA-Z0-9-]+)*$' Resources: # S3 Bucket with notifications enabled S3Bucket: Type: AWS::S3::Bucket Properties: BucketName: !Ref BucketName NotificationConfiguration: EventBridgeConfiguration: EventBridgeEnabled: true # Lambda function to empty the S3 bucket before deletion EmptyBucketFunction: Type: AWS::Lambda::Function Properties: Runtime: python3.12 Handler: index.handler Timeout: 60 Role: !GetAtt EmptyBucketRole.Arn Code: ZipFile: | import boto3 import cfnresponse def handler(event, context): bucket = event['ResourceProperties']['BucketName'] if event['RequestType'] == 'Delete': s3 = boto3.resource('s3') bucket_resource = s3.Bucket(bucket) bucket_resource.objects.all().delete() cfnresponse.send(event, context, cfnresponse.SUCCESS, {}) # IAM Role for the bucket cleanup Lambda function EmptyBucketRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Policies: - PolicyName: EmptyBucketPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:DeleteObject - s3:ListBucket Resource: - !Sub arn:aws:s3:::${BucketName} - !Sub arn:aws:s3:::${BucketName}/* # Custom resource to trigger bucket cleanup on stack deletion EmptyBucketOnDelete: Type: Custom::EmptyBucket Properties: ServiceToken: !GetAtt EmptyBucketFunction.Arn BucketName: !Ref S3Bucket # SNS Topic for email notifications SNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: !Ref SNSTopicDisplayName TopicName: !Ref SNSTopicName # SNS Subscription for email SNSSubscription: Type: AWS::SNS::Subscription Properties: Protocol: email Endpoint: !Ref EmailAddress TopicArn: !Ref SNSTopic # EventBridge Rule to match S3 object creation events and send them to the SNS topic EventBridgeRule: Type: AWS::Events::Rule Properties: Name: !Ref RuleName Description: "Rule to detect S3 object creation and send email notification" EventPattern: source: - aws.s3 detail-type: - "Object Created" detail: bucket: name: - !Ref BucketName State: ENABLED Targets: - Id: SendToSNS Arn: !Ref SNSTopic RoleArn: !GetAtt EventBridgeRole.Arn # IAM Role for EventBridge to publish to SNS EventBridgeRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: events.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonSNSFullAccess Outputs: BucketName: Description: Name of the S3 bucket Value: !Ref S3Bucket SNSTopicARN: Description: ARN of the SNS topic Value: !Ref SNSTopic EmailSubscription: Description: Email address for notifications Value: !Ref EmailAddress
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "[AWSDocs] EventBridge: event-bus-rule-get-started", "Parameters": { "BucketName": { "Type": "String", "Description": "Name of the S3 bucket (must be globally unique)" }, "SNSTopicDisplayName": { "Type": "String", "Description": "Display name for the SNS topic", "Default": "eventbridge-rule-example-target" }, "SNSTopicName": { "Type": "String", "Description": "Name for the SNS topic", "Default": "eventbridge-rule-example-target" }, "RuleName": { "Type": "String", "Description": "Name for the EventBridge rule", "Default": "eventbridge-rule-example" }, "EmailAddress": { "Type": "String", "Description": "Email address to receive notifications", "AllowedPattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+[a-zA-Z0-9-]*(\\.[a-zA-Z0-9-]+)*$" } }, "Resources": { "S3Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": { "Ref": "BucketName" }, "NotificationConfiguration": { "EventBridgeConfiguration": { "EventBridgeEnabled": true } } } }, "EmptyBucketFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Runtime": "python3.12", "Handler": "index.handler", "Timeout": 60, "Role": { "Fn::GetAtt": ["EmptyBucketRole", "Arn"] }, "Code": { "ZipFile": "import boto3\nimport cfnresponse\ndef handler(event, context):\n bucket = event['ResourceProperties']['BucketName']\n if event['RequestType'] == 'Delete':\n s3 = boto3.resource('s3')\n bucket_resource = s3.Bucket(bucket)\n bucket_resource.objects.all().delete()\n cfnresponse.send(event, context, cfnresponse.SUCCESS, {})" } } }, "EmptyBucketRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "ManagedPolicyArns": [ "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" ], "Policies": [ { "PolicyName": "EmptyBucketPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:DeleteObject", "s3:ListBucket"], "Resource": [ {"Fn::Sub": "arn:aws:s3:::${BucketName}"}, {"Fn::Sub": "arn:aws:s3:::${BucketName}/*"} ] } ] } } ] } }, "EmptyBucketOnDelete": { "Type": "Custom::EmptyBucket", "Properties": { "ServiceToken": { "Fn::GetAtt": ["EmptyBucketFunction", "Arn"] }, "BucketName": { "Ref": "S3Bucket" } } }, "SNSTopic": { "Type": "AWS::SNS::Topic", "Properties": { "DisplayName": { "Ref": "SNSTopicDisplayName" }, "TopicName": { "Ref": "SNSTopicName" } } }, "SNSSubscription": { "Type": "AWS::SNS::Subscription", "Properties": { "Protocol": "email", "Endpoint": { "Ref": "EmailAddress" }, "TopicArn": { "Ref": "SNSTopic" } } }, "EventBridgeRule": { "Type": "AWS::Events::Rule", "Properties": { "Name": { "Ref": "RuleName" }, "Description": "Rule to detect S3 object creation and send email notification", "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "Object Created" ], "detail": { "bucket": { "name": [ { "Ref": "BucketName" } ] } } }, "State": "ENABLED", "Targets": [ { "Id": "SendToSNS", "Arn": { "Ref": "SNSTopic" }, "RoleArn": { "Fn::GetAtt": [ "EventBridgeRole", "Arn" ] } } ] } }, "EventBridgeRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "ManagedPolicyArns": [ "arn:aws:iam::aws:policy/AmazonSNSFullAccess" ] } } }, "Outputs": { "BucketName": { "Description": "Name of the S3 bucket", "Value": { "Ref": "S3Bucket" } }, "SNSTopicARN": { "Description": "ARN of the SNS topic", "Value": { "Ref": "SNSTopic" } }, "EmailSubscription": { "Description": "Email address for notifications", "Value": { "Ref": "EmailAddress" } } } }