Primeiros passos: Crie uma regra de barramento de EventBridge eventos da Amazon - Amazon EventBridge

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Primeiros passos: Crie uma regra de barramento de EventBridge eventos da Amazon

Para nos familiarizarmos com EventBridge as regras e seus recursos, usaremos um CloudFormation modelo para configurar uma regra de barramento de eventos e os componentes associados, incluindo a origem, o padrão e o destino do evento. Depois, poderemos explorar como as regras funcionam para selecionar os eventos que você deseja.

O modelo cria uma regra no barramento de eventos padrão. Esta regra usa um padrão de evento para filtrar eventos de um bucket do Amazon S3 específico. A regra envia eventos correspondentes ao destino especificado, um tópico do Amazon SNS. Sempre que um objeto é criado no bucket, a regra envia uma notificação para o tópico, que acaba enviando um e-mail para o endereço de e-mail especificado.

Os recursos implantados consistem em:

  • Um bucket do Amazon S3 com EventBridge notificações habilitadas para atuar como a fonte do evento.

  • Uma assinatura e um tópico do Amazon SNS como o destino para notificações.

  • Uma função de execução que EventBridge concede as permissões necessárias para publicar no tópico do Amazon SNS.

  • A regra propriamente dita, que:

    • Define um padrão de evento que só corresponde aos eventos Object Created do bucket do Amazon S3 específico.

    • Especifica o tópico do Amazon SNS como um destino para o EventBridge qual entrega eventos correspondentes.

Para obter detalhes técnicos específicos do modelo, consulte Detalhes do modelo.

Os eventos do Amazon S3 são combinados com o padrão de eventos da regra e enviados para um tópico SNS, se houver correspondência.

Antes de começar

Para receber eventos do Amazon S3 EventBridge, você deve habilitar EventBridge dentro do Amazon S3. Este tópico pressupõe que EventBridge esteja habilitado. Para obter mais informações, consulte Ativação EventBridge no Guia do usuário do Amazon S3.

Criando a regra usando CloudFormation

Para criar a regra e seus recursos associados, criaremos um CloudFormation modelo e o usaremos para criar uma pilha contendo um exemplo de regra, completo com origem e destino.

Importante

Você receberá uma cobrança pelos recursos da Amazon usados se criar uma pilha com base nesse modelo.

Primeiro, crie o CloudFormation modelo.

  1. Na seção Modelo, clique no ícone de cópia na guia JSON ou YAML para copiar o conteúdo do modelo.

  2. Copie o conteúdo do modelo em um novo arquivo.

  3. Salve o arquivo localmente.

Em seguida, use o modelo que você salvou para provisionar uma CloudFormation pilha.

Crie a pilha usando CloudFormation (console)
  1. Abra o CloudFormation console em https://console.aws.amazon.com/cloudformation/.

  2. Na página Pilhas, no menu Criar pilha, escolha com novos recursos (padrão).

  3. Especifique o modelo:

    1. Em Pré-requisito, escolha Escolher um modelo existente.

    2. Em Especificar modelo, escolha Fazer upload de um arquivo de modelo.

    3. Selecione Escolher arquivo, navegue até o arquivo de modelo e selecione-o.

    4. Escolha Próximo.

  4. Especifique os detalhes da pilha:

    1. Digite um nome de pilha.

    2. Para BucketName, insira um nome de bucket globalmente exclusivo. Os nomes dos buckets do Amazon S3 devem ser exclusivos em todas as contas AWS .

    3. Para SNSTopicDisplayName, SNSTopicNome e RuleName, aceite os valores padrão ou insira seus próprios valores.

    4. Para EmailAddress, insira um endereço de e-mail válido no qual você deseja receber notificações.

    5. Escolha Próximo.

  5. Configurar as opções da pilha:

    1. Em Opções de falha de pilha, escolha Excluir todos os recursos recém-criados.

      nota

      A escolha dessa opção evita que você seja cobrado por recursos cuja política de exclusão especifica que eles sejam retidos mesmo que a criação da pilha falhe. Para ter mais informações, consulte Atributo DeletionPolicy no Guia do usuário do CloudFormation .

    2. Aceite todos os outros valores padrão.

    3. Em Capacidades, marque a caixa para reconhecer que isso CloudFormation pode criar recursos do IAM em sua conta.

    4. Escolha Próximo.

  6. Revise os detalhes a pilha e selecione Enviar.

Crie a pilha usando CloudFormation ()AWS CLI

Você também pode usar o AWS CLI para criar a pilha.

  • Use o comando create-stack.

    • Aceite os valores padrão dos parâmetros do modelo, especificando o nome da pilha, o endereço de e-mail e o nome do bucket. Use o parâmetro template-body para passar o conteúdo do modelo, ou template-url para especificar um local de 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
    • Substitua o(s) valor(es) padrão de um ou mais parâmetros de modelo. Por exemplo:

      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 cria a pilha. Quando a criação da pilha for concluída, os recursos da pilha estarão prontos para uso. Você pode usar a guia Recursos na página de detalhes da pilha para visualizar os recursos que foram provisionados em sua conta.

