

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.

# Creación de recursos de Event Bus personalizados con CloudFormation
<a name="eb-custom-bus-cloudformation"></a>

Puede crear un bus, sus suscriptores, sus fuentes de eventos y su política de recursos a partir de una CloudFormation plantilla. Los tipos de recursos están en el espacio de `AWS::EventsV2` nombres. Los `AWS::Events` tipos pertenecen a Custom Event Bus - Classic y no pueden configurar un bus de eventos personalizado.

## Los tipos de recursos
<a name="eb-custom-bus-cloudformation-types"></a>
+ `AWS::EventsV2::EventBus`es un bus, incluidos su período de retención y su clave de cifrado. Requiere`Name`.
+ `AWS::EventsV2::Subscriber`es un suscriptor en un bus: sus filtros, su transformación, su política de reintentos y su objetivo único. Requiere`Name`, y `EventBusArn``InvokeConfiguration`, lo que a su vez requiere `TargetArn` y`RoleArn`.
+ `AWS::EventsV2::EventSource`es una fuente gestionada de eventos de AWS servicio o eventos de socios en un autobús. Requiere `Name``EventBusArn`, y`Configuration`. Consulte [Fuentes de eventos para un bus de eventos personalizado](eb-custom-bus-event-sources.md).
+ `AWS::EventsV2::ResourcePolicy`es la política de recursos de un autobús que ya existe. Requiere `EventBusArn` y`PolicyDocument`. Consulte [Control de acceso para el bus de eventos personalizado](eb-custom-bus-access.md).

El suscriptor `RoleArn` debe nombrar un rol en la misma cuenta que el suscriptor. Por lo tanto, un bus compartido entre cuentas es más que una pila: el bus en la cuenta del propietario y el objetivo, el rol de entrega y el suscriptor en cada cuenta consumidora.

## Ejemplo: un autobús, una cola y un suscriptor
<a name="eb-custom-bus-cloudformation-example"></a>

La siguiente plantilla crea un autobús que retiene los eventos durante siete días, una cola de Amazon SQS, una cola de correo no enviado, una función de entrega y un suscriptor que entrega los pedidos de más de 500 a la cola. CloudFormation crea el rol y las colas antes que el suscriptor, porque el suscriptor hace referencia a ellos con. `Fn::GetAtt` El período de retención decide desde cuándo un suscriptor puede empezar a leer; consulte[Reproducción de eventos retenidos para un suscriptor](eb-custom-bus-replay.md).

```
AWSTemplateFormatVersion: '2010-09-09'

Resources:
  OrdersBus:
    Type: AWS::EventsV2::EventBus
    Properties:
      Name: orders
      Description: Order events for the fulfillment platform
      StorageConfiguration:
        RetentionPeriodInDays: 7

  OrdersQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: large-orders

  OrdersDeadLetterQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: large-orders-dlq

  DeliveryRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: EventBusDeliveryRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: events.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: DeliverToQueues
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action: sqs:SendMessage
                Resource:
                  - !GetAtt OrdersQueue.Arn
                  - !GetAtt OrdersDeadLetterQueue.Arn

  LargeOrders:
    Type: AWS::EventsV2::Subscriber
    Properties:
      Name: large-orders
      EventBusArn: !Ref OrdersBus
      FilterConfiguration:
        Filters:
          - Scope: DATA
            Pattern: '{"detail":{"total":[{"numeric":[">",500]}]}}'
      InvokeConfiguration:
        TargetArn: !GetAtt OrdersQueue.Arn
        RoleArn: !GetAtt DeliveryRole.Arn
      RetryPolicy:
        MaxRetryAttempts: 10
        MaxEventAgeInSeconds: 3600
      OnFailureConfiguration:
        Arn: !GetAtt OrdersDeadLetterQueue.Arn

Outputs:
  OrdersBusArn:
    Value: !Ref OrdersBus
    Export:
      Name: orders-bus-arn
```

La función de entrega confía en el principal del `events.amazonaws.com` servicio y concede `sqs:SendMessage` en ambas colas. Si la concesión no pasa a la cola de cartas muertas, no se puede registrar un error en la entrega y no se puede observar nada. La identidad que implementa la pila también debe `iam:PassRole` figurar en la función de entrega.

## Valores de retorno:
<a name="eb-custom-bus-cloudformation-returns"></a>

`Ref`devuelve el identificador principal del recurso, un ARN. `Fn::GetAtt`devuelve las propiedades de solo lectura. En la tabla siguiente se enumeran los valores de cada tipo de recurso.


