我在Codedeploy下创建了一个虚拟应用程序,然后创建了一个部署组并在其下添加了一个EC2实例。
我还没有进行任何部署。
我正在尝试找到适当的aws命令,它可以获取部署组下的EC2实例列表。查看this list中给出的命令,我检查了一些list-deployment-instances
。所有这些参数都有deployment-id
,即 -
部署的唯一ID。
我猜这是在部署之后生成的。如果我错了,请纠正我。 无论如何,我还没有找到任何命令,它给出了部署组下的ec2实例列表。 我错过了什么?
化背景
更新 - 开放赏金
我们正在尝试在启动部署之前添加一个健全性检查,以查看当前在部署组下的可访问实例总数(有时会下降的框)是否小于我们上次检查时的数量,如果是,则通过什么保证金?
在最初的问题中,我正在考虑直接在部署组下查找实例,但现在我意识到部署组下的实例可能无法修复,现在我正在考虑在部署组下找到标签然后使用这些标签查找实例。我可以将计数存储在文件中的每个部署组中,并使用它来进行下一次比较。但是,我找不到任何AWS CLI命令来查找具有给定标记的实例。我想这样的东西应该是可用的,因为代码部署仪表板允许相同的。
注意 - 我知道如果某些实例无法访问,那么部署的最终结果将显示为成功,并且可以从AWS Code部署仪表板中找到失败的实例。但是,我仍然想知道是否可以通过任何SDK使用某些AWS CLI命令或某些API,我可以在其中找到部署组下可访问实例的数量
答案 0 :(得分:2)
如您所知,没有简单的方法可以确定仅从部署组名称运行的实例。我仔细检查了CLI,您需要部署组ID来引用当前部署到的实例。
您不必需要获取要部署的实例列表。这是通过每个部署组中指定的实例条件来完成的。专注于正确标记实例,以便CodeDeploy自动列出您想要的实例!
您应该为每个部署组标记本身添加适当的标记EG Environment=Testing; GitBranch=ResizeQueue
。这可以从AWS控制台或AutoScaling组完成,因此所有启动实例都具有有效标记。
然后在部署组中,实例由该组标记识别,并且可以使用该规范进行部署。您可以仅将分支更新部署到这些实例。
答案 1 :(得分:1)
罗德里戈回答了几点:
为什么没有API来获取部署组下的实例?我们没有将实例视为CodeDeploy资源的一部分(它们更接近EC2的资源)。标记和ASG被视为CodeDeploy资源的一部分。另一个原因是标记的实例可能会发生变化,而且这部分超出CodeDeploy的控制范围:客户可以通过EC2删除/添加实例(同样的逻辑转到ASG)。我们不希望显示可能发生变化但同时又无法控制的资源:这会给我们的客户带来混乱。 CodeDeploy将仅记录部署到的实例:此时,这些实例是CodeDeploy资源的一部分并且它们变得固定(这就是为什么我们有get-deployment-instance和batch-get-deployment-instances API)。话虽如此,推荐的方法是使用EC2 CLI:aws ec2 describe-instances --filters "Name=tag-key,Values=Owner"
来获取感兴趣的实例。
在部署之前,您的服务似乎对健康实例的数量很敏感。在CodeDeploy中采用ASG和设置最低健康主机非常方便:不需要DevOps来执行任何手动干预。
在您的更新部分中,您提到在初始部署之前添加健全性检查。您可以在CodeDeploy部署配置中设置最低健康主机数。如果在部署时,实际上没有足够的实例部署到,则部署将快速失败:不会触及任何实例。如果有足够的实例,则将启动部署,并在整个部署过程中维护最低健康主机约束。
答案 2 :(得分:0)
您可以使用以下命令在实例中搜索您想要的任何标签。
通过 CodeDeploy GroupName 获取实例的示例:
aws ec2 describe-instances --profile CLI_PROFILE --filters Name=tag:aws:autoscaling:groupName,Values=YOURGROUPNAME | grep PublicDnsName