繁体   English   中英

在Auto Scaling扩展事件期间从Code Deploy挂钩读取AWS EC2标记

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM