Назад | Перейти на главную страницу

AWS Auto Scaling и CodeDeploy никогда не оставляют Pending: подождите

У меня проблема с автоматическим масштабированием на AWS. Кажется, у многих людей были похожие проблемы, но я не смог найти ничего, что решало бы мою конкретную проблему. Когда я вручную увеличиваю количество серверов в моей группе автоматического масштабирования (с 1 до 2), он создает штраф экземпляра из AMI. Затем CodeDeploy обнаруживает, что его нужно обновить, и нормально начинает развертывание. Проблема в том, что при успешном завершении развертывания CodeDeploy экземпляр немедленно начинает завершаться. Я получаю следующую ошибку:

Launching a new EC2 instance: SOME_INSTANCE. Status Reason: Instance failed to complete user's Lifecycle Action: Lifecycle Action with token SOME_TOKEN was abandoned: Heartbeat Timeout

Экземпляр никогда не покидает жизненный цикл Pending: Wait, и весь процесс начинается заново. Я пробовал продлить льготный период проверки работоспособности. Кажется, все в порядке, и я могу подключиться к серверу по ssh до того, как он будет убит, и могу напрямую перейти на сервер по IP-адресу, и все будет работать. Похоже, что он никогда не попадает в жизненный цикл InService, а затем никогда не добавляется в Load Balancer.

Любые мысли о том, что может быть причиной этого, были бы потрясающими. Я подумал, что, возможно, у CodeDeploy нет доступа для добавления сервера после завершения развертывания. У меня есть две роли IAM, одна для EC2 и одна для CodeDeploy, обе со следующей политикой, но со своими собственными отдельными доверенными отношениями:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "autoscaling:*",
                "codedeploy:*",
                "ec2:*",
                "elasticloadbalancing:*",
                "iam:AddRoleToInstanceProfile",
                "iam:CreateInstanceProfile",
                "iam:CreateRole",
                "iam:DeleteInstanceProfile",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:GetInstanceProfile",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListInstanceProfilesForRole",
                "iam:ListRolePolicies",
                "iam:ListRoles",
                "iam:PassRole",
                "iam:PutRolePolicy",
                "iam:RemoveRoleFromInstanceProfile",
                "s3:*"
            ],
            "Resource": "*"
        }
    ]
}

Хорошо, мне удалось исправить проблему. Мне пришлось удалить и воссоздать мою группу Auto Scaling. Возможно, я пропустил настройку в расширенной области, когда я изначально ее делал, но не уверен. Я заметил, что при первом автоматическом масштабировании развертывание кода не запускалось автоматически на новом экземпляре, но я отредактировал его (ничего не меняя), щелкнул развертывание на текущих серверах, и при следующем масштабировании все заработало Как колдовство. На этот раз он перешел в InService. :)