Создайте таблицу DynamoDB для заказов

AWSBeginner
Практиковаться сейчас

Введение

Сервису заказов нужно место для хранения сведений о заказах и поиска по идентификатору заказа. Вы создадите таблицу 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, типизированные элементы и операции с данными.

Обзор работы

Концептуальная схема с иконками AWS4, экспортированная в draw.io: AWS CLI управляет таблицей заказов с ключом order_id, обновляет выбранные атрибуты и удаляет только ресурсы работы.

Создайте таблицу заказов

На этом шаге вы создадите таблицу для небольшого сервиса заказов. 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 обрабатывает его как число. Денежные суммы здесь — целые единицы для небольшого синтетического примера.

Два примерных элемента используют order_id как ключ; каждый атрибут несёт тип 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: Таблицы, элементы, атрибуты и первичные ключи.