View a markdown version of this page

Création de ressources Event Bus personnalisées avec CloudFormation - Amazon EventBridge

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Création de ressources Event Bus personnalisées avec CloudFormation

Vous pouvez créer un bus, ses abonnés, ses sources d'événements et sa politique de ressources à partir d'un CloudFormation modèle. Les types de ressources se trouvent dans l'espace de AWS::EventsV2 noms. Les AWS::Events types appartiennent à Custom Event Bus - Classic et ne peuvent pas configurer de bus d'événements personnalisé.

Les types de ressources

  • AWS::EventsV2::EventBusest un bus, y compris sa durée de conservation et sa clé de chiffrement. Cela nécessiteName.

  • AWS::EventsV2::Subscriberest un abonné sur un bus : ses filtres, sa transformation, sa politique de nouvelles tentatives et sa cible unique. Elle nécessite NameEventBusArn, etInvokeConfiguration, qui elle-même nécessite TargetArn etRoleArn.

  • AWS::EventsV2::EventSourceest un flux géré d'événements de AWS service ou d'événements partenaires dans un bus. Cela nécessite NameEventBusArn, etConfiguration. Consultez Sources d'événements pour un bus événementiel personnalisé.

  • AWS::EventsV2::ResourcePolicyest la politique de ressources d'un bus qui existe déjà. Cela nécessite EventBusArn etPolicyDocument. Consultez Contrôle d'accès pour le Custom Event Bus.

L'abonné RoleArn doit nommer un rôle sur le même compte que lui. Un bus partagé entre plusieurs comptes est donc constitué de plusieurs piles : le bus du compte du propriétaire, le bus de la cible, le rôle de distribution et l'abonné de chaque compte consommateur.

Exemple : un bus, une file d'attente et un abonné

Le modèle suivant crée un bus qui conserve les événements pendant sept jours, une file d'attente Amazon SQS, une file d'attente de lettres mortes, un rôle de livraison et un abonné qui livre les commandes de plus de 500 dans la file d'attente. CloudFormation crée le rôle et les files d'attente avant l'abonné, car celui-ci y fait référence parFn::GetAtt. La période de conservation détermine depuis combien de temps un abonné peut commencer à lire ; voirRediffusion des événements enregistrés à un abonné.

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

Le rôle de distribution fait confiance au principal du events.amazonaws.com service et accorde des autorisations sqs:SendMessage sur les deux files d'attente. Sans la subvention dans la file d'attente, un échec de livraison ne peut pas être enregistré et rien n'est observable. L'identité qui déploie la pile doit également être définie iam:PassRole sur le rôle de distribution.

Valeurs renvoyées

Refrenvoie l'identifiant principal de la ressource, un ARN. Fn::GetAttrenvoie les propriétés en lecture seule. Le tableau suivant répertorie les valeurs pour chaque type de ressource.

Type de ressource Ref renvoie attributs Fn::GetAtt
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 propriété d'un abonné State est une propriété que vous définissez, et non un attribut que vous lisez. Réglez-le sur STOPPED pour suspendre la livraison, puis revenez RUNNING sur pour reprendre. La valeur d'un bus State est en lecture seule et sa valeur réglée est. ACTIVE

Propriétés qui remplacent la ressource

Six propriétés d'abonné sont réservées à la création. Par conséquent, la modification de l'une d'entre elles dans un modèle remplace l'abonné : NameEventBusArn,InvokeConfiguration.TargetArn, TypeStartingPosition, et. PointInTimeConfiguration Toutes les autres propriétés de l'abonné, y compris les filtres, la transformation, la politique de nouvelle tentative et la file d'attente de lettres mortes, sont mises à jour sur place.

Important

Un remplacement d'abonné supprime l'ancien abonné avant de créer le nouveau. Aucun abonné n'existe entre les deux étapes. Le nouvel abonné commence alors par le sien StartingPosition et LATEST commence par les événements les plus récents, de sorte qu'il ne diffuse jamais les événements publiés pendant cette fenêtre. La modification d'un ARN cible, d'un type de commande ou d'une position de départ entraîne donc la suppression d'événements, sauf si vous planifiez l'écart.

Pour éviter cet écart, déployez deux fois. Ajoutez d'abord l'abonné de remplacement sous un nouvel identifiant logique et attendez qu'Stateil soit atteintRUNNING. Supprimez ensuite l'ancien abonné lors d'un second déploiement. Les deux abonnés livrent pendant le chevauchement, de sorte que la cible reçoit deux fois chaque événement correspondant ; utilisez cette approche uniquement lorsque les doublons sont acceptables.

Si vous ne pouvez pas déployer deux fois, définissez la valeur du StartingPosition nouvel abonné sur POINT_IN_TIME et PointInTimeConfiguration PointType attribuez un « A »StartingPoint, en secondes depuis l'ère Unix, avant le déploiement. TIMESTAMP L'abonné lit ensuite les événements qu'il a manqués, à condition qu'ils soient toujours dans la période de rétention du bus.

Sur un bus, only Name est réservé à la création, de sorte que la période de conservation, la description, la clé de cryptage et les balises sont toutes mises à jour sur place. Sur une source d'événements, Name uniquement sur une création, et sur une politique de ressources, EventBusArn c'est. EventBusArn

Fait référence à un bus provenant d'une autre pile

Un abonné a besoin de l'ARN complet du bus, qui inclut l'identifiant généré par le service après le nom du bus. Stockez et transmettez l'ARN, pas le nom. Consultez Noms, points de terminaison et autorisations IAM pour le bus d'événements personnalisé.

Au sein d'un compte et d'une région, exportez l'ARN depuis la pile qui possède le bus, comme le montre l'exemple, et importez-le avecEventBusArn: !ImportValue orders-bus-arn. CloudFormation ne vous permet pas de modifier ou de supprimer une valeur exportée pendant qu'une autre pile l'importe. Renommer le bus le remplace et modifie son ARN, de sorte qu'un changement de nom échoue tant qu'une importation existe. Supprimez d'abord l'abonné importateur ou exportez sous un nouveau nom.

Une exportation ne peut pas être importée depuis un autre compte ou une autre région. Transmettez plutôt l'ARN du bus à la pile consommatrice en tant que paramètre de modèle. Le propriétaire du bus doit également accorder l'autorisation à l'autre compte sur le bus, ce que vous pouvez faire avec une politique de ressources ou avec AWS Resource Access Manager (AWS RAM). Consultez Contrôle d'accès pour le Custom Event Bus.