本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
解决 Amazon A EC2 uto Scaling 问题
主题
- Amazon A EC2 uto Scaling 常规疑难解答
- “CodeDeployRole 未授予您在以下 Amazon 服务中执行操作的权限: AmazonAutoScaling” 错误
- 在部署修订版之前,Amazon A EC2 uto Scaling 组中的实例会持续预配置和终止
- 终止或重启 Amazon A EC2 uto Scaling 实例可能会导致部署失败
- 避免将多个部署组与单个 Amazon A EC2 uto Scaling 组相关联
- EC2Amazon A EC2 uto Scaling 组中的实例无法启动并收到 “心跳超时” 错误
- 不匹配的 Amazon A EC2 uto Scaling 生命周期挂钩可能会导致对 Amazon A EC2 uto Scaling 群组的自动部署停止或失败
- “由于未找到您的部署组的实例,部署失败”错误
Amazon A EC2 uto Scaling 常规疑难解答
由于以下原因,EC2对 Amazon A EC2 uto Scaling 组中的实例的部署可能会失败:
-
Amazon A EC2 uto Scaling 会持续启动和终止EC2实例。如果 CodeDeploy 无法自动部署您的应用程序修订,Amazon A EC2 uto Scaling 会持续启动和终止EC2实例。
解除 Amazon A EC2 uto Scaling 组与 CodeDeploy 部署组的关联或更改 Amazon A EC2 uto Scaling 组的配置,使所需的实例数量与当前的实例数量相匹配(从而防止 Amazon A EC2 uto Scaling 启动更多EC2实例)。有关更多信息,请参阅使用更改部署组设置 CodeDeploy或 Amazon A EC2 uto Scaling 的手动扩展。
-
CodeDeploy 代理没有响应。如果在EC2实例启动或启动后立即运行的初始化脚本(例如,cloud-init 脚本)运行时间超过一小时,则可能无法安装 CodeDeploy 代理。 CodeDeploy CodeDeploy 代理响应待处理部署的超时时间为一小时。要解决此问题,请将初始化脚本移到 CodeDeploy应用程序修订版中。
-
Amazon A EC2 uto Scaling 组中的EC2实例在部署期间会重新启动。如果在部署期间重启EC2实例,或者 CodeDeploy 代理在处理部署命令时关闭,则部署可能会失败。有关更多信息,请参阅 终止或重启 Amazon A EC2 uto Scaling 实例可能会导致部署失败。
-
将多个应用程序修订同时部署到 Amazon A EC2 uto Scaling 组中的同一个EC2实例。如果其中一个部署的脚本运行时间超过几分钟,则同时将多个应用程序修订部署到 Amazon A EC2 uto Scaling 组中的同一个EC2实例可能会失败。不要将多个应用程序修订部署到 Amazon A EC2 uto Scaling 组中的相同EC2实例。
-
对于作为 Amazon A EC2 uto Scaling 组的一部分启动的新EC2实例,部署失败。在这种情况下,在部署中运行脚本可能会阻止 Amazon A EC2 uto Scaling 组中的EC2实例启动。(Amazon A EC2 uto Scaling 组中的其他EC2实例可能看起来运行正常。) 要解决此问题,请确保先完成所有其他脚本:
-
CodeDeploy 代理不包含在您的AMI:如果您在启动新实例时使用cfn-init命令安装 CodeDeploy 代理,请将代理安装脚本放在 Amazon CloudFormation 模板
cfn-init
部分的末尾。 -
CodeDeploy 代理包含在您的 AMI:配置AMI使代理在创建实例时
Stopped
处于状态,然后在脚本库中包含用于启动代理的cfn-init
脚本作为最后一步。
-
“CodeDeployRole 未授予您在以下 Amazon 服务中执行操作的权限: AmazonAutoScaling” 错误
使用启动模板创建的 Auto Scaling 组的部署需要以下权限。这些是AWSCodeDeployRole
Amazon 托管策略授予的权限之外的权限。
-
EC2:RunInstances
-
EC2:CreateTags
-
iam:PassRole
如果您缺少这些权限,则可能就会收到此错误。有关更多信息教程:用于 CodeDeploy 将应用程序部署到 Auto Scaling 组,请参阅《Amazon A EC2 uto Scaling 用户指南》中的 “为 Auto Scalin g 群组创建启动模板” 和 “权限”。
在部署修订版之前,Amazon A EC2 uto Scaling 组中的实例会持续预配置和终止
在某些情况下,错误可能会阻止成功部署到 Amazon A EC2 uto Scaling 组中新配置的实例。结果是没有运行正常的实例,部署失败。由于无法运行部署或无法成功完成部署,实例在创建之后很快即被终止。然后,Amazon A EC2 uto Scaling 组配置会导致配置另一批实例,以尝试满足最低运行状况的主机要求。这批实例也会被终止,并不断进行这一循环。
可能的原因包括:
-
Amazon A EC2 uto Scaling 群组运行状况检查失败。
-
应用程序修订中有错误
要解决这一问题,请遵循以下步骤:
-
手动创建不属于 Amazon A EC2 uto Scaling 组的EC2实例。使用唯一的实例标签标记EC2实例。
-
将这个新实例添加到受影响的部署组。
-
将没有错误的新应用程序修订部署到部署组。
这会提示 Amazon A EC2 uto Scaling 组将应用程序修订版部署到 Amazon A EC2 uto Scaling 组中未来的实例。
注意
确认部署成功后,请删除您创建的实例,以避免持续向您的 Amazon 账户收费。
终止或重启 Amazon A EC2 uto Scaling 实例可能会导致部署失败
如果通过 Amazon A EC2 uto Scaling 启动实例,然后该实例被终止或重启,则由于以下原因,对该实例的部署可能会失败:EC2
-
在进行中的部署期间,缩减事件或任何其他终止事件会导致实例与 Amazon A EC2 uto Scaling 组分离,然后终止。由于无法完成部署,因此它将失败。
-
实例已重启,但需要五分钟以上的时间才能启动实例。 CodeDeploy 将此视为超时。该服务将针对该实例的所有当前和将来部署失败。
解决此问题:
-
一般来说,请确保实例终止或重启之前完成所有部署。确保所有部署在实例启动或重启后开始。
-
如果您为 Amazon A EC2 uto Scaling 配置指定基于 Windows 服务器的亚马逊系统映像 (AMI),并使用该EC2Config服务设置实例的计算机名称,则部署可能会失败。要修复此问题,请在 Windows Server 基础中AMI,在 “EC2服务属性” 的 “常规” 选项卡上,清除 “设置计算机名称”。清除此复选框后,使用该 Windows Server 基础启动的所有新 Windows Server Amazon A EC2 uto Scaling 实例都将禁用此行为AMI。对于启用了此行为的 Windows Server Amazon A EC2 uto Scaling 实例,您无需清除此复选框。仅在重启实例后对其重新部署失败的部署。
避免将多个部署组与单个 Amazon A EC2 uto Scaling 组相关联
作为最佳实践,您应该只将一个部署组与每个 Amazon A EC2 uto Scaling 组关联起来。
这是因为,如果 Amazon A EC2 uto Scaling 扩展具有与多个部署组关联的挂钩的实例,它会同时发送所有挂钩的通知。这会导致针对每个实例的多个部署同时开始。当多个部署同时向 CodeDeploy 代理发送命令时,可能会达到生命周期事件与部署开始或上一个生命周期事件结束之间的五分钟超时时间。如果发生这种情况,即使部署过程按预期运行,部署也会失败。
注意
生命周期事件中脚本的默认超时时间为 30 分钟。您可以在 AppSpec 文件中将超时时间更改为其他值。有关更多信息,请参阅 为 EC2/本地部署添加 AppSpec 文件。
如果尝试同时运行多个部署,则无法控制部署发生的顺序。
最后,如果部署到任何实例失败,Amazon A EC2 uto Scaling 会立即终止该实例。当第一个实例关闭时,正在运行的其他部署将开始失败。 CodeDeploy 由于 CodeDeploy 代理响应待处理部署的超时时间为一小时,因此每个实例最多可能需要 60 分钟才能超时。
有关 Amazon A EC2 uto Scaling 的更多信息,请参阅幕后花絮: CodeDeploy 和 Auto Scaling 集成
EC2Amazon A EC2 uto Scaling 组中的实例无法启动并收到 “心跳超时” 错误
Amazon A EC2 uto Scaling 组可能无法启动新EC2实例,从而生成类似于以下内容的消息:
Launching a new EC2 instance
. <instance-Id>
. Status Reason: Instance failed to
complete user's Lifecycle Action: Lifecycle Action with
token<token-Id>
was abandoned: Heartbeat
Timeout
此消息通常提示出现以下问题:
-
已达到与 Amazon 账户关联的最大并发部署数量。有关部署限制的更多信息,请参阅CodeDeploy 配额。
-
Auto Scaling 组试图过快地启动太多EC2实例。对每个新实例的API调用RecordLifecycleActionHeartbeat或CompleteLifecycleAction对每个新实例的调用都被限制了。
-
中的应用程序 CodeDeploy 在更新或删除其关联的部署组之前已被删除。
当您删除应用程序或部署组时,会 CodeDeploy 尝试清理与之关联的任何 Amazon A EC2 uto Scaling 挂钩,但可能仍有一些挂钩。如果您运行命令来删除部署组,则剩余的挂钩将在输出中返回。但是,如果您运行命令来删除应用程序,则剩余的挂钩将不会出现在输出中。
因此,作为最佳实践,在删除某个应用程序之前,您应删除与该应用程序关联的所有部署组。您可以使用命令输出来标识必须手动删除的生命周期挂钩。
如果您收到了“Heartbeat Timeout(检测信号超时)”错误消息,则可通过执行以下操作来确定剩余的生命周期挂钩是否为导致出现错误的原因并解决问题:
-
请执行以下操作之一:
-
调用delete-deployment-group命令删除与导致心跳超时的 Auto Scaling 组关联的部署组。
-
使用非空的 Auto Scaling 组名称列表调用该update-deployment-group命令,以分离所有由托管的 Auto CodeDeploy Scaling 生命周期挂钩。
例如,输入以下 Amazon CLI 命令:
aws deploy update-deployment-group --application-name my-example-app --current-deployment-group-name my-deployment-group --auto-scaling-groups
再举一个例子,如果您在 Java 中 CodeDeploy API使用,请调用
UpdateDeploymentGroup
并设置autoScalingGroups
为new ArrayList<String>()
。这会将autoScalingGroups
设置为空列表并删除现有列表。不要使用null
,这是默认设置,因为这会将autoScalingGroups
保持原样,这不是您想要的。
检查调用的输出。如果输出包含包含 Amazon A EC2 uto Scaling 生命周期挂钩列表的
hooksNotCleanedUp
结构,则还有剩余的生命周期挂钩。 -
-
调用describe-lifecycle-hooks命令,指定与启动失败的EC2实例关联的 Amazon A EC2 uto Scaling 组的名称。在输出中,查找以下任何内容:
-
Amazon A EC2 uto Scaling 生命周期钩子名称与您在步骤 1 中确定的
hooksNotCleanedUp
结构相对应。 -
Amazon A EC2 uto Scaling 生命周期挂钩名称,其中包含与失败的 Auto Scaling 组关联的部署组的名称。
-
可能导致 CodeDeploy 部署心跳超时的 Amazon A EC2 uto Scaling 生命周期挂钩名称。
-
-
如果挂钩属于步骤 2 中列出的类别之一,请调用delete-lifecycle-hook命令将其删除。在调用中指定 Amazon A EC2 uto Scaling 组和生命周期挂钩。
重要
仅删除导致问题的挂钩,如步骤 2 中所述。如果您删除可行的挂钩,您的部署可能会失败,或者 CodeDeploy 可能无法将应用程序修订部署到扩展实EC2例。
-
使用所需的 Auto Scaling 组名调用update-deployment-group或create-deployment-group命令。 CodeDeploy使用新UUIDs功能重新安装 Auto Scaling 挂钩。
注意
如果您将 Auto Scaling 组与 CodeDeploy 部署组分离,则任何正在进行的对 Auto Scaling 组的部署都可能失败,并且由 Auto Scaling 组扩展的新EC2实例将不会从中接收您的应用程序修订。 CodeDeploy要让 Auto Scaling 再次使用 CodeDeploy,你需要将 Auto Scaling 组重新连接到部署组,然后调用一个新的组CreateDeployment
来启动队列范围的部署。
不匹配的 Amazon A EC2 uto Scaling 生命周期挂钩可能会导致对 Amazon A EC2 uto Scaling 群组的自动部署停止或失败
Amazon A EC2 uto Scaling 并 CodeDeploy 使用生命周期挂钩来确定哪些应用程序修订在 Amazon A EC2 uto Scaling 群组中启动后应部署到哪些EC2实例。如果生命周期挂钩和有关这些挂钩的信息在 Amazon A EC2 uto Scaling 中不完全匹配,则自动部署可能会停止或失败 CodeDeploy。
如果对 Amazon A EC2 uto Scaling 组的部署失败,请查看 Amazon A EC2 uto Scaling 中的生命周期挂钩名称是否 CodeDeploy 匹配。如果不是,请使用这些 Amazon CLI 命令调用。
首先,获取 Amazon A EC2 uto Scaling 组和部署组的生命周期挂钩名称列表:
-
调用describe-lifecycle-hooks命令,指定与中的部署组关联的 Amazon A EC2 uto Scaling 组的名称 CodeDeploy。在输出中,在
LifecycleHooks
列表中,记下每个LifecycleHookName
值。 -
调用get-deployment-group命令,指定与 Amazon A EC2 uto Scaling 组关联的部署组的名称。在输出中,在
autoScalingGroups
列表中,找到名称值与 Amazon A EC2 uto Scaling 组名称匹配的每个项目,然后记下相应的hook
值。
现在比较两组生命周期挂钩的名称。如果它们完全匹配(字符对字符),则它不是问题。您可能需要尝试本节其他地方介绍的其他 Amazon A EC2 uto Scaling 疑难解答步骤。
但是,如果两组生命周期挂钩的名称未完全匹配(字符对字符),请执行以下操作:
-
如果 describe-lifecycle-hooks 命令输出中包含 get-deployment-group 命令输出中未包含的生命周期挂钩名称,则执行以下操作:
-
对于describe-lifecycle-hooks命令输出中的每个生命周期挂钩名称,请调用该delete-lifecycle-hook命令。
-
调用update-deployment-group命令,指定原始 Amazon A EC2 uto Scaling 组的名称。 CodeDeploy 在 Amazon A EC2 uto Scaling 组中创建新的替代生命周期挂钩,并将生命周期挂钩与部署组关联起来。现在,随着新实例添加到 Amazon A EC2 uto Scaling 组,自动部署应该会恢复。
-
-
如果 get-deployment-group 命令输出中包含 describe-lifecycle-hooks 命令输出中未包含的生命周期挂钩名称,则执行以下操作:
-
调用该update-deployment-group命令,但不要指定原始 Amazon A EC2 uto Scaling 组的名称。
-
再次调用该update-deployment-group命令,但这次要指定原始 Amazon A EC2 uto Scaling 组的名称。 CodeDeploy 在 Amazon A EC2 uto Scaling 组中重新创建缺失的生命周期挂钩。现在,随着新实例添加到 Amazon A EC2 uto Scaling 组,自动部署应该会恢复。
-
在您使两组生命周期挂钩名称完全匹配后,应重新部署应用程序修订,但只能在新实例添加到 Amazon A EC2 uto Scaling 组时部署它们。对于已经在 Amazon A EC2 uto Scaling 组中的实例,部署不会自动进行。
“由于未找到您的部署组的实例,部署失败”错误
如果您看到以下 CodeDeploy 错误,请阅读本节:
The deployment failed because no instances were found for your deployment group.
Check your deployment group settings to make sure the tags for your EC2 instances
or Auto Scaling groups correctly identify the instances you want to deploy to, and then try
again.
导致出现此错误的可能原因是:
-
您的部署组设置包括不正确的EC2实例、本地实例或 Auto Scaling 组的标签。要修复此问题,请检查您的标签是否正确,然后重新部署您的应用程序。
-
部署开始后,您的实例集已横向扩展。在这种情况下,您会看到实例集中处于
InService
状态的正常运行实例,但也会看到上面的错误。要修复此问题,请重新部署您的应用程序。 -
您的 Auto Scaling 组不包含任何处于
InService
状态的实例。在这种情况下,当您尝试在队列范围内进行部署时,部署失败并显示上述错误消息,因为至少 CodeDeploy 需要一个实例才能处于该InService
状态。可能没有实例处于InService
状态的原因有很多。其中一些原因包括:-
您已将 Auto Scaling 组的大小计划(或手动配置)为
0
。 -
Auto Scaling 检测到坏EC2实例(例如,这些EC2实例出现硬件故障),因此将其全部取消,没有任何实例
InService
处于状态。 -
在从
0
到的扩展事件中1
, CodeDeploy 部署了先前成功的修订(称为上次成功修订),该修订自上次部署以来已变得不健康。这导致在横向扩展实例上的部署失败,进而导致 Auto Scaling 取消该实例,使没有实例处于InService
状态。如果您发现没有处于
InService
状态的实例,请按照以下过程To troubleshoot the error if there are no instances in the InService state中的说明对问题进行故障排除。
-
如果没有处于该 InService 状态的实例,则要解决错误
-
在 Amazon EC2 控制台中,验证 “所需容量” 设置。如果为零,则将其设置为正数。等待实例状态变为
InService
,这意味着部署成功。您已解决此问题,可以跳过此故障排除过程的其余步骤。有关设置所需容量设置的信息,请参阅 Amazon A EC2 uto Scaling 用户指南中的 Auto Sc aling 组设置容量限制。 -
如果 Auto Scaling 一直尝试启动新EC2实例以满足所需容量,但永远无法实现横向扩展,则通常是由于 Auto Scaling 生命周期挂钩失败所致。按如下方式排查此问题:
-
要查看哪个 Auto Scaling 生命周期挂钩事件失败,请参阅 Amazon A uto Scaling 用户指南中的验证 A EC2 uto Scaling 组的扩展活动。
-
如果失败的挂钩的名称为
CodeDeploy-managed-automatic-launch-deployment-hook-
,请转至 CodeDeploy,找到部署组,然后找到由 Auto Scaling 启动的失败部署。然后调查部署失败的原因。DEPLOYMENT_GROUP_NAME
-
如果您了解部署失败的原因(例如,发生了 CloudWatch 警报),并且可以在不更改修订版的情况下修复问题,那么现在就这样做。
-
如果经过调查,您确定上次成功修订 CodeDeploy的运行状况不佳,并且您的 Auto Scaling 组中没有正常运行的实例,则说明您处于部署死锁状态。要解决此问题,必须从 Auto Scaling 组中暂时删除 CodeDeploy生命周期挂钩,然后重新安装挂钩并重新部署新的(良好) CodeDeploy 修订版,从而修复错误的修订版。有关说明,请参阅:
-
修复部署死锁问题 () CLI
-
(可选)阻止导致 CodeDeploy 错误的 CI/CD 管道,这样在修复此问题时就不会发生意外部署。
-
记下你当前的 Auto Scaling DesiredCapacity设置:
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name
ASG_NAME
在此过程结束时,您可能需要重新缩减到此数字。
-
将 Auto Scaling DesiredCapacity设置设置为
1
。如果您的所需容量大于起始容量1
,则这是可选的。通过将其降至1
,可以缩短实例的配置和部署时间,从而加快故障排除速度。如果您的 Auto Scaling 的所需容量最初设置为0
,则必须将其增加到1
。这是强制性的。as 自动缩放 set-desired-capacity —— auto-scaling-group-name
ASG_NAME
--所需容量 1注意
此过程的其余步骤假设您已将设置DesiredCapacity为
1
。此时,Auto Scaling 会尝试扩展到一个实例。然后,由于 CodeDeploy 添加的挂钩仍然存在,因此 CodeDeploy 会尝试部署;部署失败;Auto Scaling 取消实例;Auto Scaling 尝试重新启动实例以达到所需的容量,但再次失败。您正处于取消-重启的循环中。
-
从部署组中取消注册 Auto Scaling 组:
警告
以下命令将启动一个没有软件的新EC2实例。在运行命令之前,请确保不运行任何软件的 Auto Scaling
InService
实例是可以接受的。例如,确保与实例关联的负载均衡器在没有软件的情况下不会向该主机发送流量。重要
使用下面显示的 CodeDeploy 命令移除挂钩。请勿通过 Auto Scaling 服务移除挂钩,因为移除操作不会被识别 CodeDeploy。
aws deploy update-deployment-group --application-name
APPLICATION_NAME
--current-deployment-group-nameDEPLOYMENT_GROUP_NAME
--auto-scaling-groups运行此命令后,将会发生以下情况:
-
CodeDeploy 从部署组中注销 Auto Scaling 组。
-
CodeDeploy 从 Auto Scaling 组中移除 Auto Scaling 生命周期挂钩。
-
由于导致部署失败的挂钩已不复存在,Auto Scaling 会取消现有EC2实例,并立即启动一个新实例以扩展到所需容量。新实例应该很快就会进入
InService
状态。新实例不包括软件。
-
-
等待EC2实例进入
InService
状态。要验证此,请使用以下命令:aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names
ASG_NAME
--query AutoScalingGroups[0].Instances[*].LifecycleState -
将挂钩添加回实EC2例:
重要
使用下面显示的 CodeDeploy 命令添加挂钩。请勿使用 Auto Scaling 服务添加挂钩,因为添加的挂钩将无法被识别 CodeDeploy。
aws deploy update-deployment-group --application-name
APPLICATION_NAME
--current-deployment-group-nameDEPLOYMENT_GROUP_NAME
--auto-scaling-groupsASG_NAME
运行此命令后,将会发生以下情况:
-
CodeDeploy 将 Auto Scaling 生命周期挂钩重新安装到该实EC2例
-
CodeDeploy 将 Auto Scaling 组重新注册到部署组。
-
-
使用您知道运行正常且想要使用的 Amazon S3 或 GitHub 修订版创建全队列部署。
例如,如果修订是名为
my-revision-bucket
的 Amazon S3 存储桶中的 .zip 文件,对象键为httpd_app.zip
,则输入以下命令:aws deploy create-deployment --application-name
APPLICATION_NAME
--deployment-group-nameDEPLOYMENT_GROUP_NAME
--revision "revisionType=S3,s3Location={bucket=my-revision-bucket,bundleType=zip,key=httpd_app.zip}"由于 Auto Scaling 组中现在有一个
InService
实例,因此此部署应该可以正常工作,而且您不应再看到错误:由于未找到您的部署组的实例,部署失败。 -
如果您之前缩减了 Auto Scaling 组的容量,则在部署成功后,将其扩展回原始容量:
aws autoscaling set-desired-capacity --auto-scaling-group-name
ASG_NAME
--desired-capacityORIGINAL_CAPACITY
修复部署死锁问题(控制台)
-
(可选)阻止导致 CodeDeploy 错误的 CI/CD 管道,这样在修复此问题时就不会发生意外部署。
-
前往亚马逊EC2控制台,记下您的 Auto Scaling 所需容量设置。在此过程结束时,您可能需要重新缩减到此数字。有关查找此设置的信息,请参阅在 Auto Scaling 组中设置容量限制。
-
将所需的EC2实例数设置为
1
:如果您的所需容量大于起始容量
1
,则这是可选的。通过将其降至1
,可以缩短实例的配置和部署时间,从而加快故障排除速度。如果您的 Auto Scaling 的所需容量最初设置为0
,则必须将其增加到1
。这是强制性的。注意
此过程的其余步骤假设您已将所需容量设置为
1
。在上打开亚马逊EC2控制台 https://console.aws.amazon.com/ec2/
,然后从导航窗格中选择 A uto Scaling Gro ups。 -
选择适当的区域。
-
转到有问题的 Auto Scaling 组。
-
在组详细信息中,选择编辑。
-
将所需容量设置为
1
。 -
选择更新。
-
从部署组中取消注册 Auto Scaling 组:
警告
以下子步骤将启动一个没有软件的新EC2实例。在运行命令之前,请确保不运行任何软件的 Auto Scaling
InService
实例是可以接受的。例如,确保与实例关联的负载均衡器在没有软件的情况下不会向该主机发送流量。打开 CodeDeploy 控制台,网址为https://console.aws.amazon.com/codedeploy/
。 -
选择适当的区域。
-
在导航窗格中,选择 应用程序。
-
选择您的 CodeDeploy 应用程序的名称。
-
选择您的 CodeDeploy 部署组的名称。
-
选择编辑。
-
在环境配置中,取消选择 Amazon A EC2 uto Scaling 群组。
注意
如果未定义环境配置,则控制台不允许您保存配置。要绕过检查,请临时添加一个您知道不会解析为任何主机的标签
EC2
或On-premises
。要添加标签,请选择 Amazon EC2 实例或本地实例,然后添加标签密钥为EC2
或On-premises
。您可以将标签值留空。 -
选择 Save changes(保存更改)。
完成这些子步骤后,将会发生以下情况:
-
CodeDeploy 从部署组中注销 Auto Scaling 组。
-
CodeDeploy 从 Auto Scaling 组中移除 Auto Scaling 生命周期挂钩。
-
由于导致部署失败的挂钩已不复存在,Auto Scaling 会取消现有EC2实例,并立即启动一个新实例以扩展到所需容量。新实例应该很快就会进入
InService
状态。新实例不包括软件。
-
-
等待EC2实例进入
InService
状态。要验证其状态,请执行以下操作:-
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择 Auto Scaling Groups。
-
选择您的 Auto Scaling 组。
-
在内容窗格中,选择实例管理选项卡。
-
在 “实例” 下,确保生命周期列显示在实例InService旁边。
-
-
使用与移除组相同的方法将 Auto Scaling 组重新注册到 CodeDeploy 部署组:
打开 CodeDeploy 控制台,网址为https://console.aws.amazon.com/codedeploy/
。 -
选择适当的区域。
-
在导航窗格中,选择 应用程序。
-
选择您的 CodeDeploy 应用程序的名称。
-
选择您的 CodeDeploy 部署组的名称。
-
选择编辑。
-
在环境配置中,选择 Amazon A EC2 uto Scaling 群组,然后从列表中选择您的 Auto Scaling 群组。
-
在 Amazon EC2 实例或本地实例下,找到您添加的标签并将其删除。
-
取消选中 Amazon EC2 实例或本地实例旁边的复选框。
-
选择 Save changes(保存更改)。
此配置将生命周期挂钩重新安装到 Auto Scaling 组中。
-
使用您知道运行正常且想要使用的 Amazon S3 或 GitHub 修订版创建全队列部署。
例如,如果修订是名为
my-revision-bucket
的 Amazon S3 存储桶中的 .zip 文件,对象键为httpd_app.zip
,则执行以下操作:-
在 CodeDeploy 控制台的部署组页面中,选择创建部署。
-
对于 Revision type(修订类型),选择 My application is stored in Amazon S3(我的应用程序存储在 Amazon S3 中)。
-
在修订位置中,选择
s3://my-revision-bucket/httpd_app.zip
。 -
对于修订文件类型,选择
.zip
。 -
选择 Create deployment(创建部署)。
由于 Auto Scaling 组中现在有一个
InService
实例,因此此部署应该可以正常工作,而且您不应再看到错误:由于未找到您的部署组的实例,部署失败。 -
-
如果您之前缩减了 Auto Scaling 组的容量,则在部署成功后,将其扩展回原始容量:
-
在上打开亚马逊EC2控制台 https://console.aws.amazon.com/ec2/
,然后从导航窗格中选择 A uto Scaling Gro ups。 -
选择适当的区域。
-
转到您的 Auto Scaling 组。
-
在组详细信息中,选择编辑。
-
将所需容量设置回其原始值。
-
选择更新。
-