Didacticiel : création d'une table globale - Amazon DynamoDB

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.

Didacticiel : création d'une table globale

Cette section explique comment créer une table globale à l'aide de la console Amazon DynamoDB ou de l' AWS Command Line Interface (AWS CLI).

Création d'une table globale (console)

Procédez comme suit pour créer une table globale à l'aide du AWS Management Console. L'exemple suivant crée une table globale avec des tables de réplica aux États-Unis et en Europe.

  1. Ouvrez la console DynamoDB à l'adresse https://console.aws.amazon.com/dynamodb/home. Pour cet exemple, choisissez la région USA Est (Ohio).

  2. Dans le volet de navigation sur le côté gauche de la console, choisissez Tables.

  3. Choisissez Create table (Créer une table).

  4. Sur la page Créer une table, procédez comme suit :

    1. Sous Nom du tableau, saisissez Music.

    2. Pour Clé de partition, saisissez Artist.

    3. Pour touche de tri, entrezSongTitle.

    4. Conservez la sélection par défaut de chaîne pour la clé de partition et la clé de tri.

    5. Conservez les autres sélections par défaut sur la page, puis choisissez Créer une table.

      Cette nouvelle table est la première réplique d'une nouvelle table globale. Il s'agit du prototype pour les autres répliques de tables que vous ajouterez ultérieurement.

  5. Sur la page Tables, choisissez la table musicale que vous venez de créer, puis procédez comme suit :

    1. Choisissez l'onglet Tableaux globaux, puis sélectionnez Créer une réplique.

    2. Dans la liste déroulante Régions de réplication disponibles, sélectionnez US West (Oregon) us-west-2.

      La console vérifie qu'aucune table portant le même nom n'existe dans la région sélectionnée. (Si une table du même nom existe, vous devez la supprimer avant de pouvoir créer une nouvelle table de réplicas dans cette région.)

    3. Choisissez Créer un réplica. Cela lance le processus de création de tables dans la région us-west-2 des États-Unis Ouest (Oregon).

      L'onglet Tables globales de la table Music (et de toute autre table répliquée) indique que la table a été répliquée dans plusieurs régions.

    4. Ajoutez une autre région afin que votre table globale soit répliquée et synchronisée aux États-Unis et en Europe. Pour ce faire, répétez l'étape 5.b, mais cette fois, spécifiez Europe (Francfort) eu-central-1 au lieu de US West (Oregon) us-west-2.

  6. Assurez-vous que vous utilisez toujours le AWS Management Console dans la région USA Est (Ohio). Ensuite, procédez comme suit :

    1. Sélectionnez Explore table items (Explorer les éléments de la table).

    2. Choisissez Créer un élément.

    3. Pour Artist (Artiste), saisissez item_1.

    4. Pour SongTitle, saisissez Song Value 1.

    5. Pour enregistrer l'article, choisissez Créer un article.

  7. Après quelques instants, l'élément est répliqué dans les trois régions de votre table globale. Pour vérifier cela, sur la console, dans le sélecteur de région situé en haut à droite, choisissez Europe (Francfort). La table de musique en Europe (Francfort) devrait contenir le nouvel article.

  8. Répétez l'étape 7 et choisissez US West (Oregon) pour vérifier la réplication dans cette région.

Création d'une table globale (AWS CLI)

Suivez ces étapes pour créer une table globale Music avec AWS CLI. L'exemple suivant crée une table globale avec des tables de réplica aux États-Unis et en Europe.

  1. Créez une table (Music) dans la région USA Est (Ohio), avec DynamoDB Streams activé (NEW_AND_OLD_IMAGES).

    aws dynamodb create-table \ --table-name Music \ --attribute-definitions \ AttributeName=Artist,AttributeType=S \ AttributeName=SongTitle,AttributeType=S \ --key-schema \ AttributeName=Artist,KeyType=HASH \ AttributeName=SongTitle,KeyType=RANGE \ --billing-mode PAY_PER_REQUEST \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \ --region us-east-2
  2. Créez une table Music identique dans la région USA Est (Virginie du Nord).

    aws dynamodb update-table --table-name Music --cli-input-json \ '{ "ReplicaUpdates": [ { "Create": { "RegionName": "us-east-1" } } ] }' \ --region=us-east-2
  3. Répétez l'étape 2 pour créer une table dans la région Europe (Irlande) (eu-west-1).

  4. Vous pouvez afficher la liste des réplicas créés en utilisant describe-table.

    aws dynamodb describe-table --table-name Music --region us-east-2
  5. Pour vérifier que la réplication fonctionne, ajoutez un élément à la table Music dans la région USA Est (Ohio).

    aws dynamodb put-item \ --table-name Music \ --item '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \ --region us-east-2
  6. Patientez quelques secondes, puis vérifiez que l'élément a été correctement répliqué dans les régions USA Est (Virginie du Nord) et Europe (Irlande).

    aws dynamodb get-item \ --table-name Music \ --key '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \ --region us-east-1
    aws dynamodb get-item \ --table-name Music \ --key '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \ --region eu-west-1
  7. Supprimez la table de réplique dans la région Europe (Irlande).

    aws dynamodb update-table --table-name Music --cli-input-json \ '{ "ReplicaUpdates": [ { "Delete": { "RegionName": "eu-west-1" } } ] }'

