在 AWS Stack 上运行更多具有不同参数的 node.js 应用程序

Posted

技术标签:

【中文标题】在 AWS Stack 上运行更多具有不同参数的 node.js 应用程序【英文标题】:Running more node.js applications with different arguments on AWS Stack 【发布时间】:2020-10-23 00:10:10 【问题描述】:

我有 node.js 应用程序,我想每天在预定时间使用不同的参数运行多次。

条件:AWS堆栈的使用情况

示例:每天晚上 7 点运行。使用不同的参数运行同一个应用程序 10 次。

目前我正在使用一个 EC2 的基本设置,pm2,运行带有不同参数的 node.js 应用程序。

我想要实现的是使用更多具有独立计算能力的无服务器基础架构。我在我的应用程序中使用 puppeteer 所以分享例如有时一台机器上有 10 个进程是有问题的。

我正在寻找最适合我使用的 AWS 服务(Elastic Beanstalk、ECS、AWS Lambda)的建议...

【问题讨论】:

【参考方案1】:

如果你想为此任务使用 ec2 实例,你可以使用 cron

sudo apt install cron

您可以在其中安排任务。欲了解更多信息,您可以访问

Here

但是,如果您说您希望无服务器,那么您可以使用 lambdas 和 cloud watch,它们将在您设置的时间后触发事件。欲了解更多信息,您可以访问

Here

Lambda 也很便宜。

【讨论】:

我正在使用您提到的第一个选项(ec2 ubuntu 机器 + cron 作业)。我想迁移到像 Lambda 这样的东西的原因,我想在没有进程运行时节省时间。【参考方案2】:

如果您的应用程序在特定时间后退出,那么无服务器将在这种情况下正常工作。

我会推荐两个选项

AWS Fargate AWS 拉姆达

如果我们研究 Fargate,您只需要为所有十几个应用程序提供不同的任务定义和 单个 Docker 映像,而且您可以使用 fargate 运行应用程序超过 15 分钟,而使用 lambda 是不可能的.

因此,您只需要以接受CMD 的方式设计 Dockerfile,并且您可以将参数传递给 nodejs 进程。

FROM node:alpine
RUN apk add --no-cache curl
WORKDIR /app
RUN curl -o app.js https://gist.githubusercontent.com/Adiii717/94543c1f87e6db86b55ba3a5a58a2bbc/raw/da0695811b50d70be4c36951e5baa40a051a2dcf/app.js
RUN echo $'#!/bin/sh \n\ 
     node app.js \"$@\"  ' >> /bin/entrypoint.sh

RUN chmod +x /bin/entrypoint.sh
entrypoint ["entrypoint.sh"]

所以要使用这个基于参数的 Dockefile 运行 N 服务

docker run -it --rm abc app1
docker run -it --rm abc app2
docker run -it --rm abc app3
.
.
.

在任务定义中你只需要传递

"command": ["app1"]

"command": ["app2"]

示例:每天晚上 7 点运行。使用相同的应用程序运行 10 次 每个参数都有不同的参数。

定义云监视规则以按时间触发所需的远程任务。

scheduled_tasks

我想在没有进程运行时节省时间。

您只需在流程/任务运行时付费。

【讨论】:

感谢您的建议,AWS Fargate 看起来像是适合我的解决方案!这对我帮助很大!它看起来适合我的另一个原因是我的进程持续时间超过 15 分钟...... 是的,它适合这样的工作 还有一个问题,如果进程使用redis会怎样。我可以在单独的容器中运行 redis 并让其他进程使用它吗?怎么样? 是的,您可以运行 Redis 容器,并使用服务发现与 Redis 连接

以上是关于在 AWS Stack 上运行更多具有不同参数的 node.js 应用程序的主要内容,如果未能解决你的问题,请参考以下文章