Guida introduttiva: crea una regola Amazon EventBridge Event Bus - Amazon EventBridge

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Guida introduttiva: crea una regola Amazon EventBridge Event Bus

Per acquisire familiarità con EventBridge le regole e le relative funzionalità, utilizzeremo un CloudFormation modello per configurare una regola del bus degli eventi e i componenti associati, tra cui un'origine dell'evento, un modello di evento e una destinazione. Poi potremo scoprire come funzionano le regole per selezionare gli eventi che desideri.

Il modello crea una regola sul bus degli eventi predefinito. Questa regola utilizza un modello di eventi per filtrare gli eventi da uno specifico bucket Amazon S3. La regola invia gli eventi corrispondenti alla destinazione specificata, un argomento di Amazon SNS. Ogni volta che un oggetto viene creato nel bucket, la regola invia una notifica all'argomento, che quindi invia un'e-mail all'indirizzo e-mail specificato.

Le risorse distribuite sono costituite da:

  • Un bucket Amazon S3 con EventBridge notifiche abilitate a fungere da origine dell'evento.

  • Un argomento Amazon SNS e un abbonamento e-mail come destinazione per le notifiche.

  • Un ruolo di esecuzione che concede EventBridge le autorizzazioni necessarie per la pubblicazione sull'argomento Amazon SNS.

  • La regola stessa, che:

    • Definisce un pattern di eventi che corrisponde solo Object Created agli eventi dello specifico bucket Amazon S3.

    • Specifica l'argomento Amazon SNS come destinazione a EventBridge cui fornire eventi corrispondenti.

Per dettagli tecnici specifici del modello, consulta. Dettagli del modello

Gli eventi di Amazon S3 vengono abbinati allo schema di eventi della regola e, se corrispondono, vengono inviati a un argomento SNS.

Prima di iniziare

Per ricevere eventi Amazon S3 in EventBridge, devi abilitarli EventBridge all'interno di Amazon S3. Questo argomento presuppone che sia abilitato. EventBridge Per ulteriori informazioni, consulta Enabling EventBridge in the Amazon S3 User Guide.

Creazione della regola utilizzando CloudFormation

Per creare la regola e le risorse associate, creeremo un CloudFormation modello e lo useremo per creare uno stack contenente una regola di esempio, completa di origine e destinazione.

Importante

Se crei uno stack da questo modello, ti verranno addebitate le risorse Amazon utilizzate.

Per prima cosa, crea il CloudFormation modello.

  1. Nella sezione Modello, fai clic sull’icona di copia nella scheda JSON o YAML per copiare i contenuti del modello.

  2. Copia i contenuti del modello in un nuovo file.

  3. Salva il file localmente.

Quindi, usa il modello che hai salvato per effettuare il provisioning di uno CloudFormation stack.

Crea lo stack usando CloudFormation (console)
  1. Apri la CloudFormation console all'indirizzo https://console.aws.amazon.com/cloudformation/.

  2. Nella pagina Stack, scegli Con nuove risorse (standard) nel menu Crea stack.

  3. Specifica il modello:

    1. In Prerequisito, seleziona Scegli un modello esistente.

    2. In Specifica modello, seleziona Carica un file di modello.

    3. Seleziona Scegli file, quindi passa al file del modello e selezionalo.

    4. Scegli Next (Successivo).

  4. Specifica i dettagli dello stack:

    1. Inserisci un nome dello stack.

    2. Per BucketName, inserisci un nome di bucket univoco a livello globale. I nomi dei bucket Amazon S3 devono essere univoci per tutti gli account. AWS

    3. Per SNSTopicDisplayName, SNSTopicName e RuleName, accetta i valori predefiniti o inserisci i tuoi.

    4. Per EmailAddress, inserisci un indirizzo email valido a cui desideri ricevere le notifiche.

    5. Scegli Next (Successivo).

  5. Configura le opzioni dello stack:

    1. In Opzioni di errore dello stack, scegli Elimina tutte le nuove risorse create.

      Nota

      Scegliendo questa opzione si evita di ricevere addebiti per risorse la cui policy di eliminazione specifica che devono essere mantenute anche se la creazione dello stack non riesce. Per ulteriori informazioni, consulta la pagina relativa all’attributo DeletionPolicy nella Guida per l’utente di CloudFormation .

    2. Accetta tutti gli altri valori predefiniti.

    3. In Funzionalità, seleziona la casella per confermare che CloudFormation potresti creare risorse IAM nel tuo account.

    4. Scegli Next (Successivo).

  6. Rivedi i dettagli dello stack e scegli Invia.

Crea lo stack usando CloudFormation ()AWS CLI

Puoi anche usare il AWS CLI per creare lo stack.

  • Utilizza il comando create-stack.

    • Accetta i valori dei parametri predefiniti del modello, specificando il nome dello stack, l'indirizzo email e il nome del bucket. Utilizzate il template-body parametro per passare il contenuto del modello o template-url per specificare una posizione URL.

      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
    • Sostituisci i valori predefiniti di uno o più parametri del modello. Esempio:

      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 crea lo stack. Una volta completata la creazione dello stack, le relative risorse sono pronte per l’uso. Puoi utilizzare la scheda Risorse nella pagina dei dettagli dello stack per visualizzare le risorse che sono state fornite nel tuo account.

