我想在运行代码部署时在被新自动缩放组替换的 EC2 实例上运行脚本

Posted

技术标签:

【中文标题】我想在运行代码部署时在被新自动缩放组替换的 EC2 实例上运行脚本【英文标题】:I want to run a scripts on the EC2 instances that are being replaced by the new autoscaling group when code deploy runs 【发布时间】:2019-09-18 12:43:55 【问题描述】:

我有一个数据库表,其中包含我的自动扩展组中活动 EC2 实例的 IP 地址列表。当我执行代码部署并启动新实例时,我需要删除关闭的实例的 IP 地址,并添加正在启动的实例的 IP 地址与该新的自动缩放组。 我有一个蓝绿色代码部署环境。

我认为我需要的只是一种在检测到它正在关闭的 EC2 实例上运行脚本的方法。该脚本将只运行一条 SQL 命令来查找其 IP 地址并将其删除。这听起来很简单,但我已经看过了,似乎我必须创建一个 Lambda 函数并查看生命周期挂钩。没有更简单的方法吗?

我还需要记住,如果自动缩放检测到它需要添加一个额外的实例,因为它已经过载,并且当它因为工作负载现在减慢而删除一个实例时,这需要工作..

我是一个新手,所以我迷失在一些更高级的东西上(对我来说有点愚蠢)。

我将在 Centos AMI 上运行它。

感谢任何帮助!

【问题讨论】:

您需要在您的 EC2 上实施心跳。他们需要定期将某些内容发布到某个地方。调整这个有点复杂。通常(如果我愿意付费的话)我使用带有 ELB 的 Beanstalk 而不是原始 EC2s 实例,但我不确定这是您的情况。 【参考方案1】:

见Amazon EC2 Auto Scaling Lifecycle Hooks。

生命周期挂钩使您能够通过暂停来执行自定义操作 作为 Auto Scaling 组的实例启动或终止它们。什么时候 一个实例被暂停,它一直处于等待状态,直到你 使用 complete-lifecycle-action CLI 完成生命周期操作 命令或 CompleteLifecycleAction API 操作,或超时时间 结束(默认为一小时)。

【讨论】:

以上是关于我想在运行代码部署时在被新自动缩放组替换的 EC2 实例上运行脚本的主要内容,如果未能解决你的问题,请参考以下文章

在自动扩展组中的 EC2 启动和关闭时运行命令

EKS:在特定 AWS 自动缩放组上运行特定服务(pod)

Lambda 不适用于具有自动缩放功能的 ec2

弹性豆茎上的 wurfl

Ansible:将正在运行的 EC2 实例添加到 Auto-scaling 组

当自动缩放组启动 EC2 时自动执行 grafana。而不是重复选项