Введение
Сервису заказов нужно место для хранения сведений о заказах и поиска по идентификатору заказа. Вы создадите таблицу DynamoDB, сохраните два типизированных элемента, обновите упакованный заказ и удалите временный заказ. В конце вы удалите только свою таблицу, сохранив постороннюю эталонную таблицу.
Эта работа начинается независимо в новой среде. Начните с работ AWS Foundations о командах терминала, вызывающей идентичности и именах ресурсов. Используйте /home/labex/project и подготовленное временное подключение. AWS View отображает фактическое состояние таблиц и элементов; это не AWS Console.
Связь с сертификацией
| Сертификация | Задача экзамена | Практика |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Задача 3.4 | Ключи DynamoDB, типизированные элементы и операции с данными. |
| Solutions Architect – Associate (SAA-C03) | Задача 3.3 | Ключи DynamoDB, типизированные элементы и операции с данными. |
| Developer – Associate (DVA-C02) | Задача 1.3 | Ключи DynamoDB, типизированные элементы и операции с данными. |
| Data Engineer – Associate (DEA-C01) | Задача 2.4 | Базовая практика: Ключи DynamoDB, типизированные элементы и операции с данными. |
Обзор работы

Создайте таблицу заказов
На этом шаге вы создадите таблицу для небольшого сервиса заказов. DynamoDB хранит элементы вместо строк, ограниченных полной схемой столбцов. Таблица объявляет первичный ключ; каждый элемент может иметь дополнительные атрибуты. Ключ раздела идентифицирует элемент в этой простой таблице.
Официальный AWS CLI и временное подключение подготовлены. Используйте этот рабочий каталог, затем изучите вызывающую сторону. Не вводите личные учётные данные.
cd /home/labex/project
aws sts get-caller-identity
ARN вызывающей стороны заканчивается на user/dynamodb-operator. Идентификатор аккаунта и ARN определяют подключение, а не ключ заказа.
Создайте labex-d01-orders с order_id как строковым (S) ключом раздела (HASH). --attribute-definitions объявляет только атрибуты ключа, а не каждое поле элемента. PAY_PER_REQUEST выбирает ёмкость по требованию вместо подготовленных единиц чтения и записи. В AWS запросы и хранение платные; этот выбор не означает бесплатное хранение.
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
Создание таблицы возвращает метаданные. Команда ожидания опрашивает сервис до доступности таблицы; это безопаснее предположения, что первый ответ означает готовность ресурса.
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}'
Ожидайте ACTIVE, ключ раздела order_id и PAY_PER_REQUEST. Посмотрите на AWS View вверху LabEx. Карточка заказов пока не имеет элементов; отдельная эталонная таблица принадлежит подготовленной среде и должна остаться без изменений.
Запишите и прочитайте типизированные элементы
На этом шаге вы сохраните два заказа и получите один по точному ключу. Низкоуровневый API DynamoDB использует типизированные атрибуты: S для строк и N для чисел. Значение N кодируется как строка JSON, но DynamoDB обрабатывает его как число. Денежные суммы здесь — целые единицы для небольшого синтетического примера.

Одинарные кавычки позволяют оболочке передавать JSON без изменений, включая двойные кавычки внутри. Каждый put-item создаёт полный элемент с собственным ключом. Успешная запись обычно ничего не выводит.
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"}}'
Получите O100 по первичному ключу. --consistent-read запрашивает строго согласованное чтение основной таблицы, полезное для изучения записи сразу после выполнения. По умолчанию чтения имеют итоговую согласованность.
aws dynamodb get-item \
--table-name labex-d01-orders \
--key '{"order_id":{"S":"O100"}}' \
--consistent-read
Item содержит O100, Ada, сумму 145 и статус NEW. Отсутствие неключевых атрибутов допустимо; отсутствие обязательного ключа — нет. В AWS View раскройте O100 внутри карточки заказов, чтобы увидеть фактический типизированный элемент, возвращённый тем же сервисом.
Обновите заказ и удалите временный элемент
На этом шаге вы измените O100, не заменяя остальные поля, затем удалите временный заказ O101. update-item применяет выражение к одному элементу по ключу. SET присваивает атрибуты. Псевдоним имени в выражении избегает конфликтов зарезервированных слов: #state обозначает status. Значения выражения несут типы DynamoDB.
Сервис заказов должен менять данные упаковки, сохраняя сведения о клиенте. PutItem заменил бы весь элемент с тем же ключом; UpdateItem меняет только указанные атрибуты. Возвращённое поле customer подтверждает сохранность остальных данных заказа.
--return-values ALL_NEW возвращает полный обновлённый элемент для немедленного изучения результата.
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
Возвращённые атрибуты сохраняют клиента Ada, а сумма становится 160 и статус — PACKED.
Удалите только O101 по точному ключу, затем снова прочитайте его.
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 показывает удалённый элемент. Последующее чтение возвращает {}, поскольку по этому ключу не осталось элемента; это успешное чтение без результата. В AWS View O101 исчезает, а O100 сохраняет обновлённые поля. Раскройте O100 и сравните сумму и статус.

Удалите только собственную таблицу
На этом шаге вы удалите таблицу заказов после проверки итоговых данных. Удаление таблицы удаляет все её элементы и индексы. Подтвердите точное имя перед удалением; никогда не перебирайте все таблицы, возвращённые сервисом.
aws dynamodb scan --table-name labex-d01-orders --consistent-read
Итоговое сканирование возвращает только O100 с суммой 160 и статусом PACKED. Scan изучает таблицу, а не один элемент по ключу; более крупные шаблоны доступа будут использовать Query в следующей работе.
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
Инвентаризация содержит labex-d01-reference и не содержит таблицу заказов. Эталонная заметка остаётся keep unchanged. Успешная инвентаризация и чтение эталонного ресурса доказывают работоспособность подключения; сбой аутентификации или сети не доказал бы удаление. Теперь AWS View показывает только сохранённый эталонный ресурс и Orders table absent. Временное подключение заканчивается с этой VM; не копируйте учётные данные куда-либо ещё.
Резюме
Вы создали таблицу с ёмкостью по требованию и строковым ключом раздела, записали типизированные элементы, выполнили строго согласованное чтение по ключу, обновили выбранные атрибуты и удалили элемент. Затем вы удалили только собственную таблицу и доказали, что посторонний эталонный ресурс остаётся читаемым. Эти операции создают основу для запросов по составному ключу и альтернативных шаблонов доступа следующих работ.
Подробнее см. в документации AWS: Таблицы, элементы, атрибуты и первичные ключи.