Depois que a pilha for criada, você receberá um e-mail de confirmação da assinatura no endereço fornecido. Você deve confirmar essa assinatura para receber notificações.

Exploração dos recursos de regra

Depois que a regra for criada, você poderá usar o EventBridge console para observar a operação da regra e testar a entrega do evento.

  1. Abra o EventBridge console em https://console.aws.amazon.com/events/casa? #/regras.

  2. Escolha a regra que você criou.

    Na página de detalhes da regra, a seção Detalhes da regra exibe informações sobre a regra, inclusive o padrão de eventos e os destinos.

Exame do padrão de eventos

Antes de testarmos a operação da regra, vamos examinar o padrão de eventos que especificamos para controlar quais eventos são enviados para o destino. A regra só enviará eventos correspondentes aos critérios do padrão para o destino. Nesse caso, só queremos o evento gerado pelo Amazon S3 quando um objeto é criado em nosso bucket específico.

  • Na página de detalhes da regra, em Padrão do evento, você pode ver que o padrão do evento só seleciona eventos nos quais:

    • A fonte é o serviço do Amazon S3 (aws.s3)

    • O tipo de detalhe é Object Created

    • O nome do bucket corresponde ao nome do bucket que criamos

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

Envio de eventos pela regra

Em seguida, geraremos eventos na fonte do evento para testar se a correspondência da regra e a entrega estão funcionando corretamente. Para isso, carregaremos um objeto no bucket do S3 que especificamos como a fonte do evento.

  1. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Na lista Buckets, escolha o bucket que você criou com o modelo.

  3. Escolha Carregar.

  4. Carregue um arquivo de teste para gerar um evento Object Created:

    1. Escolha Adicionar arquivos e selecione um arquivo no computador.

    2. Escolha Carregar.

  5. Aguarde alguns instantes até que o evento seja processado EventBridge e a notificação seja enviada.

  6. Verifique o e-mail em busca de uma notificação sobre o evento de criação de objetos. O e-mail conterá detalhes sobre o evento do S3, inclusive o nome do bucket e a chave do objeto.

Exibição das métricas de regra

Você pode exibir métricas da regra para confirmar se os eventos estão sendo processados corretamente.

  1. No EventBridge console, escolha sua regra.

  2. Escolha a guia Métricas.

  3. Você pode exibir métricas como:

    • Invocações: o número de vezes em que a regra foi disparada.

    • TriggeredRules: o número de regras que foram acionadas por eventos correspondentes.

Limpar: exclusão de recursos

Como uma etapa final, excluiremos a pilha e os recursos que ela contém.

Importante

Você receberá uma cobrança pelos recursos da Amazon contidos na pilha enquanto ela existir.

  1. Abra o CloudFormation console em https://console.aws.amazon.com/cloudformation/.

  2. Na página Pilhas, escolha a pilha criada a partir do modelo, escolha Excluir e confirme para Excluir.

    CloudFormation inicia a exclusão da pilha e de todos os recursos que ela inclui.

CloudFormation detalhes do modelo

Esse modelo cria recursos e concede permissões na conta.

Recursos

O CloudFormation modelo deste tutorial criará os seguintes recursos em sua conta:

Importante

Você receberá uma cobrança pelos recursos da Amazon usados se criar uma pilha com base nesse modelo.

  • AWS::S3::Bucket: Um bucket do Amazon S3 que atua como a fonte do evento para a regra, com as EventBridge notificações ativadas.

  • AWS::SNS::Topic: um tópico do Amazon SNS que funciona como o destino para os eventos correspondentes com a regra.

  • AWS::SNS::Subscription: uma assinatura de e-mail para o tópico do SNS.

  • AWS::IAM::Role: funções de execução do IAM que concedem permissões ao EventBridge serviço e à função de limpeza do Lambda.

  • AWS::Events::Rule: a regra que conecta os eventos do bucket do Amazon S3 ao tópico do Amazon SNS.

  • AWS::Lambda::Function: uma função Lambda que esvazia o bucket do Amazon S3 quando a pilha é excluída, permitindo a exclusão limpa de todos os recursos.

Permissões

O modelo inclui um recurso AWS::IAM::Role que representa uma função de execução. Essa função concede ao EventBridge serviço (events.amazonaws.com) as seguintes permissões em sua conta.

As seguintes permissões são concedidas por meio da política gerenciada AmazonSNSFullAccess:

  • Acesso total a todos os recursos e operações do Amazon SNS.

CloudFormation modelo

Salve o código YAML a seguir como um arquivo separado para usar como CloudFormation modelo para este 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" } } } }