在 java 中更改 Auto Scaling 组的 Desired Capacity

Posted

技术标签:

【中文标题】在 java 中更改 Auto Scaling 组的 Desired Capacity【英文标题】:Change the Desired Capacity of a auto scaling group in java 【发布时间】:2017-02-21 19:51:06 【问题描述】:

我想在特定时间启动一个 EC2 实例,运行一个 Java 批处理作业,并在完成后使用 Java 关闭该实例。我想出了如何启动实例并运行我的工作。需要知道工作完成后如何关闭它。发现可以通过将弹性伸缩组的“setDesiredCapacity”值改为0来实现。该方法以弹性伸缩组名称为输入。但由于 ASG 名称是动态创建的,我不确定如何将它用于我的 Java 工作。有什么建议吗?

【问题讨论】:

【参考方案1】:

看来您的要求是:

定期启动将运行批处理作业的 Amazon EC2 实例 在作业结束时,终止 EC2 实例

我建议不要使用 Auto Scaling(旨在根据需求动态扩展容量):

使用计划启动新的 EC2 实例。计划可以是某台机器(EC2 或 Internet 上的任何位置)上的 cron 作业,或者您可以使用 Amazon CloudWatch Events 运行启动实例的 Lambda 函数。 批处理作业完成后,终止实例,这可以通过以下几种方法完成: 向操作系统发送命令以关闭。如果 EC2 实例以terminate关闭行为 启动,则该实例将自动终止。见:Changing the Instance Initiated Shutdown Behavior 或者,让您的应用程序向 AWS 发出 TerminateInstances API 调用以直接终止实例。

或者,您也可以很现代,并且不使用 Amazon EC2 实例!

由于您的批处理作业使用 Java,您可以将 Lambda function 与 CloudWatch Events 计划一起使用。该计划将触发 Lambda 函数,该函数可以运行您的 Java 代码。完成后,Lambda 将自动终止。您只需按每 100 毫秒的使用量付费。

请注意,Lambda 函数最多可以执行 5 分钟,因此如果您的操作时间超过此时间,则 Lambda 不是一个合适的解决方案。

【讨论】:

感谢您的建议。由于您提到的时间限制,Lambda 对我不起作用。 有了 TerminateInstances,虽然实例会被终止,但当自动伸缩组发现没有实例时,它不会再次启动另一个实例吗?

以上是关于在 java 中更改 Auto Scaling 组的 Desired Capacity的主要内容,如果未能解决你的问题,请参考以下文章

Auto Scaling Group 启动配置更改

Elastic Beanstalk 环境的 Auto Scaling 组

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

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

Auto Scaling 活动失败,因为 VPC 中不存在安全组

使用多个目标组配置 Auto Scaling