Четыре тихих сбоя при выводе CrewAI-агента в AWS Bedrock AgentCore

Соло-разработчик, который собирает агентный пайплайн на CrewAI и Amazon Bedrock, на ноутбуке получает ответ за секунды — а в управляемом runtime AWS неделю ловит HTTP 200 на пустое тело и контейнеры без единой строки в CloudWatch. Разбор кейса на Dev.to показывает, почему вывод агента в прод через Bedrock AgentCore — не «docker push и забыли», а отдельный класс отладки: платформа вышла в GA в июне 2026, а ловушки SDK, IAM и Dockerfile автор @sarvar_04 описывает как четыре «тихих» отказа.
Почему локальный CrewAI и AgentCore — разные миры
Агент автора — resume-tailoring на CrewAI с моделью Amazon Bedrock Nova Pro: анализ резюме под JD, поиск пробелов, переписывание bullet points. Локально связка работала без сбоев; перенос в Bedrock AgentCore — managed runtime для AI-агентов (контейнер → push → scaling, memory, invocation) — оказался многослойнее, чем happy path из документации.
Разрыв типичен для соло-workflow с агентами: код и промпты выглядят готовыми, а продакшен-оболочка — отдельный продукт со своими контрактами. Автор оценивает отладку в пять дней на четыре независимых сбоя; к моменту публикации (июль 2026) часть поведения AWS могла уже измениться.
Четыре «тихих» отказа: сборка зелёная, агент мёртв
Каждый сбой проходит сборку и деплой без явной ошибки — отсюда «silent failure».
| # | Что ломается | Ложный сигнал |
|---|---|---|
| 1 | Placeholder bedrock-agentcore-client на PyPI вместо реального SDK |
pip install успешен, импорт падает в рантайме, invoke отдаёт пустой payload |
| 2 | Нет IAM-права bedrock:GetAgentRuntime |
invoke-agent-runtime возвращает 200 OK с пустым телом; runtime Active, логов нет |
| 3 | В Dockerfile нет USER 1000 |
Health check ~30 с, затем Failed; в CloudWatch — тишина |
| 4 | Имя resume-tailor-agent с дефисом |
Паттерн ^[a-zA-Z0-9_]+$; кнопка submit в консоли «молчит» |
По оценке автора, на поиск ушло примерно 3, 5, 4 и 1 час соответственно — не на логику агента, а на инфраструктурные детали managed-платформы.
Два клиента AWS и ловушка PyPI
Официальная документация смешивает два Python-клиента; в одной таблице их не свести:
| Клиент | Роль | Откуда ставить |
|---|---|---|
bedrock-agentcore-control |
create/update/delete runtime | CodeArtifact: amazon-agent-runtimes / agent-runtimes-pypi |
bedrock-agentcore |
SDK внутри контейнера | Тот же CodeArtifact |
boto3 (bedrock-agent) |
Вызов агента снаружи | Обычный pip |
Документация предлагает pip install bedrock-agentcore-client; на PyPI — placeholder с тем же именем. Реальный пакет — в CodeArtifact; для входа нужен aws codeartifact login с --domain-owner 600427722194:
aws codeartifact login --tool pip \
--domain amazon-agent-runtimes \
--repository agent-runtimes-pypi \
--domain-owner 600427722194
Установка «не того» клиента может дать AttributeError глубоко в вызове, а не ImportError на старте — типичная ловушка при первом деплое агентного стека в облако.
USER 1000, пустой 200 OK и что проверять до продакшена
«Missing user directive» в заголовке поста — не переменная окружения и не IAM-политика, а директива USER 1000 в Dockerfile. AgentCore требует UID 1000; без RUN useradd -m -u 1000 agentuser и USER 1000 runtime убивает контейнер, в UI — одно слово «Failed». Требование автор нашёл в sample Dockerfile репозиториев AgentCore на GitHub, не в docs.
Второй сбой чинится правом в IAM-роли:
{
"Effect": "Allow",
"Action": "bedrock:GetAgentRuntime",
"Resource": "*"
}
Вызов после деплоя выглядит так:
aws bedrock-agentcore-control invoke-agent-runtime \
--agent-runtime-id abc123 \
--payload '{"job_description": "..."}'
Пустое тело при 200 OK — silent failure upstream, а не «агент просто молчит».
Практика для агентного пайплайна: не доверять зелёному статусу
Автор формулирует три принципа, применимых к любому выводу LLM-агента в managed runtime:
- Не доверять 200 OK от нового сервиса — смотреть тело ответа; пустое = отказ выше по стеку.
- Тестировать критические импорты при старте контейнера — try/except и явный log до остальной логики агента.
- Читать sample repos AWS, не только docs —
USER 1000встречается там, а не в справочнике.
Дополнительно автор подключил Sentry в agent pipeline: trace waterfalls ловят проблемы за секунды вместо часов с print. Материал подан как submission для DEV Summer Bug Smash (powered by Sentry).
Вывод для соло-разработчика с агентами: локальный CrewAI + Bedrock — половина пути. Вторая половина — контракты runtime, split клиентов и Dockerfile, которые документация не собирает в одну картину. Пока платформа молода, бюджет времени на прод закладывайте отдельно от написания промптов и tools.
Источники
- @sarvar_04 — 4 Silent Failures, 2 Undocumented APIs, and a Container That Crashed Because of a Missing User Directive (Dev.to, 20 июля 2026; дата доступа при обогащении: 2026-07-20T21:02:00Z)