Tutorial: criar uma tabela global - Amazon DynamoDB

Tutorial: criar uma tabela global

Esta seção descreve como criar uma tabela global usando o console do Amazon DynamoDB ou a AWS Command Line Interface (AWS CLI).

Criar uma tabela global (console)

Siga estas etapas para criar uma tabela global usando o AWS Management Console. O exemplo a seguir cria uma tabela global com tabelas-réplica nos Estados Unidos e na Europa.

  1. Abra o console do DynamoDB em https://console.aws.amazon.com/dynamodb/. Para este exemplo, escolha a região Leste dos EUA (Ohio).

  2. No painel de navegação, no lado esquerdo do console, selecione Tables (Tabelas).

  3. Selecione Create Table (Criar tabela).

  4. Na página Criar tabela, faça o seguinte:

    1. Em Table name (Nome da tabela), insira Music.

    2. Em Partition key, (Chave de partição), insira Artist.

    3. Em Chave de classificação, insira SongTitle.

    4. Mantenha a seleção padrão de String para a Chave de partição e a Chave de classificação.

    5. Mantenha as demais seleções padrão na página e escolha Criar tabela.

      Essa nova tabela serve como a primeira tabela de réplica em uma nova tabela global. Ela é o protótipo das outras tabelas de réplica que serão adicionadas posteriormente.

  5. Na página Tabelas, escolha a tabela Music recém-criada e faça o seguinte:

    1. Selecione a guia Tabelas globais e escolha Criar réplica.

    2. Na lista suspensa Regiões de replicação disponíveis, escolha US West (Oregon) us-west-2 (Oeste dos EUA [Oregon], us-west-2).

      O console faz uma verificação para garantir que não exista nenhuma tabela com o mesmo nome na região selecionada. Se existir uma tabela com o mesmo nome, será necessário excluir a tabela existente para criar outra tabela-réplica nessa região.

    3. Escolha Create replica (Criar réplica). Isso inicia o processo de criação da tabela na região Oeste dos EUA (Oregon), us-west-2.

      A guia Tabelas globais da tabela Music (e de qualquer outra tabela de réplica) mostra que a tabela foi replicada em várias regiões.

    4. Adicione outra região para que a tabela global seja replicada e sincronizada nos Estados Unidos e na Europa. Para fazer isso, repita a etapa 5.b, mas desta vez especifique Europe (Frankfurt) eu-central-1 (Europa [Frankfurt], eu-central-1) em vez de US West (Oregon) us-west-2 (Oeste dos EUA [Oregon], us-west-2).

  6. Continue usando o AWS Management Console na região Leste dos EUA (Ohio). Então, faça o seguinte:

    1. Escolha Explore table items (Explorar itens da tabela).

    2. Selecione Create Item (Criar item).

    3. Em Artist (Artista), insira item_1.

    4. Em SongTitle (Nome da música), insira Song Value 1.

    5. Para salvar o item, selecione Criar item.

  7. Pouco tempo depois o item será replicado em todas as três regiões da tabela global. Para verificar, no console, no seletor de regiões no canto superior direito do console, selecione Europe (Frankfurt) (Europa (Frankfurt)). A tabela Music na região Europa (Frankfurt) deve conter o novo item.

  8. Repita a etapa 7 e escolha Oeste dos EUA (Oregon) para verificar a replicação nessa região.

Criar uma tabela global (AWS CLI)

Siga estas etapas para criar uma tabela global Music usando a AWS CLI. O exemplo a seguir cria uma tabela global com tabelas-réplica nos Estados Unidos e na Europa.

  1. Crie uma nova tabela (Music) na região Leste dos EUA (Ohio), com o DynamoDB Streams habilitado (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. Crie uma tabela Music idêntica na região Leste dos EUA (Norte da Virgínia).

    aws dynamodb update-table --table-name Music --cli-input-json \ '{ "ReplicaUpdates": [ { "Create": { "RegionName": "us-east-1" } } ] }' \ --region=us-east-2
  3. Repita a etapa 2 para criar uma tabela na região Europa (Irlanda) (eu-west-1).

  4. É possível visualizar a lista de réplicas criadas usando describe-table.

    aws dynamodb describe-table --table-name Music --region us-east-2
  5. Para verificar se a replicação está funcionando, adicione um novo item à tabela Music na região Leste dos EUA (Ohio).

    aws dynamodb put-item \ --table-name Music \ --item '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \ --region us-east-2
  6. Aguarde alguns segundos e verifique se o item foi replicado com êxito nas regiões Leste dos EUA (Norte da Virgínia) e Europa (Irlanda).

    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. Exclua a tabela-réplica na região Europa (Irlanda).

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

Criar uma tabela global (Java)

O exemplo de código Java a seguir cria uma tabela Music na região Europa (Irlanda) e, depois, cria uma réplica na região Ásia-Pacífico (Seul).

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)))); } }