Modifier la récupération de données pour DynamoDB Streams - Amazon DynamoDB

Modifier la récupération de données pour DynamoDB Streams

DynamoDB Streams récupère une séquence chronologique des modifications au niveau élément dans toute table DynamoDB et stocke ces informations dans un journal pendant jusqu'à 24 heures. Les applications ont accès à ce journal et affichent les éléments de données à mesure qu'ils s'affichent avant et après qu'ils ont été modifiés, pratiquement en temps réel.

Le chiffrement au repos chiffre les données dans les flux DynamoDB Streams. Pour plus d'informations, consultez Chiffrement de DynamoDB au repos.

Un flux DynamoDB est un flux ordonné d'informations sur les modifications apportées aux éléments d'une table DynamoDB. Lorsque vous activez un flux sur une table, DynamoDB récupère des informations sur chaque modification apportée à des éléments de données dans la table.

Chaque fois qu'une application crée, met à jour ou supprime des éléments dans la table, DynamoDB Streams écrit un registre de flux avec le ou les attributs de clé primaire des éléments qui ont été modifiés. Un registre de flux contient des informations sur une modification de données dans un seul élément d'une table DynamoDB. Vous pouvez configurer le flux de telle sorte que les enregistrements de flux récupèrent des informations supplémentaires, telles que les images « avant » et « après » d'éléments modifiés.

DynamoDB Streams permet de s'assurer de ce qui suit :

  • Chaque enregistrement de flux s'affiche exactement une fois dans le flux.

  • Pour chaque élément modifié dans une table DynamoDB, les registres de flux apparaissent dans l'ordre des modifications réelles.

DynamoDB Streams écrit les registres de flux en quasi-temps réel, afin que vous puissiez créer des applications qui consomment ces flux et entreprennent des actions basées sur le contenu.

Points de terminaison pour DynamoDB Streams

AWS gère des points de terminaisons distincts pour DynamoDB et DynamoDB Streams. Pour utiliser des tables et index de base de données, votre application doit accéder à un point de terminaison DynamoDB. Pour lire et traiter des registres DynamoDB Streams, votre application doit pouvoir accéder à un point de terminaison DynamoDB Streams dans la même région.

La convention de dénomination des points de terminaison DynamoDB Streams est streams.dynamodb.<region>.amazonaws.com. Par exemple, si vous utilisez le point de terminaison dynamodb.us-west-2.amazonaws.com pour accéder à DynamoDB, vous utilisez le point de terminaison streams.dynamodb.us-west-2.amazonaws.com pour accéder à DynamoDB Streams.

Note

Pour accéder à la liste complète des régions et points de terminaison DynamoDB et DynamoDB Streams, consultez Régions et points de terminaison dans les Références générales AWS.

Les kits SDK AWS fournissent des clients distincts pour DynamoDB et DynamoDB Streams. En fonction de vos exigences, votre application peut accéder à un point de terminaison DynamoDB, un point de terminaison DynamoDB Streams, ou aux deux en même temps. Pour vous connecter aux deux points de terminaison, votre application doit instancier deux clients, l'un pour DynamoDB, et l'autre pour DynamoDB Streams.

Activation d'un flux

Vous pouvez activer un flux sur une nouvelle table lors de la création de celle-ci à l'aide de l'AWS CLI ou de l'un des kits SDK AWS. Vous pouvez également activer ou désactiver un flux sur une table existante, ou modifier les paramètres d'un flux. DynamoDB Streams opérant de manière asynchrone, l'activation d'un flux n'a aucune incidence sur les performances d'une table.

La manière la plus simple de gérer DynamoDB Streams consiste à utiliser l'AWS Management Console.

  1. Connectez-vous à l'AWS Management Console et ouvrez la console DynamoDB à l'adresse https://console.aws.amazon.com/dynamodb/.

  2. Dans le tableau de bord de la console DynamoDB, choisissez Tables, puis sélectionnez une table.

  3. Dans l‘onglet Exportations et flux, dans la section Détails du flux DynamoDB, choisissez Activer.

  4. Dans la fenêtre Gérer le flux DynamoDB, choisissez les informations qui seront écrites dans le flux chaque fois que des données de la table seront modifiées :

    • Attributs de clés uniquement – Uniquement les attributs de clé de l'élément modifié.

    • New image (Nouvelle image) – L'élément entier, tel qu'il apparaît après sa modification.

    • Old image (Ancienne image) – L'élément entier, tel qu'il apparaissait avant sa modification.

    • New and old images (Nouvelle et ancienne images) – La nouvelle image et l'ancienne image de l'élément.

    Lorsque les paramètres vous conviennent, choisissez Activer le flux.

  5. (Facultatif) Pour désactiver un flux existant, choisissez Désactiver sous Détails du flux DynamoDB.

Vous pouvez également utiliser les API CreateTable ou UpdateTable pour activer ou modifier un flux. Le paramètre StreamSpecification détermine la façon dont le flux est configuré :

  • StreamEnabled – Spécifique si un flux de données est activé (true) ou désactivé (false) pour la table.

  • StreamViewType – Spécifie les informations à écrire dans le flux à chaque modification des données de la table :

    • KEYS_ONLY – Uniquement les attributs de clé de l'élément modifié.

    • NEW_IMAGE – L'élément entier, tel qu'il apparaît après sa modification.

    • OLD_IMAGE – L'élément entier, tel qu'il apparaissait avant sa modification.

    • NEW_AND_OLD_IMAGES – La nouvelle image et l'ancienne image de l'élément.

