

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.

# Primeros pasos: crea una EventBridge pipa de Amazon
<a name="pipes-get-started"></a>

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

**sugerencia**  
Para una experiencia de aprendizaje más completa y práctica, pruebe el [taller de EventBridge tuberías](https://catalog.workshops.aws/eb-pipes). En este taller interactivo, se explica cómo crear y solucionar problemas de un conducto que conecta DynamoDB con API Gateway con un enriquecimiento de Lambda.

La plantilla crea una EventBridge tubería que conecta una transmisión 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.
+ Una función de ejecución que concede 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](#pipes-get-started-template-details).

![Los eventos de la base de datos se comparan con un filtro y, si coinciden, se envían a una cola.](http://docs.aws.amazon.com/es_es/eventbridge/latest/userguide/images/pipes-get-started_eventbridge_architectural.svg)


## Crear la tubería mediante CloudFormation
<a name="pipes-get-started-create"></a>

Para crear la tubería y sus recursos asociados, crearemos una CloudFormation plantilla y la usaremos para crear una pila que contenga una tubería de muestra, completa con 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.

### Creación de la plantilla
<a name="pipes-get-started-file"></a>

En primer lugar, cree la CloudFormation plantilla.

1. En la sección [Plantilla](#pipes-get-started-template), haga clic en el icono de copia de la pestaña **JSON** o **YAML** para copiar el contenido de la plantilla.

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

1. Guarde el archivo localmente.

### Creación de la pila de
<a name="pipes-get-started-stack"></a>

A continuación, usa la plantilla que has guardado para aprovisionar una CloudFormation pila.

1. Abre la CloudFormation consola en [https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/).

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

1. En Especificar plantilla:

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

   1. En **Especificar plantilla**, elija **Cargar un archivo de plantilla**.

   1. Seleccione **Elegir archivo** para navegar hasta el archivo y seleccionarlo.

   1. Elija **Siguiente**.

1. Especifique los detalles de la pila:

   1. Introduzca un nombre de pila.

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

   1. Elija **Siguiente**.

1. 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`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) en la *Guía del usuario de CloudFormation *.

   1. Acepte todos los demás valores predeterminados.

   1. En **Capacidades**, marca la casilla para confirmar que esto CloudFormation podría crear recursos de IAM en tu cuenta.

   1. Elija **Siguiente**.

1. Revise los detalles de la pila y elija **Enviar**.

**Cree la pila con CloudFormation ()AWS CLI**

También puedes usar el AWS CLI para crear la pila.
+ Utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html).
  + 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
<a name="pipes-get-started-using"></a>

Una vez creada la tubería, puede utilizar la EventBridge consola para observar el funcionamiento de la tubería y probar la emisión de eventos.

1. ¿Abrir la EventBridge consola en [https://console.aws.amazon.com/events/casa? \#/tubos](https://console.aws.amazon.com/events/home?#/pipes).

1. 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.](http://docs.aws.amazon.com/es_es/eventbridge/latest/userguide/images/pipes-get-started_eventbridge_pipe-detail.png)

   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
<a name="pipes-get-started-using-filter"></a>

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 name="pipes-get-started-using-source"></a>

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

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

1. Selecciona **Explorar elementos**.

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

   1. Seleccione **Crear elemento**.

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

   1. Seleccione **Crear elemento**.

1. 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**.

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

   1. 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`.

1. 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**.

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

   1. 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
<a name="pipes-get-started-using-target"></a>

Por último, confirmaremos que la canalización 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**.

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

1. Seleccione **Enviar y recibir mensajes**.

1. 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
<a name="pipes-get-started-delete"></a>

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. Abre la CloudFormation consola en [https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/).

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

## CloudFormation detalles de la plantilla
<a name="pipes-get-started-template-details"></a>

Esta plantilla crea recursos y concede permisos en su cuenta.

### Recursos
<a name="pipes-get-started-template-resources"></a>

La CloudFormation plantilla de 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.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html): una tabla de DynamoDB que actúa como origen de eventos para la canalización. 
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html): una cola de Amazon SQS que actúa como destino de los eventos que pasan por la canalización.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html): Una función de ejecución de IAM que otorga permisos al servicio EventBridge Pipes de tu cuenta.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html): es la canalización que conecta la tabla de DynamoDB con la cola de Amazon SQS.

### Permisos
<a name="pipes-get-started-template-perms"></a>

La plantilla incluye un recurso `AWS::IAM::Role` que representa un rol de ejecución. Esta función otorga al servicio EventBridge Pipes (`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`

## CloudFormation plantilla
<a name="pipes-get-started-template"></a>

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

------