首页 > 解决方案 > AWS SDK在容器覆盖命令上运行fargate抛出错误

问题描述

我正在使用 lambda 和 fargate AWS 服务开发应用程序。在 NodeJS 中开发基础应用程序并创建 docker 映像并推送到 AWS ECR 以创建 ECS 任务。

在这里,fargate 任务将使用 AWS SDK API runtask 使用 lambda 函数触发。这个 runtask API 有不同的参数被传递来运行 fargate 任务。其中一个参数是容器 Overriders: 命令。使用此命令,我正在尝试调用在任务容器中运行的节点应用程序。

Node 应用程序只能使用命令行调用(例如,node app.js bulk-process [..args..])。因此,当容器启动并执行此给定命令时,应用程序将抛出如下错误。

internal/modules/cjs/loader.js:626
throw err;
^
Error: Cannot find module '/usr/src/app/node app.js bulk-process --filename=filename --clientId=1 --file_row_count=121 --emails="#####@gmail.com" --cluster=cluster --tagValue=tagValue'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:623:15)
at Function.Module._load (internal/modules/cjs/loader.js:527:27)
at Function.Module.runMain (internal/modules/cjs/loader.js:837:10)
at internal/main/run_main_module.js:17:11 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}

Note: 
a. node app.js bulk-process --filename=filename --clientId=1 --emails="####@gmail.com" --cluster=cluster --tagValue=tagValue is the command to invoke node application.
b. Also don't know why path '/usr/src/app' is prepended to the node command by container.

我相信错误是说给定路径中缺少节点模块(包)但是当在 EC2 服务器上单独运行 docker 映像以验证 Dockerfile 执行的命令时,所有应用程序文件和 npm 包都已正确安装,甚至应用程序正在执行在对 docker 图像执行 sh 时正确。

请帮忙,因为我现在被这个问题困扰了很长时间,而且我是 AWS ECS 和 docker 服务的新手。

标签: node.jsamazon-web-servicesdockeramazon-ecsecs-taskdefinition

解决方案


推荐阅读