Création d'une table globale (Java)

L'exemple de code java suivant crée une table Music dans la région Europe (Irlande), puis un réplica dans la région Asie-Pacifique (Séoul).

package com.amazonaws.codesamples.gtv2 import java.util.logging.Logger; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException; import com.amazonaws.services.dynamodbv2.model.AttributeDefinition; import com.amazonaws.services.dynamodbv2.model.BillingMode; import com.amazonaws.services.dynamodbv2.model.CreateReplicationGroupMemberAction; import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; import com.amazonaws.services.dynamodbv2.model.DescribeTableRequest; import com.amazonaws.services.dynamodbv2.model.GlobalSecondaryIndex; import com.amazonaws.services.dynamodbv2.model.KeySchemaElement; import com.amazonaws.services.dynamodbv2.model.KeyType; import com.amazonaws.services.dynamodbv2.model.Projection; import com.amazonaws.services.dynamodbv2.model.ProjectionType; import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughputOverride; import com.amazonaws.services.dynamodbv2.model.ReplicaGlobalSecondaryIndex; import com.amazonaws.services.dynamodbv2.model.ReplicationGroupUpdate; import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType; import com.amazonaws.services.dynamodbv2.model.StreamSpecification; import com.amazonaws.services.dynamodbv2.model.StreamViewType; import com.amazonaws.services.dynamodbv2.model.UpdateTableRequest; import com.amazonaws.waiters.WaiterParameters; public class App { private final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); public static void main( String[] args ) { String tableName = "Music"; String indexName = "index1"; Regions calledRegion = Regions.EU_WEST_1; Regions destRegion = Regions.AP_NORTHEAST_2; AmazonDynamoDB ddbClient = AmazonDynamoDBClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider("default")) .withRegion(calledRegion) .build(); LOGGER.info("Creating a regional table - TableName: " + tableName +", IndexName: " + indexName + " ....."); ddbClient.createTable(new CreateTableRequest() .withTableName(tableName) .withAttributeDefinitions( new AttributeDefinition() .withAttributeName("Artist").withAttributeType(ScalarAttributeType.S), new AttributeDefinition() .withAttributeName("SongTitle").withAttributeType(ScalarAttributeType.S)) .withKeySchema( new KeySchemaElement().withAttributeName("Artist").withKeyType(KeyType.HASH), new KeySchemaElement().withAttributeName("SongTitle").withKeyType(KeyType.RANGE)) .withBillingMode(BillingMode.PAY_PER_REQUEST) .withGlobalSecondaryIndexes(new GlobalSecondaryIndex() .withIndexName(indexName) .withKeySchema(new KeySchemaElement() .withAttributeName("SongTitle") .withKeyType(KeyType.HASH)) .withProjection(new Projection().withProjectionType(ProjectionType.ALL))) .withStreamSpecification(new StreamSpecification() .withStreamEnabled(true) .withStreamViewType(StreamViewType.NEW_AND_OLD_IMAGES))); LOGGER.info("Waiting for ACTIVE table status ....."); ddbClient.waiters().tableExists().run(new WaiterParameters<>(new DescribeTableRequest(tableName))); LOGGER.info("Testing parameters for adding a new Replica in " + destRegion + " ....."); CreateReplicationGroupMemberAction createReplicaAction = new CreateReplicationGroupMemberAction() .withRegionName(destRegion.getName()) .withGlobalSecondaryIndexes(new ReplicaGlobalSecondaryIndex() .withIndexName(indexName) .withProvisionedThroughputOverride(new ProvisionedThroughputOverride() .withReadCapacityUnits(15L))); ddbClient.updateTable(new UpdateTableRequest() .withTableName(tableName) .withReplicaUpdates(new ReplicationGroupUpdate() .withCreate(createReplicaAction.withKMSMasterKeyId(null)))); } }