Introdução
Um serviço de pedidos precisa de um lugar para armazenar detalhes de pedidos e consultá-los por ID de pedido. Você criará uma tabela DynamoDB, armazenará dois itens tipados, atualizará um pedido embalado e removerá um pedido temporário. Por fim, excluirá apenas a tabela que pertence à sua tarefa, preservando uma tabela de referência não relacionada.
Este laboratório começa de forma independente em um ambiente novo. Comece pelos laboratórios de AWS Foundations sobre comandos do terminal, identidade de quem faz a chamada e nomes de recursos. Use /home/labex/project e a conexão descartável preparada. AWS View exibe o estado efetivo das tabelas e itens; ele não é a AWS Console.
Relação com as certificações
| Certificação | Tarefa do exame | Prática |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Tarefa 3.4 | Chaves DynamoDB, itens tipados e operações de dados. |
| Solutions Architect – Associate (SAA-C03) | Tarefa 3.3 | Chaves DynamoDB, itens tipados e operações de dados. |
| Developer – Associate (DVA-C02) | Tarefa 1.3 | Chaves DynamoDB, itens tipados e operações de dados. |
| Data Engineer – Associate (DEA-C01) | Tarefa 2.4 | Prática dos fundamentos: Chaves DynamoDB, itens tipados e operações de dados. |
Visão geral do laboratório

Crie uma tabela de pedidos
Nesta etapa, você criará uma tabela para um pequeno serviço de pedidos. DynamoDB armazena itens em vez de linhas limitadas por um esquema completo de colunas. A tabela declara sua chave primária; cada item pode ter atributos adicionais. Uma chave de partição identifica um item nesta tabela simples.
A AWS CLI oficial e uma conexão descartável estão preparadas. Use este espaço de trabalho e inspecione quem faz a chamada. Não insira credenciais pessoais.
cd /home/labex/project
aws sts get-caller-identity
O ARN de quem faz a chamada termina com user/dynamodb-operator. O identificador de conta e o ARN identificam a conexão, não uma chave de pedido.
Crie labex-d01-orders com order_id como chave de partição (HASH) do tipo String (S). --attribute-definitions declara apenas atributos de chave, não todos os campos dos itens. PAY_PER_REQUEST seleciona capacidade sob demanda em vez de unidades provisionadas de leitura e escrita. Na AWS, solicitações e armazenamento geram cobranças; essa escolha não significa armazenamento gratuito.
aws dynamodb create-table \
--table-name labex-d01-orders \
--attribute-definitions AttributeName=order_id,AttributeType=S \
--key-schema AttributeName=order_id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
A criação da tabela retorna metadados. Um waiter consulta repetidamente o serviço até que a tabela esteja disponível; isso é mais seguro do que presumir que a primeira resposta significa que o recurso está pronto.
aws dynamodb wait table-exists --table-name labex-d01-orders
aws dynamodb describe-table \
--table-name labex-d01-orders \
--query 'Table.{State:TableStatus,Keys:KeySchema,Billing:BillingModeSummary.BillingMode}'
Espere ACTIVE, a chave de partição order_id e PAY_PER_REQUEST. Observe AWS View na parte superior no LabEx. O cartão de pedidos ainda não tem itens; a tabela de referência separada pertence ao ambiente preparado e deve permanecer inalterada.
Grave e leia itens tipados
Nesta etapa, você armazenará dois pedidos e recuperará um pela sua chave exata. A API de baixo nível do DynamoDB usa atributos tipados: S para strings e N para números. O valor de N é codificado como uma string JSON, mas DynamoDB o trata como número. Os valores monetários aqui são unidades inteiras para um pequeno exemplo sintético.

