Introducción: creación de una canalización de Amazon EventBridge - Amazon EventBridge

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Introducción: creación de una canalización de Amazon EventBridge

Para familiarizarnos con las canalizaciones y sus capacidades, utilizaremos una plantilla de CloudFormation para configurar una canalización de EventBridge y los componentes asociados. A continuación, podremos explorar varias características de la canalización.

La plantilla crea una canalización de EventBridge que conecte un flujo de una tabla de DynamoDB a una cola de Amazon SQS. Cada vez que se crea o modifica un registro en la tabla de la base de datos, la canalización envía el evento resultante a la cola.

La canalización implementada consta de:

  • Una tabla de DynamoDB (un flujo) que actúa como origen de la canalización y una cola de Amazon SQS como destino de la canalización.

  • Un rol de ejecución que otorga a EventBridge los permisos necesarios para acceder a la tabla de DynamoDB y a la cola de Amazon SQS.

  • La propia canalización, que contiene un filtro de eventos que selecciona únicamente los eventos generados al crear (insertar) o modificar un elemento de la tabla.

Para obtener detalles técnicos específicos de la plantilla, consulte Detalles de la plantilla.

Los eventos de la base de datos se comparan con un filtro y, si coinciden, se envían a una cola.

Creación de la canalización mediante CloudFormation

Para crear la canalización y los recursos asociados, generaremos una plantilla de CloudFormation y la utilizaremos para crear una pila que contenga un canalización de muestra, que incluya el origen y el destino.

importante

Si crea una pila a partir de esta plantilla, se le facturarán los recursos de Amazon que utilice.

Primero, cree la plantilla de CloudFormation.

  1. En la sección Plantilla, haga clic en el icono de copia de la pestaña JSON o YAML para copiar el contenido de la plantilla.

  2. Pegue el contenido de la plantilla en un archivo nuevo.

  3. Guarde el archivo localmente.

A continuación, utilice la plantilla que creó para aprovisionar una pila de CloudFormation.

  1. Abra la consola de CloudFormation en https://console.aws.amazon.com/cloudformation/.

  2. En la página Pilas, para Crear pila elija Con nuevos recursos (estándar).

  3. En Especificar plantilla:

    1. En Requisito previo, elija Seleccionar una plantilla existente.

    2. En Especificar plantilla, elija Cargar un archivo de plantilla.

    3. Seleccione Elegir archivo para navegar hasta el archivo y seleccionarlo.

    4. Elija Siguiente.

  4. Especifique los detalles de la pila:

    1. Introduzca un nombre de pila.

    2. Para los parámetros, acepte los valores predeterminados o introduzca los propios.

    3. Elija Siguiente.

  5. Configure las opciones la pila:

    1. En las opciones de error de pila, seleccione Eliminar todos los recursos recién creados.

      nota

      Si elige esta opción, evita que se le facturen los recursos cuya política de eliminación especifique que se conservarán incluso si se produce un error durante la creación de la pila. Para obtener más información, consulte Atributo DeletionPolicy en la Guía del usuario de CloudFormation.

    2. Acepte todos los demás valores predeterminados.

    3. En Capacidades, seleccione la casilla para aceptar que CloudFormation puede crear recursos de IAM en su cuenta.

    4. Elija Siguiente.

  6. Revise los detalles de la pila y elija Enviar.

Creación de la pila con CloudFormation (AWS CLI)

También puede utilizar la AWS CLI para crear la pila.

  • Utilice el comando create-stack.

    • Acepte los valores de los parámetros de la plantilla predeterminados y especifique el nombre de la pila. Utilice el parámetro template-body para pasar el contenido de la plantilla o template-url para especificar una ubicación de URL.

      aws cloudformation create-stack \ --stack-name eventbridge-rule-tutorial \ --template-body template-contents \ --capabilities CAPABILITY_IAM
    • Sobrescriba los valores predeterminados de uno o más parámetros de plantilla. Por ejemplo:

      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

CloudFormation crea la pila. Una vez completada la creación de la pila, los recursos de la pila están listos para usarse. Puede usar la pestaña Recursos de la página de detalles de la pila para ver los recursos que se aprovisionaron en su cuenta.

Análisis de las capacidades de canalización

Después de crear la canalización, puede utilizar la consola de EventBridge para observar el funcionamiento de la canalización y probar la entrega de los eventos.

  1. Abra la consola de EventBridge en https://console.aws.amazon.com/events/home?#/pipes.

  2. Elija la canalización que ha creado.

    En la página de detalles de la canalización, la sección Componentes de la canalización muestra los recursos que componen la canalización y contiene las pestañas que proporcionan más detalles sobre cada componente.

    La página de detalles de la canalización muestra gráficamente los componentes de origen, filtro y destino de la canalización.

    Puede buscar el rol de ejecución que hemos creado para la canalización en la pestaña Ajustes, en la sección Permisos.

Análisis del filtro de canalizaciones

Antes de probar el funcionamiento de la canalización, analizaremos el filtro que hemos especificado para controlar qué eventos se envían al destino. La canalización solo enviará al destino los eventos que coincidan con los criterios del filtro; todos los demás se descartarán. En este caso, solo queremos que los eventos generados cuando se crean o modifican las entradas de la tabla se envíen a la cola de Amazon SQS.

  • En la página de detalles de la canalización, en Componentes de canalización, seleccione la pestaña Filtrado.

    Hemos incluido un filtro que selecciona solo los eventos en los que eventName está definido como INSERT o MODIFY.

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

