View a markdown version of this page

Mettre à jour, suspendre et reprendre un abonné - 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.

Mettre à jour, suspendre et reprendre un abonné

UpdateSubscriberchange un abonné en place. Un membre de niveau supérieur que vous omettez conserve sa valeur stockée ; un objet de configuration que vous fournissez remplace l'objet stocké dans son intégralité. Par conséquent, pour modifier un filtre, transmettez le filtre complet FilterConfiguration à chaque filtre que vous souhaitez conserver. Pour suspendre un abonné, passez --state STOPPED ; pour reprendre, passez --state RUNNING avec un--resume-position.

Ce que vous pouvez changer

La requête suivante remplace l'ensemble InvokeConfiguration de l'abonné. Elle nomme donc le rôle et tous les paramètres cibles que l'abonné doit conserver. TargetArnne fait pas partie de la mise à jour ; la cible d'un abonné ne peut pas changer.

{ "SubscriberArn": "arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890", "InvokeConfiguration": { "RoleArn": "arn:aws:iam::111122223333:role/NewSubscriberTargetRole", "SqsParameters": { "MessageGroupId": "{% $events.Data.customerId %}" } } }

Le tableau suivant répertorie chaque membre de la demande et explique comment le fournir.

Demander un membreEffet
DescriptionRemplace la description. Une valeur vide ou vide l'efface.
StateDéplace l'abonné entre RUNNING et STOPPED ; voir Suspension et reprise
ResumePositionOù une RUNNING transition STOPPED vers une reprise
InvokeConfigurationRemplace le rôle de diffusion et les paramètres cibles. TargetArnreste tel quel.
FilterConfigurationConserve, efface ou remplace l'ensemble de la configuration du filtre ; voir Mettre à jour les filtres
BatchConfigurationRemplace l'ensemble de la configuration de traitement par lots
TransformerRemplace l'ensemble du transformateur. Définissez sur Type pour RAW supprimer une métadonnée ou un transformateur JSonata.
RetryPolicyRemplace l'ensemble de la politique relative aux nouvelles tentatives. Un membre omis prend sa valeur par défaut : 5 nouvelles tentatives, 300 secondes, et la seule valeur RetryStrategyALL, qui réessaie chaque catégorie d'échec.
OnFailureConfigurationRemplace l'ensemble de la configuration en cas de défaillance. Envoyer {} pour supprimer la destination ; en l'absence de destination, un événement est abandonné lorsque ses nouvelles tentatives sont épuisées.
LogConfigurationRemplace l'ensemble de la configuration de journalisation. Envoyer {} pour rétablir les valeurs par défaut, Level OFF et IncludePayloadON_ERROR_ONLY, qui désactive la journalisation des livraisons.

Name,EventBusArn,, Type StartingPositionPointInTimeConfiguration, et TargetArn identifiez l'abonné ou fixez son point de départ et ne peut pas être modifié ; les balises changent via TagResource etUntagResource. La réponse de mise à jour contient l'identité, l'état, la position de départ de l'abonné et LastModifiedTime permet de relire la configuration avecDescribeSubscriber.

Une mise à jour ne modifie jamais la position de l'abonné dans le bus : elle ne revient pas en arrière, ne saute pas et ne rejoue pas. Pour rediffuser les événements passés dans une nouvelle configuration, créez plutôt un nouvel abonné avec une position de départ ; voirRediffusion des événements enregistrés à un abonné.

Résolution des problèmes : une mise à jour a effacé les paramètres que vous n'aviez pas modifiés

Une mise à jour remplace chaque objet de configuration que vous fournissez dans son ensemble ; voirCe que vous pouvez changer.

Symptôme

Après une mise à jour, un filtre, un paramètre de journal, une limite de nouvelles tentatives ou une période de rétention que vous n'avez pas touchés sont rétablis à leur valeur par défaut et aucune erreur n'a été renvoyée.

Cause

Une mise à jour laisse un membre de niveau supérieur omis inchangé mais remplace l'ensemble d'un bloc fourni. Une mise à jour FilterConfiguration réussie LogConfiguration ou RetryPolicy visant StorageConfiguration à modifier un champ efface les autres champs du bloc. Une source d'événements mise à jour Pattern sans retour sans aucun modèle, ce qui l'élargit à chaque événement.

Solution

Lisez la ressource, modifiez l'ensemble du bloc, réécrivez le bloc entier, puis relisez-le. La relecture est la seule confirmation, car les réponses de création et de mise à jour ne font pas écho à tous les champs.

aws eventsv2 describe-subscriber --subscriber-arn "$SUBSCRIBER_ARN" --query 'LogConfiguration' aws eventsv2 update-subscriber --subscriber-arn "$SUBSCRIBER_ARN" \ --log-configuration '{ "Level": "INFO", "IncludePayload": "FULL" }' aws eventsv2 describe-subscriber --subscriber-arn "$SUBSCRIBER_ARN" --query 'LogConfiguration'
Vérification

La deuxième description montre chaque champ du bloc avec les valeurs que vous vouliez.

Mettre à jour les filtres

Pour remplacer les filtres, transmettez un FilterConfiguration dont la Filters liste contient tous les filtres que l'abonné devrait avoir ; EventBridge combine les filtres pour différentes étendues avec ET. Pour supprimer tous les filtres, passez FilterConfiguration sous{}.

DemandeRésultat
FilterConfigurationomisLes filtres enregistrés restent
FilterConfiguration est {}Chaque filtre stocké est supprimé
Filtersest une liste non videLa liste est validée et remplace l'ensemble de la configuration du filtre
Filtersest une liste vide, ou Language est donnée sans FiltersInvalidInputException; une alimentation FilterConfiguration doit contenir au moins un filtre