| Tipo de recurso | `Ref` devuelve | `Fn::GetAtt`atributos  | 
| --- | --- | --- | 
| AWS::EventsV2::EventBus | EventBusArn | EventBusArn, State, CreationTime, LastModifiedTime | 
| AWS::EventsV2::Subscriber | SubscriberArn | SubscriberArn, BusName, CreationTime, LastModifiedTime | 
| AWS::EventsV2::EventSource | EventSourceArn | EventSourceArn, State, Revoked, CreationTime, LastModifiedTime | 
| AWS::EventsV2::ResourcePolicy | EventBusArn | RevisionId | 

La de un suscriptor `State` es una propiedad que estableces, no un atributo que lees. Configúrala `STOPPED` para pausar la entrega y volver a activarla `RUNNING` para reanudarla. El de un bus `State` es de solo lectura y su valor fijo es. `ACTIVE`

## Propiedades que sustituyen al recurso
<a name="eb-custom-bus-cloudformation-replacement"></a>

Seis propiedades de suscriptor son de solo creación, por lo que al cambiar cualquiera de ellas en una plantilla se reemplaza al suscriptor:`Name`,`EventBusArn`,`InvokeConfiguration.TargetArn`, `Type``StartingPosition`, y. `PointInTimeConfiguration` Todas las demás propiedades del suscriptor, incluidos los filtros, la transformación, la política de reintentos y la cola de mensajes muertos, se actualizan en su lugar.

**importante**  
Un suscriptor que reemplaza elimina al suscriptor anterior antes de crear el nuevo. No existe ningún suscriptor entre los dos pasos. A continuación`StartingPosition`, el nuevo suscriptor comienza por su cuenta y `LATEST` comienza por los eventos más recientes, por lo que nunca publica los eventos publicados durante ese período. Por lo tanto, si cambias un ARN objetivo, un tipo de pedido o una posición inicial, se eliminan los eventos, a menos que planifiques la diferencia.

Para evitar esa brecha, despliega dos veces. En primer lugar, añada el suscriptor de reemplazo con una nueva identificación lógica y espere `State` a que llegue`RUNNING`. A continuación, elimine el suscriptor anterior en una segunda implementación. Ambos suscriptores realizan la entrega durante la superposición, por lo que el objetivo recibe dos veces cada evento coincidente; utilice este enfoque solo cuando se acepten duplicados.

Si no puede realizar la implementación dos veces, `StartingPosition` defina el nuevo suscriptor `POINT_IN_TIME` como y asigne `PointInTimeConfiguration` una `TIMESTAMP` a`StartingPoint`, en segundos desde la época `PointType` de Unix, desde antes de la implementación. A continuación, el suscriptor lee los eventos que no ha detectado, siempre que se encuentren dentro del período de retención establecido.

En un autobús, solo `Name` es de creación, por lo que el período de retención, la descripción, la clave de cifrado y las etiquetas se actualizan en su lugar. En una fuente de eventos, `Name` y `EventBusArn` son de solo creación, y en una política de recursos, sí. `EventBusArn`

## Haciendo referencia a un bus desde otra pila
<a name="eb-custom-bus-cloudformation-crossstack"></a>

Un suscriptor necesita el ARN completo del bus, que incluye el identificador generado por el servicio después del nombre del bus. Almacene y pase el ARN, no el nombre. Consulte [Nombres, puntos finales y permisos de IAM para el bus de eventos personalizado](eb-custom-bus-names.md).

Dentro de una cuenta y una región, exporte el ARN de la pila propietaria del bus, como en el ejemplo, e impórtelo con él. `EventBusArn: !ImportValue orders-bus-arn` CloudFormation no permite cambiar o eliminar un valor exportado mientras otra pila lo importa. Al cambiar el nombre del bus, este se reemplaza y cambia su ARN, por lo que no se puede cambiar el nombre mientras existe una importación. Elimine primero el suscriptor importador o expórtelo con un nombre nuevo.

No se puede importar una exportación desde otra cuenta u otra región. En su lugar, pase el ARN del bus a la pila consumidora como parámetro de plantilla. El propietario del bus también debe conceder a la otra cuenta el permiso de uso del bus, lo que se hace con una política de recursos o con AWS Resource Access Manager (AWS RAM). Consulte [Control de acceso para el bus de eventos personalizado](eb-custom-bus-access.md).