AWS CodeDeploy 在 Auto Scaling 用户数据脚本完成之前执行

AWS CodeDeploy executes before Auto Scaling userdata scripts finishes

我正在尝试结合 CodeDeploy 设置 Auto Scaling 组。一切正常,除了创建新实例时,CodeDeploy 在用户数据脚本(在启动配置中定义)完成之前启动。

此用户数据脚本的默认值下载并安装代码部署代理,我通过安装几个 windows 功能、IIS 重写模块和 msdeploy 对其进行了扩展。

在我的 appspec.yml 中,我使用挂钩 AfterInstall 来部署我的 IIS 网站,但当 msdeploy 尚未安装(尚未)时,这显然失败了。

我是不是以错误的方式解决这个问题,还是有办法让 CodeDeploy 等待用户数据脚本完成?

不幸的是,CodeDeploy 只知道实例已加载 OS。好处是 CodeDeploy 给主机代理 1 小时的时间来开始轮询自动部署命令。最简单的做法是在安装所有必需的依赖项后安装主机代理。将创建自动部署,但在主机代理启动后才能继续。

这里有详细解释 - https://aws.amazon.com/blogs/devops/under-the-hood-aws-codedeploy-and-auto-scaling-integration/

订购启动脚本的执行 – CodeDeploy 代理在启动后立即查找并执行部署。部署执行和启动脚本(例如用户数据、cfn-init 等)之间没有顺序。我们建议您将主机代理安装为启动脚本的一部分(也可能是最后一步),这样您就可以确定在实例安装了不属于您的 CodeDeploy 部署的依赖项之前,不会执行部署。如果您更喜欢将代理烘焙到基础 AMI 中,我们建议您将代理服务保持在停止状态并使用启动脚本启动代理服务。