Conceitos básicos: criar um pipe do Amazon EventBridge - Amazon EventBridge

Conceitos básicos: criar um pipe do Amazon EventBridge

Para nos familiarizarmos com os pipes e seus recursos, usaremos um modelo do CloudFormation para configurar um pipe do EventBridge e os componentes associados. Em seguida, poderemos explorar atributos de pipe variados.

O modelo cria um pipe do EventBridge que conecta um fluxo de uma tabela do DynamoDB a uma fila do Amazon SQS. Sempre que um registro é criado ou modificado na tabela do banco de dados, o pipe envia o evento resultante para a fila.

O pipe implantado consiste em:

  • Uma tabela (e um fluxo) do DynamoDB para funcionar como a origem do pipe e uma fila do Amazon SQS como o destino.

  • Uma função de execução que concede ao EventBridge as permissões necessárias para acessar a tabela do DynamoDB e a fila do Amazon SQS.

  • O pipe propriamente dito, que contém um filtro de evento que só seleciona eventos gerados quando um item da tabela é criado (inserido) ou modificado.

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

Os eventos do banco de dados são combinados com um filtro e enviados para uma fila se coincidirem.

Criação do pipe usando o CloudFormation

Para criar o pipe e os recursos associados, criaremos um modelo do CloudFormation e o usaremos para criar uma pilha contendo um pipe de amostra, 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 modelo do CloudFormation.

  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 arquivo de modelo que você salvou para provisionar uma pilha do CloudFormation.

  1. Abra o console do CloudFormation 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 parâmetros, aceite os valores padrão ou insira os próprios.

    3. 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 obter 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 confirmar que o CloudFormation pode criar recursos do IAM em sua conta.

    4. Escolha Próximo.

  6. Revise os detalhes a pilha e selecione Enviar.

Criar a pilha usando o CloudFormation (AWS CLI)

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

  • Use o comando create-stack.

    • Aceite os valores de parâmetro padrão do modelo, especificando o nome da pilha. 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 \ --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=SourceTableName,ParameterValue=pipe-example-source \ ParameterKey=TargetQueueName,ParameterValue=pipe-example-target \ ParameterKey=PipeName,ParameterValue=pipe-with-filtering-example \ --capabilities CAPABILITY_IAM

O 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.

Exploração dos recursos de pipe

Depois que o pipe tiver sido criado, você poderá usar o console do EventBridge para observar a operação do pipe e testar a entrega do evento.

  1. Abra o console do EventBridge em https://console.aws.amazon.com/events/home?#/pipes.

  2. Escolha o pipe criado por você.

    Na página de detalhes do pipe, a seção Componentes do pipe exibe os recursos que compõem o tubo e contém guias que dão mais detalhes sobre cada componente.

    A página de detalhes do pipe exibe graficamente os componentes de origem, filtro e destino do pipe.

    Você pode encontrar a função de execução que criamos para o pipe na guia Configurações, na seção Permissões.

Exame do filtro de pipe

Antes de testarmos a operação do pipe, vamos examinar o filtro que especificamos para controlar quais eventos são enviados para o destino. O pipe só enviará eventos correspondentes aos critérios de filtro para o destino, e todos os outros são descartados. Nesse caso, só queremos que os eventos gerados quando as entradas de tabela são criadas ou modificadas enviadas para a fila do Amazon SQS.

  • Na página de detalhes do pipe, em Componentes do pipe, escolha a guia Filtragem.

    Incluímos um filtro que só seleciona eventos nos quais o eventName está definido como INSERT ou MODIFY.

    { "eventName": ["INSERT", "MODIFY"] }

Envio de eventos pelo pipe

Em seguida, geraremos eventos na fonte do pipe para testar se a filtragem e a entrega do pipe estão funcionando corretamente. Para isso, vamos criar e editar um item na tabela do DynamoDB especificada por nós como a fonte do pipe.

  1. Na página de detalhes do pipe, em Componentes do pipe, escolha a guia Fonte.

  2. Em Fonte, escolha o nome do fluxo do DynamoDB.

    Isso abre o console do DynamoDB em uma janela à parte, com os detalhes da tabela de origem exibidos.

  3. Escolha Explore table items (Explorar itens da tabela).

  4. Gere um evento INSERT criando um item na tabela:

    1. Selecione Create Item (Criar item).

    2. Adicione valores para os atributos Álbum e Artista.

    3. Selecione Create Item (Criar item).

  5. Gere um evento INSERT e um evento DELETE editando o item:

    1. Escolha o item na lista e, no menu Ações, escolha Editar item.

    2. Insira um novo valor para o atributo Álbum ou Artista.

    3. Marque a caixa que confirma que você está alterando o valor das chaves de item e escolha Recriar item.

      Isso resulta na exclusão e na recriação do item, gerando um evento DELETE e, em seguida, um novo evento INSERT.

  6. Gere um evento MODIFY adicionando um atributo ao item:

    1. Escolha o item na lista e, no menu Ações, escolha Editar item.

    2. No menu Adicionar novo atributo, escolha Número.

    3. Para o nome do atributo, insira Ano e, em seguida, insira um valor para o atributo. Escolha Save and close.

