Короче говоря, я хочу развернуть свой образ докера Nginx и Node.js в AWS ECS.Для создания инфраструктуры я использую Terraform.Однако задача, выполняемая на сервере, продолжает сбой.Кроме того, я получил 503 Service Temporarily Unavailable
при доступе к своему домену bb-diner-api-https.shaungc.com .
(Вы можете увидеть весь мой репозиторий проекта здесь ,но я вставлю ссылки ниже и проведу вас через определенные связанные файлы.)
После terraform apply
он сообщает о 15 созданных ресурсах, и я вижу, что служба и задача выполняются на веб-портале ECS.Однако моя задача всегда будет терпеть неудачу через некоторое время, как показано ниже:
Поскольку проверка работоспособности всегда не выполняется:
Для nodejs у меня есть код ошибки 137, который вызван получением сигнала выключения.Это означает, что nodejs не является причиной - nginx провалил слишком много проверок работоспособности, так что он завершает работу nodejs.Для nginx сообщение вообще не отображается после нажатия на View logs in CloudWatch
(я установил awslogs
в определении задачи ).
Настройка проверки моего здоровья
Проверка работоспособности контейнера определения задачи
В основном я подготовил маршрут в nginx только для проверки работоспособности.В определении задачи > container_definition
(в формате json) у меня есть проверка работоспособности контейнера nginx
примерно так: "command": ["CMD-SHELL","curl -f http://localhost/health-check || exit 1"]
, а в моем nginx.conf у меня есть:
...
server {
listen 80;
...
location /health-check {
# access_log off;
return 200 "I'm healthy!" ; # refer to https://serverfault.com/questions/518220/nginx-solution-for-aws-amazon-elb-health-checks-return-200-without-if
}
}
Так что я действительно не знаю, почему задача не проходит проверку работоспособности.
Проверка работоспособности целевой группы для балансировщика нагрузки
Я также создал балансировщик нагрузки приложениядля меня, чтобы связать мое доменное имя на маршруте 53 к нему.Я заметил, что есть еще одно место, где выполняется проверка работоспособности: целевая группа и балансировщик нагрузки приложения.Проверка здесь также не удалась, и мой статус экземпляра draining
.
Группа безопасности
Я думаю, что открыл все возможные порты.
Так почему проверка состояния не проходит и что еще отсутствует?
Таммного статей, в которых указывается конфигурация Nginx, PORT или входящее ограничение (группа безопасности / целевая группа) в AWS, могут быть общими причинами, и я рассмотрел все из них.Я позволил nginx прослушивать 80, установить порт контейнера равным 80, разрешить широкий диапазон входящих портов в группе безопасности.Что еще я могу упустить?