在 EC2 Auto Scaling 组中安排任务

Schedule a task in EC2 Auto Scaling Group

我在一个自动缩放组上有多个 EC2。它们都是 运行 相同的 java 应用程序。在应用程序中,我想每个月触发一个功能。所以,我有一个每月使用 Spring Schedule 和 运行s 的函数。但是,该函数在自动缩放组中的每个 EC2 实例上都是 运行,而它只能 运行 一次。我应该如何处理这个问题?我正在考虑使用像 Amazon SQS 这样的服务,但他们也会有同样的问题。

为了更具体地说明我尝试过的内容,在一次尝试中,该函数将带有本月唯一键的记录放在所有 ec2 实例共享的数据库中。如果本月的记录已经存在,则忽略放置请求。现在问题转移到阅读部分了吗?我有一个读取数据库并完成工作的功能。但是这个函数是 运行 每个 ec2 实例。

有意思!您可以在 一个 服务器上进行配置以触发每月 activity,但 Auto Scaling 组中的各个实例应被视为相同的、可以更换的脆弱系统在一个月内。所以,不能保证这个特定的服务器会在一个月内出现。

我建议您退后一步,将每月事件视为 在服务器外部触发的事件

我假设服务器集群是 运行 一个 Web 应用程序,并且在实例前面有一个负载均衡器,用于在实例之间分配流量。如果是这样,"something" 应该向负载均衡器发送一个请求,并且这将被转发到其中一个实例进行处理,就像任何正常请求一样。

此特定请求将URL用于专门触发每月处理。

这留下了发送此特定请求的 "something" 是什么的问题。为此,有很多选择。一个简单的是:

  • 配置 Amazon CloudWatch Events 以根据计划触发 Lambda 函数
  • AWS Lambda 函数 会将 HTTP 请求发送到负载均衡器