Envío de eventos a través de la canalización

A continuación, generaremos eventos en el origen de la canalización para comprobar que el filtrado y la entrega de la canalización funcionan correctamente. Para ello, crearemos y editaremos un elemento en la tabla de DynamoDB que hemos especificado como el origen de la canalización.

  1. En la página de detalles de la canalización, en Componentes de canalización, seleccione la pestaña Origen.

  2. En Origen, elija el nombre del flujo de DynamoDB.

    Esto abre la consola de DynamoDB en una ventana independiente, en la que se muestran los detalles de la tabla de origen.

  3. Elija Explorar elementos de la tabla.

  4. Genere un evento INSERT mediante la creación de un elemento en la tabla:

    1. Seleccione Crear elemento.

    2. Añada valores para los atributos Álbum y Artista.

    3. Seleccione Crear elemento.

  5. Genere un evento DELETE y INSERT mediante la edición del elemento:

    1. Elija el elemento de la lista y, en el menú Acciones, seleccione Editar elemento.

    2. Introduzca un nuevo valor para el atributo Álbum o Artista.

    3. Marque la casilla que confirma que está cambiando el valor de las claves del elemento y, a continuación, seleccione Volver a crear elemento.

      Esto hace que el elemento se elimine y, a continuación, se vuelva a crear, lo que genera un evento DELETE y, a continuación, un nuevo evento INSERT.

  6. Genere un evento MODIFY añadiendo un atributo al elemento:

    1. Elija el elemento de la lista y, en el menú Acciones, seleccione Editar elemento.

    2. En el menú Agregar nuevo atributo, seleccione Número.

    3. Para el nombre del atributo, introduzca Año y, a continuación, un valor para el atributo. Elija Save and close.

Confirmación de la entrega del evento a través de la canalización

Por último, confirmaremos que la tubería ha filtrado y entregado correctamente los eventos que hemos generado al crear y editar el elemento de la tabla en DynamoDB.

  1. En la página de detalles de la canalización, en Componentes de canalización, seleccione la pestaña Destino.

  2. En Destino, elija el nombre de la cola de Amazon SQS.

    Esta acción abre la consola de Amazon SQS en una ventana independiente, en la que se muestran los detalles de la tabla de destino.

  3. Seleccione Enviar y recibir mensajes.

  4. En Recepción de mensajes, seleccione Sondeo de mensajes.

    Amazon SQS carga los mensajes recibidos en la cola. Haga clic en un mensaje individual para ver la información detallada.

    Debería haber tres mensajes de eventos en la cola:

    • Dos del tipo INSERT, uno generado al crear el elemento de la tabla por primera vez y el otro al volver a crear el elemento cuando se cambia un valor clave.

    • Uno del tipo MODIFY, generado al añadir un atributo al elemento de la tabla.

    Tenga en cuenta que no hay ningún mensaje de evento del tipo DELETE en la cola, aunque se generó uno al eliminar y volver a crear el elemento de la tabla al cambiar un valor clave. El filtro de canalizaciones que especificamos solo selecciona INSERT y MODIFY, por lo tanto, la canalización filtra el evento DELETE en lugar de enviarlo a la cola.

Limpieza: eliminación de recursos

Como último paso, eliminaremos la pila y los recursos que contiene.

importante

Se le facturarán los recursos de Amazon incluidos en la pila mientras exista.

  1. Abra la consola de CloudFormation en https://console.aws.amazon.com/cloudformation/.

  2. En la página Pilas, seleccione la pila creada a partir de la plantilla, seleccione Eliminar y, a continuación, confirme Eliminar.

    CloudFormation inicia la eliminación de la pila y de todos los recursos que incluye.

Detalles de la plantilla de CloudFormation

Esta plantilla crea recursos y concede permisos en su cuenta.

Recursos

La plantilla de CloudFormation para este tutorial creará los siguientes recursos en su cuenta:

importante

Si crea una pila a partir de esta plantilla, se le facturarán los recursos de Amazon que utilice.

  • AWS::DynamoDB::Table: una tabla de DynamoDB que actúa como origen de eventos para la canalización.

  • AWS::SQS::Queue: una cola de Amazon SQS que actúa como destino de los eventos que pasan por la canalización.

  • AWS::IAM::Role: un rol de ejecución de IAM que concede permisos al servicio Canalizaciones de EventBridge de su cuenta.

  • AWS::Pipes::Pipe: es la canalización que conecta la tabla de DynamoDB con la cola de Amazon SQS.

Permisos

La plantilla incluye un recurso AWS::IAM::Role que representa un rol de ejecución. Este rol otorga al servicio de Canalizaciones de EventBridge (pipes.amazonaws.com) los siguientes permisos en su cuenta.

Los siguientes permisos se refieren a la tabla y el flujo de DynamoDB que crea la plantilla como origen de eventos para la canalización:

  • dynamodb:DescribeStream

  • dynamodb:GetRecords

  • dynamodb:GetShardIterator

  • dynamodb:ListStreams

El siguiente permiso se aplica a la cola de Amazon SQS que la pila crea como destino de la canalización:

  • sqs:SendMessage

Plantilla de CloudFormation

Guarde el siguiente código JSON o YAML como un archivo independiente para usarlo como plantilla de CloudFormation en este 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