AWS Auto Scaling 和 CodeDeploy 永远不会离开 Pending:Wait

AWS Auto Scaling 和 CodeDeploy 永远不会离开 Pending:Wait

我在 AWS 上使用 Auto Scaling 时遇到问题。似乎很多人都遇到过类似的问题,但我找不到任何可以解决我特定问题的方法。当我手动增加 Auto Scaling 组中的服务器数量(从 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 生命周期,然后永远不会被添加到负载均衡器中。

任何关于可能导致这种情况的原因的想法都很棒。我有一个想法是,也许 CodeDeploy 在部署完成后无权添加服务器。我创建了两个 IAM 角色,1 个用于 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": "*"
        }
    ]
}

答案1

好的,我能够解决这个问题。我不得不删除并重新创建我的 Auto Scaling 组。我最初创建时可能错过了高级区域中的设置,但不确定。我确实注意到,在第一次自动扩展时,codedeploy 不会在新实例上自动触发,但我对其进行了编辑(未更改任何内容),单击了部署到当前服务器,下次扩展时,它就运行正常了。这次它移到了 InService。:)

相关内容