У меня проблема с автоматическим масштабированием на 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. :)