Les changements de filtre sont limités à 24 par abonné par période de 24 heures consécutives. Seule une modification de l'ensemble des étendues et des modèles compte ; le fait de soumettre à nouveau une version identique FilterConfiguration ne compte pas. Le 25e changement échoue avecFILTER_CHANGE_LIMIT_EXCEEDED. Cette limite n'est pas un quota de service et ne peut pas être augmentée. Par conséquent, une conception qui réécrit les filtres en permanence devrait plutôt publier la valeur variable dans l'événement et ne filtrer qu'une seule fois cette valeur.

Quelle configuration utilise un événement déjà correspondant

EventBridge associe un événement à un abonné et le diffuse à différents moments, et il enregistre la version des filtres correspondant à chaque événement. Une mise à jour qui modifie la correspondance des filtres crée une nouvelle version du filtre et EventBridge stocke les paramètres du transformateur et de la cible avec celle-ci. Un événement mis en correspondance avant la modification est fourni avec l'ancien transformateur et les paramètres cibles ; un événement mis en correspondance après avoir utilisé les nouveaux paramètres. Il en va de même après l'arrêt et la reprise d'un abonné.

Mise à jour du filtreCrée une nouvelle version de filtre
Modifier un schémaOui
Modifier les scopes dotés d'un filtreOui
Ajouter le premier filtreOui
Effacer tous les filtresOui, quand les filtres étaient stockés
Réorganisation des filtres équivalentsNon
Modification uniquement LanguageNon

Ainsi, lorsqu'un filtre et un transformateur ou un paramètre cible forment un même comportement, modifiez-les dans la même requête. La demande suivante associe un nouveau DATA filtre au transformateur écrit pour celui-ci, de sorte qu'aucun événement n'est fourni avec une paire non concordante.

{ "SubscriberArn": "arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890", "FilterConfiguration": { "Filters": [ { "Scope": "DATA", "Pattern": "{\"type\":[\"priority\"]}" } ] }, "Transformer": { "Type": "JSONATA", "JsonataConfiguration": { "Expression": "{% {\"version\": 2, \"event\": $events.Data} %}" } } }

Une mise à jour qui modifie uniquement le transformateur ou les paramètres cibles ne crée aucune version de filtre. Une fois qu'elle s'est propagée, la nouvelle configuration s'applique aux événements en attente de livraison et aux nouvelles tentatives ultérieures. Le rôle de diffusion, la politique de nouvelle tentative, la destination en cas d'échec, le traitement par lots et la configuration de journalisation prennent toujours les dernières valeurs propagées, quelle que soit la version correspondant à l'événement. Comme il est EventBridge possible d'évaluer à nouveau les paramètres du transformateur et de la cible en cas de nouvelle tentative, une fonction JSonata dépendante du temps ou non déterministe $now() peut produire un résultat différent à chaque tentative ; ne supposez pas qu'une nouvelle demande contient des octets identiques.

UpdateSubscriberstocke la modification avant son retour, et les composants de diffusion la récupèrent après un délai de propagation, pendant lequel les événements peuvent toujours utiliser la configuration précédente. DescribeSubscriberconfirme ce qui est enregistré, et non pas que tous les composants ont été commutés. Après une mise à jour, publiez un événement de test et vérifiez la charge utile cible avant de vous fier au nouveau comportement.

La création ou la suppression d'un seul abonné s'exécute à la fois sur un bus, pour chaque compte qui l'utilise ; un appel simultané échoue avecConcurrentModificationException. Réessayez.

Suspension et reprise

Un abonné livre uniquement pendant qu'Stateil estRUNNING. Réglez-le sur pause ; les événements continuent de s'accumuler dans le bus, limités par la rétention. STOPPED Lorsque vous le remettez àRUNNING, ResumePosition décide de ce qu'il adviendra de l'arriéré.

  • LAST_PROCESSED, valeur par défaut : continuer à partir de l'endroit où la diffusion s'est arrêtée, de sorte que chaque événement publié alors que l'abonné était arrêté soit diffusé, le plus ancien en premier.

  • LATEST: évitez le backlog et ne diffusez que les événements publiés à partir de maintenant. Un abonné qui rejoue ne peut pas l'utiliser : une rediffusion illimitée est toujours en train de rattraper son retard, et une rediffusion limitée n'atteint jamais les événements en direct.

aws eventsv2 update-subscriber \ --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890 \ --state STOPPED aws eventsv2 update-subscriber \ --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890 \ --state RUNNING \ --resume-position LAST_PROCESSED

ResumePositionn'est accepté que pour l'appel qui déplace l'état de STOPPED àRUNNING. Lors de cet appel EventBridge , le point de terminaison de distribution de l'abonné est à nouveau détectable ; si cette étape échoue, l'appel est renvoyéInternalException, rien n'est enregistré et l'abonné resteSTOPPED, alors réessayez de faire la demande. Un abonné que le propriétaire du bus a révoqué ne livre dans aucun des États ; voirRévocation d'un abonné ou d'une source d'événement.

Erreurs qu'une mise à jour peut renvoyer

EventBridge valide la configuration mise à jour par rapport au type de cible stocké de l'abonné, de sorte qu'un SqsParameters bloc sur un abonné dont la cible est une fonction Lambda est rejeté.

ConditionErreur
L'abonné n'existe pasResourceNotFoundException
L'abonné est révoquéInvalidStateException
La demande comporte plusieurs blocs de paramètres ciblesInvalidInputException
Les paramètres de cible ne correspondent pas au type de cible enregistréInvalidInputException
Le transformateur n'est pas pris en charge pour la cibleInvalidInputException
Une expression JSonata n'est pas valideInvalidInputException
Une valeur de lot est en dehors des limites de la cibleInvalidInputException