【发布时间】:2020-03-02 23:35:26
【问题描述】:
我有 AWS EC2 实例运行 Debian,systemd 运行节点即服务。 (以下将这些实例称为“节点服务器”。)
Node 服务器由另一个永久开启的实例(以下称为“管理器实例”)启动。
当节点服务器遇到某个预定义的不活动期时,我希望它自动关闭。
我正在考虑以下选项:
- (在检测到 Node 中的一段时间不活动后)在运行
shutdown now命令的 Node 中执行child_process。 - (在检测到 Node 中的一段时间不活动后)使用实例自己的资源 ID 调用 AWS SDK 的 stopInstances。
- 在每个 Node 服务器上公开一个名为
last-request-time的 HTTP GET 端点,由“管理器实例”定期轮询,然后决定是否/何时调用 AWS SDK 的 stopInstances。
我不确定该采用哪种方法,如果有任何建议,我将不胜感激。从运行在同一台机器上的 Node 显式关闭机器感觉有点不合适。但是选项 3 需要定期进行 HTTP 轮询,更不用说依赖另一个实例进行自动关闭感觉风险更大。 (如果经理宕机了,所有的实例都会继续运行。)
或者当特定服务以特定代码退出时,也许可以让 systemd 关闭机器?如果可能的话,这将是最好的解决方案,因为 Node 进程只需要在具有特定退出代码的不活动期之后自行中止。
【问题讨论】:
-
与其调用
StopInstances,不如调用操作系统并简单地关闭(相当于sudo shutdown now -h)。这样,您无需进行 AWS API 调用。 -
@JohnRotenstein 这是问题中的选项 1。
标签: node.js amazon-ec2 aws-sdk systemd aws-sdk-nodejs