[英]When does AWS deregister an EC2 from the auto-scaling group during scale-in?
[英]Reading AWS EC2 tag from Code Deploy hook during Auto Scaling scale-in event
我真的很喜欢使用与Auto Scaling集成的AWS Code Deploy,但是在扩展事件期间遇到有关读取标签的问题。
我已经设置了Auto Scaling组以标记任何使用标记名称“环境”创建的新实例。 然后,作为我的Code Deploy安装后脚本的一部分,我读取了标签并使用它有条件地配置我的应用程序。 如果我将修订部署到自动伸缩组中的现有实例,则此方法非常有效。 但是,在扩展事件期间,在从Auto Scaling调用Code Deploy之前,似乎未将标签分配给新的EC2实例,因此我的安装后配置失败。
有什么解决办法吗? 是否可以在管道中更早地将标签与EC2实例相关联?
然后,作为我的Code Deploy安装后脚本的一部分,我读取了标签并使用它有条件地配置我的应用
您可以尝试使用CodeDeploy在部署生命周期事件期间公开的环境变量来代替使用标签。 请查看https://blogs.aws.amazon.com/application-management/post/Tx1PX2XMPLYPULD/Using-CodeDeploy-Environment-Variables了解更多信息。
谢谢,
苏里亚
您必须在自动缩放组中添加自定义生命周期挂钩 ,并在CodeDeploy中使用它们。 请记住,挂钩执行的顺序不是可预测的。
关于CodeDeploy和自定义生命周期挂钩,我们遇到了完全相同的问题。 直到生命周期结束后才生成标签,这太晚了,因为我们想在生命周期未决期间进行CodeDeploy。
我们的解决方案是构建一个userdata脚本,该脚本将允许实例在启动时对其自身进行标记。 该脚本已安装到每个AMI中,并接受两个参数:Environment和Function。
<script>
PowerShell -ExecutionPolicy Bypass -NoProfile -File c:\tools\server_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中使用。
这种方法解决了您正在描述的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.