Confirmação da entrega do evento pelo pipe

Por fim, confirmaremos que o pipe filtrou e entregou com êxito os eventos que geramos ao criar e editar o item da tabela no DynamoDB.

  1. Na página de detalhes do pipe, em Componentes do pipe, escolha a guia Destino.

  2. Em Destino, escolha o nome da fila do Amazon SQS.

    Isso abre o console do Amazon SQS em uma janela à parte, com os detalhes da fila de destino exibidos.

  3. Escolha Enviar e receber mensagens.

  4. Em Receber mensagens, escolha Sondar mensagens.

    O Amazon SQS carrega as mensagens recebidas na fila. Clique em uma mensagem individual para ver os detalhes.

    Deve haver três mensagens de evento na fila:

    • Duas do tipo INSERT, uma gerada quando você criou o item da tabela pela primeira vez, e a outra gerada quando você recriou o item alterando um valor de chave.

    • Uma do tipo MODIFY, gerada quando você adicionou um atributo ao item da tabela.

    Não há uma mensagem de evento do tipo DELETE na fila, mesmo que uma tenha sido gerada quando você excluiu e recriou o item da tabela alterando um valor de chave. O filtro de pipe que especificamos só é selecionado em INSERT e MODIFY, logo, o pipe filtrou o evento DELETE, em vez de entregá-lo na fila.

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 console do CloudFormation 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.

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

Detalhes do modelo do CloudFormation

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

Recursos

O modelo do CloudFormation para este tutorial criará os seguintes recursos na conta:

Importante

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

  • AWS::DynamoDB::Table: uma tabela do DynamoDB que funciona como a fonte de eventos do pipe.

  • AWS::SQS::Queue: uma fila do Amazon SQS que funciona como destino para os eventos que passam pelo pipe.

  • AWS::IAM::Role: uma função de execução do IAM que concede permissões ao serviço Pipes do EventBridge na conta.

  • AWS::Pipes::Pipe: o pipe que conecta a tabela do DynamoDB à fila do Amazon SQS.

Permissões

O modelo inclui um recurso AWS::IAM::Role que representa uma função de execução. Essa função concede ao serviço Pipes do EventBridge (pipes.amazonaws.com) as permissões a seguir na conta.

As seguintes permissões têm como escopo a tabela do DynamoDB e transmitem o modelo criado como a fonte do evento para o pipe:

  • dynamodb:DescribeStream

  • dynamodb:GetRecords

  • dynamodb:GetShardIterator

  • dynamodb:ListStreams

A seguinte permissão tem como escopo a fila do Amazon SQS criada pela pilha como o destino do pipe:

  • sqs:SendMessage

Modelo do CloudFormation

