尝试使用aws命令获取部署组下ec2实例的列表


  • 我在Codedeploy下创建了一个虚拟应用程序,然后创建了一组部署组,并在其下添加了一个EC2实例。

  • 我还没有进行任何部署。

  • 我正试图找到合适的aws命令,它可以为我获取部署组下的EC2实例列表。查看此列表中给出的命令,我检查了一些类似list-deployment-instances的命令。它们都有这个参数deployment-id,它是-

部署的唯一ID。

我想这是在进行部署后生成的。如果我错了,请纠正我无论如何,我还没有找到任何命令,它为我提供了部署组下ec2实例的列表我是不是错过了什么

背景

  • 我们在负载均衡器后面有多个EC2实例,在生产环境中运行,其中一些实例可能需要使用不同的git分支进行部署(为了测试某些功能,在所有实例上推出之前,这可能需要在后续部署中保留)
  • 我们的DevOps团队还没有使用自动缩放。因此,他们手动地增加或减少实例
  • 在下一次部署过程中,我们需要将适当的git分支部署到实例组中,这取决于它们当前所在的git支路。因此,在此之前,我们希望使用脚本更新部署组,该脚本将通过检查每个实例中部署的git修订来执行此操作

更新-打开奖励

我们正试图在启动部署之前添加一个健全性检查,以查看部署组下当前可访问实例的总数(框有时会下降)是否小于上次检查时的数量,如果是,差距是多少?

在最初的问题中,我想直接在部署组下找到实例,但现在我意识到部署组下的实例可能是不固定的,现在我想在部署组中找到标签,然后找到带有这些标签的实例。我可以将每个部署组的计数存储在一个文件中,并在下次进行比较。但是,我找不到任何AWS CLI命令来查找具有给定标记的实例。我想这样的东西应该是可用的,因为代码部署面板允许同样的功能。

注意-我知道,如果某些实例不可访问,那么部署的最终结果显示为成功,而失败的实例可以从AWS代码部署面板中找到。但是,尽管如此,我还是想知道是否有一些AWS CLI命令或一些API可通过任何SDK使用,我可以在部署组下找到可访问实例的数量

正如您所注意到的,没有简单的方法可以仅根据部署组名称来确定正在运行的实例。我仔细检查了CLI,您需要部署组ID来引用当前部署到的实例。

您不需要获取要部署到的实例的列表。这是由每个部署组中指定的实例条件完成的。重点是正确标记实例,以便CodeDeploy自动列出您想要的实例!

您应该让每个部署组标记本身带有适当的标记EGEnvironment=Testing; GitBranch=ResizeQueue。这可以从AWS控制台或AutoScaling Group完成,以便所有启动实例都具有有效标记。

然后在部署组中,实例由该组标记已知,并且可以使用该规范进行部署。您可以仅将分支更新部署到这些实例。

罗德里戈的答案需要补充几点:

  1. 为什么没有API来获取部署组下的实例?我们没有将实例视为CodeDeploy资源的一部分(它们更接近EC2的资源)。标签和ASG被认为是CodeDeploy资源的一部分。另一个原因是,标记的实例可能会发生变化,而这一部分超出了CodeDeploy的控制范围:客户可以通过EC2删除/添加实例(ASG也有同样的逻辑)。我们不想展示可以改变的资源,同时又超出我们的控制范围:这会给我们的客户带来困惑。CodeDeploy将只记录部署到的实例:此时,这些实例是CodeDeploy资源的一部分,它们将被修复(这就是为什么我们有get部署实例和batch get部署实例API)。也就是说,推荐的方法是使用EC2-CLI:aws ec2 describe-instances --filters "Name=tag-key,Values=Owner"来获取感兴趣的实例。

  2. 在部署之前,您的服务似乎对健康实例的数量很敏感。采用ASG和在CodeDeploy中设置最小健康主机非常方便:DevOps不需要执行任何手动干预。

  3. 在更新部分中,您提到在初始部署之前添加健全性检查。您可以在CodeDeploy部署配置中设置最小运行状况主机计数。如果在部署时,碰巧没有足够的实例可部署到,那么部署将很快失败:不会接触任何实例。如果有足够的实例,则将启动部署,并在整个部署过程中保持最小的健康主机约束。

您可以使用下面的命令在实例中搜索您想要的任何标记。

CodeDeploy GroupName获取实例示例:

aws ec2描述实例--profile CLI_profile--filters Name=标记:aws:autoscaling:groupName,Values=YOURGROUPNAME|grep PublicDnsName

相关内容

  • 没有找到相关文章

最新更新