Vous pouvez activer ou désactiver un flux à tout moment. Cependant, vous recevez un ResourceInUseException si vous essayez d'activer un flux sur une table qui en possède déjà un. Vous recevez un ValidationException si vous essayez de désactiver un flux sur une table qui n'en possède pas un.

Lorsque vous définissez StreamEnabled sur true, DynamoDB crée un flux avec un descripteur de flux unique qui lui est attribué. Si vous désactivez et puis réactivez un flux sur la table, un flux est créé avec un descripteur de flux différent.

Chaque flux est identifié de manière unique par un Amazon Resource Name (ARN). Voici un exemple d'ARN pour un flux sur une table DynamoDB nommée TestTable.

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

Pour déterminer le dernier descripteur de flux pour une table, émettez une demande DynamoDB DescribeTable, puis recherchez l'élément LatestStreamArn dans la réponse.

Note

Il n'est pas possible de modifier un StreamViewType une fois qu'un flux a été configuré. Si vous devez apporter des modifications à un flux après sa configuration, vous devez désactiver le flux actuel et en créer un nouveau.

Lecture et traitement de flux

Pour lire et traiter un flux, votre application doit se connecter à un point de terminaison DynamoDB Streams et émettre des demandes d'API.

Un flux se compose d'enregistrements de flux. Chaque registre de flux représente une modification de donnée unique dans la table DynamoDB à laquelle le flux appartient. Chaque enregistrement de flux se voit attribuer un numéro de séquence, ce qui reflète l'ordre dans lequel l'enregistrement a été publié dans le flux.

Les enregistrements de flux sont organisés en groupes, ou partitions. Chaque partition agit comme un conteneur pour plusieurs enregistrements de flux et contient les informations requises pour accéder à ces enregistrements et les itérer. Les enregistrements de flux au sein d'une partition sont automatiquement supprimés au bout de 24 heures.

Les partitions sont éphémères. Elles sont créées et supprimées automatiquement, en fonction des besoins. Toute partition peut également se diviser en plusieurs partitions nouvelles. Cela se produit également automatiquement. (Notez qu'il est aussi possible pour une partition parent d'avoir une seule partition enfant). Une partition peut se diviser en réponse à des niveaux élevés d'activité d'écriture sur sa table parent, de telle sorte que les applications puissent traiter les enregistrements issus de plusieurs partitions en parallèle.

Si vous désactivez un flux, toute partition ouverte sera fermée. Les données du flux restent lisibles pendant 24 heures.

Comme les partitions ont une lignée (parent et enfants), une application doit toujours traiter une partition parent avant de traiter une partition enfant. Cela garantit que les enregistrements de flux sont également traités dans l'ordre adéquat. (Si vous utilisez l'adaptateur DynamoDB Streams Kinesis, cela est géré automatiquement. Votre application traite les partitions et les registres de flux dans l'ordre correct. Elle gère automatiquement les partitions nouvelles ou ayant expiré, en plus des partitions qui ont été scindées pendant l'exécution de l'application. Pour plus d'informations, consultez Utilisation de l'adaptateur DynamoDB Streams Kinesis pour traiter des registres de flux.)

Le schéma suivant illustre la relation entre un flux de données, les partitions dans le flux et les enregistrements de flux dans les partitions.

Note

Si vous effectuez une opération PutItem ou UpdateItem qui ne modifie aucune donnée dans un élément, DynamoDB Streams n'écrit pas de registre de flux pour cette opération.

Pour accéder à un flux de données et traiter les enregistrements de flux qu'il contient, vous devez effectuer les opérations suivantes :

  • Déterminer l'Amazon Resource Name (ARN) unique du flux auquel vous souhaitez accéder.

  • Déterminer quelles sont la ou les partitions du flux qui contiennent les enregistrements de flux qui vous intéressent.

  • Accéder aux partitions et récupérer les enregistrements de flux que vous voulez.

Note

Pas plus de 2 processus ne doivent lire simultanément à partir de la même partition de flux. Avoir plus de 2 lecteurs par partition peut entraîner une limitation.

L'API DynamoDB Streams fournit les actions suivantes à l'usage des programmes d'application :

  • ListStreams – Renvoie la liste des descripteurs de flux pour le compte et le point de terminaison actuels. Vous pouvez en option demander uniquement les descripteurs de flux pour un nom de table particulier.

  • DescribeStream – Renvoie des informations détaillées sur un flux donné. La file d'attente inclut une liste de partitions associées au flux, y compris les ID de partition.

  • GetShardIterator – Renvoie un itérateur de partition décrivant un emplacement au sein d'une partition. Vous pouvez demander que l'itérateur fournisse un accès au point le plus ancien, au point le plus récent ou à un point particulier dans le flux.

  • GetRecords – Renvoie les registres de flux à partir d'une partition donnée. Vous devez fournir l'itérateur de partition renvoyé à partir d'une requête GetShardIterator.

Pour des description complètes de ces actions d'API, y compris des exemples de demandes et de réponses, consultez la Référence d'API Amazon DynamoDB Streams.

Limite de conservation des données pour DynamoDB Streams

Toutes les données dans DynamoDB Streams ont un time-to-live de 24 heures. Vous pouvez extraire et analyser les 24 dernières heures d'activité d'une table donnée. Cependant, les données datant de plus de 24 heures sont susceptibles d'être supprimées à tout moment.

Si vous désactivez un flux sur une table, les données du flux continueront d'être lisibles pendant 24 heures. Passé ce délai, les données expirent et les enregistrements de flux sont supprimés automatiquement. Il n'existe pas de mécanisme pour supprimer manuellement un flux existant. Vous devez attendre que la limite de rétention expire (24 heures) et tous les enregistrements de flux seront supprimés.