Гайды · 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-аккаунт не нужен.
Как это связано с 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 в папке, куда скачали архив.
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 внутри папки проекта.
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 создаст заказ и положит событие в очередь.
Нажмите Run worker once. Worker прочитает одно сообщение из SQS, создаст receipt в S3 и обновит заказ.
PROCESSED и новый object key в S3.Это и надо уметь объяснить как SDET: тест проверяет не только HTTP response, но и состояние сервисов после async обработки.
Проверка через AWS CLI
UI нужен, чтобы быстро увидеть flow. На работе SDET часто проверяет состояние через CLI или SDK.
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
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.
bash scripts/mac/stop.sh
powershell -ExecutionPolicy Bypass -File .\scripts\windows\stop.ps1
Если ученик хочет повторить сценарий с чистыми данными, можно выполнить npm run aws:reset, затем снова создать заказ.