Aspas simples permitem que o shell passe o JSON inalterado, incluindo as aspas duplas dentro dele. Cada put-item cria um item completo com sua própria chave. Uma gravação bem-sucedida normalmente não tem saída.
aws dynamodb put-item \
--table-name labex-d01-orders \
--item '{"order_id":{"S":"O100"},"customer":{"S":"Ada"},"amount":{"N":"145"},"status":{"S":"NEW"}}'
aws dynamodb put-item \
--table-name labex-d01-orders \
--item '{"order_id":{"S":"O101"},"customer":{"S":"Ada"},"amount":{"N":"50"},"status":{"S":"NEW"}}'
Recupere O100 por sua chave primária. --consistent-read solicita uma leitura fortemente consistente da tabela base, útil ao inspecionar uma gravação imediatamente. Por padrão, leituras têm consistência eventual.
aws dynamodb get-item \
--table-name labex-d01-orders \
--key '{"order_id":{"S":"O100"}}' \
--consistent-read
O Item contém O100, Ada, amount 145 e status NEW. A ausência de atributos que não são chave é permitida; a ausência de uma chave obrigatória não. No AWS View, expanda O100 dentro do cartão de pedidos para ver o item tipado efetivamente retornado pelo mesmo serviço.
Atualize um pedido e remova um item temporário
Nesta etapa, você modificará O100 sem substituir seus outros campos e depois removerá o pedido temporário O101. update-item aplica uma expressão a um item identificado por chave. SET atribui valores a atributos. Um alias de nome na expressão evita conflitos com palavras reservadas: #state representa status. Os valores da expressão carregam seus tipos DynamoDB.
O serviço de pedidos precisa alterar os dados de preparação e preservar a identidade do cliente. PutItem substituiria o item inteiro com a mesma chave; UpdateItem altera apenas os atributos indicados. O campo customer retornado comprova que os demais dados do pedido foram preservados.
--return-values ALL_NEW retorna o item atualizado completo para que você possa inspecionar o resultado imediatamente.
aws dynamodb update-item \
--table-name labex-d01-orders \
--key '{"order_id":{"S":"O100"}}' \
--update-expression 'SET amount = :amount, #state = :state' \
--expression-attribute-names '{"#state":"status"}' \
--expression-attribute-values '{":amount":{"N":"160"},":state":{"S":"PACKED"}}' \
--return-values ALL_NEW
Os atributos retornados preservam customer Ada enquanto amount se torna 160 e status se torna PACKED.
Exclua apenas O101 pela chave exata e leia-o novamente.
aws dynamodb delete-item \
--table-name labex-d01-orders \
--key '{"order_id":{"S":"O101"}}' \
--return-values ALL_OLD
aws dynamodb get-item \
--table-name labex-d01-orders \
--key '{"order_id":{"S":"O101"}}' \
--consistent-read
ALL_OLD mostra o item excluído. A leitura seguinte retorna {} porque nenhum item permanece nessa chave; esta é uma leitura bem-sucedida sem resultado. No AWS View, O101 desaparece e O100 mantém seus campos atualizados. Expanda O100 e compare amount e status.

Limpe apenas a tabela do exercício
Nesta etapa, você removerá a tabela de pedidos após conferir seus dados finais. Excluir uma tabela remove todos os seus itens e índices. Confirme seu nome exato antes da exclusão; nunca percorra todas as tabelas retornadas pelo serviço para excluí-las.
aws dynamodb scan --table-name labex-d01-orders --consistent-read
O scan final retorna apenas O100 com amount 160 e status PACKED. Um scan examina uma tabela em vez de um único item identificado por chave; padrões de acesso maiores usarão Query no próximo laboratório.
aws dynamodb delete-table --table-name labex-d01-orders
aws dynamodb wait table-not-exists --table-name labex-d01-orders
aws dynamodb list-tables
aws dynamodb get-item \
--table-name labex-d01-reference \
--key '{"id":{"S":"platform"}}' \
--consistent-read
O inventário contém labex-d01-reference e nenhuma tabela de pedidos. A nota de referência permanece keep unchanged. Um inventário e uma leitura de referência bem-sucedidos comprovam que a conexão ainda funciona; uma falha de autenticação ou rede não comprovaria exclusão. AWS View agora mostra apenas a referência preservada e Orders table absent. A conexão descartável termina com esta VM; não copie suas credenciais para outro lugar.
Resumo
Você criou uma tabela sob demanda com uma chave de partição String, gravou itens tipados, realizou uma leitura fortemente consistente por chave, atualizou atributos selecionados e removeu um item. Depois, excluiu apenas a tabela do exercício e comprovou que a referência não relacionada permaneceu legível. Essas operações estabelecem a base para consultas de chave composta e padrões alternativos de acesso nos próximos laboratórios.
Para aprofundar o tema, consulte a documentação da AWS: Tabelas, itens, atributos e chaves primárias.