Salve o código JSON ou YAML a seguir em outro arquivo para usar como modelo do CloudFormation neste tutorial.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description" : "[AWSDocs] EventBridge: pipes-get-started", "Parameters" : { "SourceTableName" : { "Type" : "String", "Default" : "pipe-example-source", "Description" : "Specify the name of the table to provision as the pipe source, or accept the default." }, "TargetQueueName" : { "Type" : "String", "Default" : "pipe-example-target", "Description" : "Specify the name of the queue to provision as the pipe target, or accept the default." }, "PipeName" : { "Type" : "String", "Default" : "pipe-with-filtering-example", "Description" : "Specify the name of the table to provision as the pipe source, or accept the default." } }, "Resources": { "PipeSourceDynamoDBTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "AttributeDefinitions": [{ "AttributeName": "Album", "AttributeType": "S" }, { "AttributeName": "Artist", "AttributeType": "S" } ], "KeySchema": [{ "AttributeName": "Album", "KeyType": "HASH" }, { "AttributeName": "Artist", "KeyType": "RANGE" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 10, "WriteCapacityUnits": 10 }, "StreamSpecification": { "StreamViewType": "NEW_AND_OLD_IMAGES" }, "TableName": { "Ref" : "SourceTableName" } } }, "PipeTargetQueue": { "Type": "AWS::SQS::Queue", "Properties": { "QueueName": { "Ref" : "TargetQueueName" } } }, "PipeTutorialPipeRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "pipes.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition" }, ":pipes:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":pipe/", { "Ref": "PipeName" } ] ] }, "aws:SourceAccount": { "Ref" : "AWS::AccountId" } } } }] }, "Description" : "EventBridge Pipe template example. Execution role that grants the pipe the permissions necessary to send events to the specified pipe.", "Path": "/", "Policies": [{ "PolicyName": "SourcePermissions", "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListStreams" ], "Resource": [ { "Fn::GetAtt" : [ "PipeSourceDynamoDBTable", "StreamArn" ] } ] }] } }, { "PolicyName": "TargetPermissions", "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": [ { "Fn::GetAtt" : [ "PipeTargetQueue", "Arn" ] } ] }] } } ] } }, "PipeWithFiltering": { "Type": "AWS::Pipes::Pipe", "Properties": { "Description" : "EventBridge Pipe template example. Pipe that receives events from a DynamoDB stream, applies a filter, and sends matching events on to an SQS Queue.", "Name": { "Ref" : "PipeName" }, "RoleArn": {"Fn::GetAtt" : ["PipeTutorialPipeRole", "Arn"] }, "Source": { "Fn::GetAtt" : [ "PipeSourceDynamoDBTable", "StreamArn" ] }, "SourceParameters": { "DynamoDBStreamParameters" : { "StartingPosition" : "LATEST" }, "FilterCriteria" : { "Filters" : [ { "Pattern" : "{ \"eventName\": [\"INSERT\", \"MODIFY\"] }" }] } }, "Target": { "Fn::GetAtt" : [ "PipeTargetQueue", "Arn" ] } } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Description: '[AWSDocs] EventBridge: pipes-get-started' Parameters: SourceTableName: Type: String Default: pipe-example-source Description: Specify the name of the table to provision as the pipe source, or accept the default. TargetQueueName: Type: String Default: pipe-example-target Description: Specify the name of the queue to provision as the pipe target, or accept the default. PipeName: Type: String Default: pipe-with-filtering-example Description: Specify the name of the table to provision as the pipe source, or accept the default. Resources: PipeSourceDynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: Album AttributeType: S - AttributeName: Artist AttributeType: S KeySchema: - AttributeName: Album KeyType: HASH - AttributeName: Artist KeyType: RANGE ProvisionedThroughput: ReadCapacityUnits: 10 WriteCapacityUnits: 10 StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES TableName: !Ref SourceTableName PipeTargetQueue: Type: AWS::SQS::Queue Properties: QueueName: !Ref TargetQueueName PipeTutorialPipeRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17 ' Statement: - Effect: Allow Principal: Service: pipes.amazonaws.com Action: sts:AssumeRole Condition: StringLike: aws:SourceArn: !Join - '' - - 'arn:' - !Ref AWS::Partition - ':pipes:' - !Ref AWS::Region - ':' - !Ref AWS::AccountId - ':pipe/' - !Ref PipeName aws:SourceAccount: !Ref AWS::AccountId Description: EventBridge Pipe template example. Execution role that grants the pipe the permissions necessary to send events to the specified pipe. Path: / Policies: - PolicyName: SourcePermissions PolicyDocument: Version: '2012-10-17 ' Statement: - Effect: Allow Action: - dynamodb:DescribeStream - dynamodb:GetRecords - dynamodb:GetShardIterator - dynamodb:ListStreams Resource: - !GetAtt PipeSourceDynamoDBTable.StreamArn - PolicyName: TargetPermissions PolicyDocument: Version: '2012-10-17 ' Statement: - Effect: Allow Action: - sqs:SendMessage Resource: - !GetAtt PipeTargetQueue.Arn PipeWithFiltering: Type: AWS::Pipes::Pipe Properties: Description: EventBridge Pipe template example. Pipe that receives events from a DynamoDB stream, applies a filter, and sends matching events on to an SQS Queue. Name: !Ref PipeName RoleArn: !GetAtt PipeTutorialPipeRole.Arn Source: !GetAtt PipeSourceDynamoDBTable.StreamArn SourceParameters: DynamoDBStreamParameters: StartingPosition: LATEST FilterCriteria: Filters: - Pattern: '{ "eventName": ["INSERT", "MODIFY"] }' Target: !GetAtt PipeTargetQueue.Arn