Dopo aver creato lo stack, riceverai un'email di conferma dell'iscrizione all'indirizzo che hai fornito. È necessario confermare l'iscrizione per ricevere le notifiche.

Esplorazione delle funzionalità delle regole

Una volta creata la regola, puoi utilizzare la EventBridge console per osservare il funzionamento delle regole e testare la consegna degli eventi.

  1. Aprire la EventBridge console a https://console.aws.amazon.com/events/casa? #/regole.

  2. Scegli la regola che hai creato.

    Nella pagina dei dettagli della regola, la sezione Dettagli della regola mostra le informazioni sulla regola, inclusi lo schema e gli obiettivi degli eventi.

Esame dello schema degli eventi

Prima di testare il funzionamento della regola, esaminiamo il modello di eventi che abbiamo specificato per controllare quali eventi vengono inviati alla destinazione. La regola invierà all'obiettivo solo gli eventi che corrispondono ai criteri del pattern. In questo caso, vogliamo solo l'evento che Amazon S3 genera quando un oggetto viene creato nel nostro bucket specifico.

  • Nella pagina dei dettagli della regola, in Schema di evento, puoi vedere che il modello di evento seleziona solo gli eventi in cui:

    • La fonte è il servizio Amazon S3 () aws.s3

    • Il tipo di dettaglio è Object Created

    • Il nome del bucket corrisponde al nome del bucket che abbiamo creato

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

Invio di eventi tramite la regola

Successivamente, genereremo eventi nell'origine dell'evento per verificare che la corrispondenza e la consegna delle regole funzionino correttamente. Per fare ciò, caricheremo un oggetto nel bucket S3 che abbiamo specificato come origine dell'evento.

  1. Apri la console Amazon S3 all'indirizzo. https://console.aws.amazon.com/s3/

  2. Nell'elenco dei bucket, scegli il bucket che hai creato con il modello.

  3. Scegli Carica.

  4. Carica un file di test per generare un Object Created evento:

    1. Scegli Aggiungi file e seleziona un file dal tuo computer.

    2. Scegli Carica.

  5. Attendi qualche istante che l'evento venga elaborato EventBridge e che la notifica venga inviata.

  6. Controlla la tua e-mail per una notifica sull'evento di creazione dell'oggetto. L'e-mail conterrà dettagli sull'evento S3, incluso il nome del bucket e la chiave dell'oggetto.

Visualizzazione delle metriche delle regole

Puoi visualizzare le metriche della tua regola per confermare che gli eventi vengano elaborati correttamente.

  1. Nella EventBridge console, scegli la tua regola.

  2. Seleziona la scheda Parametri.

  3. Puoi visualizzare metriche come:

    • Invocazioni: il numero di volte in cui la regola è stata attivata.

    • TriggeredRules: il numero di regole che sono state attivate dagli eventi corrispondenti.

Pulizia: eliminazione delle risorse

Come passaggio finale, elimineremo lo stack e le risorse in esso contenute.

Importante

Ti verranno addebitate le risorse Amazon contenute nello stack per tutto il tempo in cui esiste.

  1. Apri la CloudFormation console all'indirizzo. https://console.aws.amazon.com/cloudformation/

  2. Nella pagina Stack, scegli lo stack creato dal modello, poi scegli Elimina, quindi conferma con Elimina.

    CloudFormation avvia l'eliminazione dello stack e di tutte le risorse che include.

CloudFormation dettagli del modello

Questo modello crea risorse e concede autorizzazioni nel tuo account.

Resources

Il CloudFormation modello di questo tutorial creerà le seguenti risorse nel tuo account:

Importante

Se crei uno stack da questo modello, ti verranno addebitate le risorse Amazon utilizzate.

  • AWS::S3::Bucket: un bucket Amazon S3 che funge da origine degli eventi per la regola, con EventBridge le notifiche abilitate.

  • AWS::SNS::Topic: un argomento di Amazon SNS che funge da destinazione per gli eventi corrispondenti alla regola.

  • AWS::SNS::Subscription: un abbonamento e-mail all'argomento SNS.

  • AWS::IAM::Role: ruoli di esecuzione IAM che concedono le autorizzazioni al EventBridge servizio e alla funzione di pulizia Lambda.

  • AWS::Events::Rule: La regola che collega gli eventi del bucket Amazon S3 all'argomento Amazon SNS.

  • AWS::Lambda::Function: Una funzione Lambda che svuota il bucket Amazon S3 quando lo stack viene eliminato, permettendo l'eliminazione pulita di tutte le risorse.

Permissions

Il modello include una AWS::IAM::Role risorsa che rappresenta un ruolo di esecuzione. Questo ruolo concede al EventBridge servizio (events.amazonaws.com) le seguenti autorizzazioni nel tuo account.

Le seguenti autorizzazioni vengono concesse tramite la politica gestita: AmazonSNSFullAccess

  • Accesso completo alle risorse e alle operazioni di Amazon SNS

CloudFormation modello

Salva il seguente codice YAML come file separato da utilizzare come CloudFormation modello per questo tutorial.

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" } } } }