在 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章