在事件中自动缩放比例期间从代码部署挂钩读取AWS EC2标记



我真的很喜欢使用与自动缩放集成的AWS代码部署,但在缩放活动中,我很难解决读取标签的问题。

我已经设置了我的自动缩放组,以标记任何使用标记名称"Environment"创建的新实例。然后,作为安装后代码部署脚本的一部分,我读取标记并使用它来有条件地配置我的应用程序。如果我将修订部署到自动缩放组中的现有实例,这将非常有效。然而,在伸缩事件中,在从自动伸缩调用代码部署之前,似乎没有将标记分配给新的EC2实例,因此我的安装后配置失败。

有什么解决办法吗?我可以强制标记与管道中较早的EC2实例相关联吗?

然后,作为安装后代码部署脚本的一部分,我读取了标记并使用它有条件地配置我的应用

您可以尝试使用CodeDeploy在部署生命周期事件期间公开的环境变量,而不是使用标记。请结账https://blogs.aws.amazon.com/application-management/post/Tx1PX2XMPLYPULD/Using-CodeDeploy-Environment-Variables了解更多信息。

谢谢,
Surya。

我们在CodeDeploy和自定义生命周期挂钩方面遇到了完全相同的问题。直到生命周期结束后才生成标记,这已经太晚了,因为我们想在生命周期挂起期间执行CodeDeploy。

我们的解决方案是构建一个用户数据脚本,允许实例在启动时标记自己。脚本安装在每个AMI中,并接受两个参数:Environment和Function。

<script>
PowerShell -ExecutionPolicy Bypass -NoProfile -File c:toolsserver_userdata.ps1 --function Reg -environment production
</script>

因此,我们可以将该用户数据附加到启动配置,并且实例在启动时标记自己只要实例稳定,但还没有完成其生命周期,我们就可以成功地执行CodeDeploy。

我们必须使用角色策略来授予实例列出和创建标签的权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeTags",
                "ec2:CreateTags",
                "ec2:DeleteTags"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

userdata脚本是通用的和参数驱动的,因此我们可以使用任何环境和函数设置启动任何实例。当然,同样的方法也适用于Linux。

这种方法解决了您所描述的问题。

您必须在自动扩展组中添加自定义生命周期挂钩,并在CodeDeploy中使用它们。请记住,钩子执行的顺序不是可预测的。

相关内容

  • 没有找到相关文章

最新更新