在 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何根据道具有条件地在 Stack Navigator 中渲染不同的屏幕
AWS Glue 数据目录,具有 S3 文件上的分区表和分区中的不同架构
Amazon AWS Elastic Beanstalk - 连接到 mongodb