Я пытаюсь использовать новую функцию AWS Batch:https://aws.amazon.com/batch/
Я не могу запустить даже простейшее пакетное задание (используя демо, которое называется "echo hello world"). Задание просто застревает в состоянии выполнения.
Чтобы попытаться локализовать проблему, я использую все настройки по умолчанию в совершенно новой учетной записи AWS.
Насколько я понимаю, мне не нужно запускать экземпляры EC2 вручную, чтобы использовать эту функцию, это должен сделать AWS Batch. Кажется, что он ждет доступного экземпляра EC2 для запуска задания. Разве он не должен просто запустить экземпляр EC2, чтобы запустить задание самостоятельно?
Заранее спасибо.
решение1
Я заметил, что когда я указывал определение задания с 8000 МБ, запускался экземпляр, имеющий всего 7986 МБ, и мое задание зависало в состоянии «Готово к выполнению».
8000 МБ эквивалентно 8388,608 МБ, поэтому, похоже, у запускаемого экземпляра недостаточно памяти для выполнения задания, и поэтому он зависает.
Если я создам определение задания с 7000 МБ, то мое задание больше не будет зависать в состоянии «Выполнимо», поскольку оно по-прежнему использует тот же экземпляр с 7986 МБ памяти.
решение2
В документации Batch имеется руководство по устранению неполадок, связанных с «Заданиями, зависшими в состоянии RUNNABLE». https://docs.aws.amazon.com/batch/latest/userguide/troubleshooting.html#job_stuck_in_runnable
Если ваша вычислительная среда содержит вычислительные ресурсы, но ваши задания не продвигаются дальше статуса RUNNABLE, то есть что-то, что мешает заданиям фактически размещаться на вычислительном ресурсе. Вот некоторые распространенные причины этой проблемы:
Драйвер журнала awslogs не настроен на ваших вычислительных ресурсах
Пакетные задания AWS отправляют информацию журнала в CloudWatch Logs. Чтобы включить это, необходимо настроить вычислительные ресурсы на использование драйвера журнала awslogs. Если вы основываете свой вычислительный ресурс AMI на оптимизированном для Amazon ECS AMI (или Amazon Linux), то этот драйвер по умолчанию регистрируется в пакете ecs-init. Если вы используете другой базовый AMI, необходимо убедиться, что драйвер журнала awslogs указан как доступный драйвер журнала с переменной среды ECS_AVAILABLE_LOGGING_DRIVERS при запуске агента контейнера Amazon ECS. Для получения дополнительной информации см. Спецификация вычислительного ресурса AMI и Создание вычислительного ресурса AMI.
Недостаточно ресурсов
Если в определениях заданий указано больше ресурсов ЦП или памяти, чем могут выделить ваши вычислительные ресурсы, то ваши задания никогда не будут размещены. Например, если в задании указано 4 ГиБ памяти, а ваши вычислительные ресурсы имеют меньше этого, то задание не может быть размещено на этих вычислительных ресурсах. В этом случае вам необходимо уменьшить указанную память в определении задания или добавить в свою среду более крупные вычислительные ресурсы.
Достигнут лимит экземпляров Amazon EC2
Количество экземпляров Amazon EC2, которые ваша учетная запись может запустить в регионе AWS, определяется вашим лимитом экземпляров EC2. Некоторые типы экземпляров также имеют лимит на тип экземпляра. Для получения дополнительной информации об ограничениях экземпляров Amazon EC2 вашей учетной записи (включая порядок запроса увеличения лимита) см. раздел Amazon EC2 Service Limits в руководстве пользователя Amazon EC2 для экземпляров Linux.
Другие очень распространенные проблемы, которые я вижу и которые могут быть причиной этого:
- Нет пути к интернету
- ЦП/память в определении задания выше, чем экземпляры
- Экземпляр не зарегистрирован в кластере ECS
- Агент отключен -https://aws.amazon.com/premiumsupport/knowledge-center/ecs-agent-disconnected/
Дополнительные действия по устранению неполадок, которые вы можете предпринять:
- Запустите связанное определение задачи ECS вручную в вашем кластере
- SSH и попробуйте запустить docker изнутри контейнера
- Конечные точки Curl ECS и Batch изнутри экземпляра контейнера
- Устранение ограничений ЦП/памяти при определении задания
- Просмотрите /etc/ecs/ecs.config
- Получить журналы ECS -https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-logs-collector.html
решение3
Сегодня у меня была та же проблема. Я решил эту проблему следующим образом:
Открыть VPC
→ Subnets
→ <YOUR SUBNET>
→ Subnet Actions
→ Modify Auto-assign IP
Настройка .
Установите Enable auto-assign public IPV4 address
флажок «Воссоздать среду пакетных вычислений AWS».
Потому что экземпляру контейнера нужен доступ к интернету. Поэтому экземпляру контейнера понадобится глобальный публичный IP.