在关闭之前检查 Auto Scaling 组中的 EC2 实例是不是有任何用户在使用它

Posted

技术标签:

【中文标题】在关闭之前检查 Auto Scaling 组中的 EC2 实例是不是有任何用户在使用它【英文标题】:Check the EC2 instance in auto scaling group before shut downing as whether any user working on it or not在关闭之前检查 Auto Scaling 组中的 EC2 实例是否有任何用户在使用它 【发布时间】:2017-10-17 19:12:21 【问题描述】:

我需要在 AWS 中进行自动缩放,如果 cpu 阈值达到 80%(例如 ..,),那么应该自动启动新实例 ..,(这是通常的过程) 但在这种情况下,无论用户(开发人员)在其上工作/登录,旧实例(当前实例,其中 cpu 限制达到上述阈值)都会被关闭;这会导致数据丢失。 避免这种情况的解决方案是什么? 有什么方法可以通过使用 AWS-Lambda 以及自动扩展概念或任何其他方式来解决这个问题?

【问题讨论】:

How can I prevent EC2 instance termination by Auto Scaling?的可能重复 【参考方案1】:

在博客Using AWS Lambda with Auto Scaling Lifecycle Hooks 中,您将找到一个关于如何使用AutoScaling Lifecycle Hooks 通过SNS 触发Lambda 并执行的示例自定义操作。

例如,您可以在登录过程中有一个 sn-p(.bashrc.profile...),它为给定实例向 SQS 发送消息,并在注销后,触发的 Lambda 可以检查实例是否被标记为“已使用”并等待它被释放。

【讨论】:

我需要在 Stack 中配置这个;如何在 AWS-CFT 中进行配置【参考方案2】:

使用 AWS Auto Scaling,以下是避免数据丢失的五种策略:

1-Cloudwatch

您应该熟悉Cloudwatch。 Cloudwatch 将允许您to create alarms for metrics that define when an EC2 instance is removed from your Auto Scale Group。例如,您创建一个 CPU 利用率指标和一个用户数量指标。您将自动扩展策略设置为不终止(aka Scale In)自动扩展组中的 EC2 实例,除非指标低于 50% CPU 并且有 0 个用户。此外,Cloudwatch 可以让您知道您是否超出了预算。

2-Scale In Lifecycle Hook

当您终止 EC2 实例时,您可以使用 Lifecyle hook 来执行您定义的操作。特别是 autoscaling:EC2_INSTANCE_TERMINATING 生命周期钩子可以设置为运行脚本以在实例终止之前从实例复制用户数据(或日志文件等)。

3-避免实例存储

当您为实例选择 AMI 时,use EBS backed AMIs。这允许您的数据在实例终止后保留。或者,将您的数据存储在 S3 或 AWS 数据存储中。

避免将用户数据存储在实例存储(也称为临时存储)because that data is lost once the instance is done with termination during scale in or in the case of instance failure。

4-手动自动缩放

使用控制台或 CLI,manually scale your auto scale group。这可以帮助避免意外的数据丢失。从实例中删除用户数据后,您可以手动缩减。当您决定/测试应用程序的新设计时,手动扩展可能是一种安全的扩展后备策略。

5-应用重新设计

使用云时,最好将您的实例视为可随时更换。 Design for failure (see lesson #2 at link)。努力使您的系统尽可能无状态。无状态设计可减少实例存储(通常),并为您在 Auto Scaling 组中所需的水平扩展提供更多支持。 (在AWS Best Practice White Paper中搜索“无状态应用程序”)

【讨论】:

CFT怎么样? 看看这个页面:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… 更具体地说这个例子:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… - 非常感谢你使用 CFT!随时在 SO 上提出一个新问题。您在问题描述中提供的详细信息越多,我们就能越好地帮助回答。参考:***.com/help/mcve。 AWS 论坛也可以提供帮助:forums.aws.amazon.com

以上是关于在关闭之前检查 Auto Scaling 组中的 EC2 实例是不是有任何用户在使用它的主要内容,如果未能解决你的问题,请参考以下文章

网络负载均衡器目标组中的 AWS Auto Scaling 目标

旧数据仍来自 Auto Scaling 组中的 EC2 实例

AWS CDK 如何覆盖 Auto Scaling 组中的默认启动配置?

如何在 Amazon Auto-scaling 组中的多个 ec2 实例上部署和更新应用程序?

如何在 CloudFormation 模板中禁用对 Auto Scaling 组中实例的详细监控?

如何获取 Auto Scaling 组中实例的 IP