TT-QA

Гайды · AWS для AQA/SDET

AWS для AQA и SDET: локальная практика

За 30-45 минут ученик запускает один backend-flow у себя на компьютере: API принимает заказ, событие проходит через EventBridge и SQS, worker пишет receipt в S3, а состояние меняется в DynamoDB.

Проверено:

Скачать ZIP с GitHub Открыть исходники на GitHub

Что ученик сделает руками

Это не курс по DevOps. Практика собрана под AQA/SDET: запустить стенд, создать данные, увидеть очередь, проверить файл в S3, прогнать интеграционный тест и объяснить flow на собеседовании.

Стенд работает локально через Docker и LocalStack. Реальный AWS-аккаунт не нужен.

Схема локального AWS flow: Browser, API, DynamoDB, EventBridge, SQS, worker, S3
Учебный flow: HTTP-запрос создает заказ, событие попадает в очередь, worker обрабатывает сообщение и оставляет проверяемые следы в DynamoDB и S3.
DynamoDBсостояние заказа
EventBridgeмаршрутизация события
SQSочередь для async обработки
S3receipt-файл после обработки

Как это связано с Kafka и Postgres

SQS и EventBridge похожи на куски event-driven архитектуры, но это не Kafka. Kafka хранит поток событий в топиках, а consumer groups читают его со своими offset. SQS проще: это managed queue. Сообщение взяли, обработали, удалили. Если обработка упала, сообщение вернется в очередь или уйдет в DLQ после retry.

EventBridge в этом проекте играет роль event router. API публикует событие OrderCreated, rule отправляет его в SQS. На реальном проекте таким же способом событие может уходить в несколько сервисов.

DynamoDB не заменяет Postgres один к одному. Postgres хранит связанные таблицы и хорошо подходит для SQL, JOIN, транзакций и сложных выборок. DynamoDB хранит items по ключам и требует заранее понимать access pattern: как именно приложение будет читать и писать данные.

Postgres

  • таблицы и связи;
  • SQL-запросы и JOIN;
  • транзакции и ограничения;
  • удобен для гибких выборок.

DynamoDB

  • таблица с items;
  • partition key и sort key;
  • быстрые чтения по известному ключу;
  • дорогой scan, если модель данных выбрана плохо.

Что установить

Нужны Docker Desktop и Node.js 20 или новее. AWS CLI ставить не нужно: в контейнере LocalStack есть команда awslocal, через неё ученик смотрит S3, SQS, DynamoDB и EventBridge.

Скачайте архив с GitHub и распакуйте его в отдельную папку:

aws-sdet-fast-dive.zip на GitHub

Исходники лежат в отдельном GitHub-репозитории: tolcheev/aws-sdet-fast-dive.

Проверка инструментов
docker --version
node -v
npm -v

Архив содержит README.md, STUDENT_GUIDE.md, CASES.md, быстрые скрипты для Mac и Windows, исходный код API, worker и тесты.

Запуск на macOS

Откройте Terminal в папке, куда скачали архив.

Команды для macOS
curl -L -o aws-sdet-fast-dive.zip https://github.com/tolcheev/aws-sdet-fast-dive/archive/refs/heads/main.zip
unzip aws-sdet-fast-dive.zip
mv aws-sdet-fast-dive-main aws-sdet-fast-dive
cd aws-sdet-fast-dive
cp .env.example .env
npm install
bash scripts/mac/start.sh

Скрипт поднимет LocalStack, создаст локальные AWS-ресурсы и запустит API. После строки Open http://localhost:3000 откройте страницу в браузере.

Запуск на Windows

Распакуйте архив через Extract All. Откройте PowerShell внутри папки проекта.

Команды для Windows PowerShell
Invoke-WebRequest -Uri "https://github.com/tolcheev/aws-sdet-fast-dive/archive/refs/heads/main.zip" -OutFile aws-sdet-fast-dive.zip
Expand-Archive .\aws-sdet-fast-dive.zip -DestinationPath .
Rename-Item .\aws-sdet-fast-dive-main .\aws-sdet-fast-dive
Set-Location .\aws-sdet-fast-dive
Copy-Item .env.example .env
npm install
powershell -ExecutionPolicy Bypass -File .\scripts\windows\start.ps1

Если PowerShell открыт не в папке проекта, команда не найдет package.json. Проверьте путь командой Get-Location.

Главный сценарий

Откройте http://localhost:3000. Сначала нажмите Create order. API создаст заказ и положит событие в очередь.

Экран демо после Create order: заказ PENDING, событие ожидает worker
После Create order заказ уже есть в DynamoDB, но receipt в S3 еще не создан.

Нажмите Run worker once. Worker прочитает одно сообщение из SQS, создаст receipt в S3 и обновит заказ.

Экран демо после Run worker once: заказ PROCESSED, receipt появился в S3
После worker видно downstream side effect: статус PROCESSED и новый object key в S3.

Это и надо уметь объяснить как SDET: тест проверяет не только HTTP response, но и состояние сервисов после async обработки.

Проверка через AWS CLI

UI нужен, чтобы быстро увидеть flow. На работе SDET часто проверяет состояние через CLI или SDK.

Команды для проверки локальных AWS-ресурсов
docker compose exec localstack awslocal dynamodb scan --table-name orders
docker compose exec localstack awslocal sqs list-queues
docker compose exec localstack awslocal s3 ls s3://order-receipts/receipts/
docker compose exec localstack awslocal events list-rules --event-bus-name order-events-bus
Пример CLI-проверки DynamoDB, SQS и S3 через awslocal
Так выглядит проверка без UI: таблица, очереди и receipt-файлы видны через awslocal.

Автотест

Интеграционный тест проходит тот же сценарий кодом: создает заказ через API, проверяет PENDING в DynamoDB, запускает worker, затем проверяет PROCESSED и receipt в S3.

Запуск интеграционного теста
npm run test:integration

Файл теста лежит здесь: tests/integration/orderFlow.e2e.test.ts. После ручного сценария его проще читать: все проверки повторяют то, что ученик уже видел в браузере и CLI.

Фраза для собеседования

I practiced AWS from an SDET perspective using a local event-driven flow: API writes an order to DynamoDB, publishes an EventBridge event, SQS delivers it to a worker, and tests validate downstream side effects in S3 and DynamoDB using AWS SDK.

Безопасность и публикация

В архиве нет реальных AWS credentials. Файл .env.example содержит только dummy values AWS_ACCESS_KEY_ID=test и AWS_SECRET_ACCESS_KEY=test. Это заглушки для LocalStack.

Не вставляйте в проект реальные access keys, токены, SSH-ключи, пароли от баз и приватные endpoints. Локальный .env добавлен в .gitignore и не должен попадать в репозиторий или ZIP.

Перед обновлением GitHub-репозитория проверьте проект локально:

Проверка перед публикацией
npm run typecheck
npm run test:unit
npm run kit:build
unzip -t dist/aws-sdet-fast-dive.zip

После проверки запушьте исходники в GitHub-репозиторий tolcheev/aws-sdet-fast-dive. T-QA хранит только ссылку, не архив.

Остановка

Сначала нажмите Ctrl+C в терминале, где запущен API. Потом остановите LocalStack.

macOS
bash scripts/mac/stop.sh
Windows PowerShell
powershell -ExecutionPolicy Bypass -File .\scripts\windows\stop.ps1

Если ученик хочет повторить сценарий с чистыми данными, можно выполнить npm run aws:reset, затем снова создать заказ.

Сообщить о проблеме

Что случилось?