Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过API网关安全路由的ECS容器不会返回,但容器的运行状况检查良好_Node.js_Amazon Web Services_Docker_Amazon Ecs_Aws Application Load Balancer - Fatal编程技术网

Node.js 通过API网关安全路由的ECS容器不会返回,但容器的运行状况检查良好

Node.js 通过API网关安全路由的ECS容器不会返回,但容器的运行状况检查良好,node.js,amazon-web-services,docker,amazon-ecs,aws-application-load-balancer,Node.js,Amazon Web Services,Docker,Amazon Ecs,Aws Application Load Balancer,好吧,这将是一个漫长的过程,但我想确保我能解释清楚。我试图做一个概念证明,我们可以通过使用API网关公开的ECS部署微服务,这样我们就可以利用lambda授权人和cognito 为了实现这一目标,我一直遵循本指南 但是,一旦部署网关,我将面临以下错误: Cannot GET /node-demo 让我介绍一下基本知识,我有一个基本的express应用程序,如下所示: const express = require('express') const PORT = process.env.POR

好吧,这将是一个漫长的过程,但我想确保我能解释清楚。我试图做一个概念证明,我们可以通过使用API网关公开的ECS部署微服务,这样我们就可以利用lambda授权人和cognito

为了实现这一目标,我一直遵循本指南

但是,一旦部署网关,我将面临以下错误:

Cannot GET /node-demo
让我介绍一下基本知识,我有一个基本的express应用程序,如下所示:

const express = require('express')

const PORT = process.env.PORT || 3000

const app = express()

app.get('/', (request, response) => {
  return response.json({
    data: {
      message: `API is functional`,
    },
  })
})

app.listen(PORT, () => console.log(`App running on port ${PORT}`))
Dockerfile如下所示:

FROM mhart/alpine-node:10.16.3

WORKDIR /app

COPY package*.json ./

RUN npm ci

COPY index.js .

CMD ["npm", "start"]
此docker映像已推送到ECR,我已使用环境变量
PORT=>80创建了一个任务定义

在我的群集上创建了一个工作正常的服务。然后创建了一个ALB,目标组指向我的容器,这些容器恢复正常

我通过以下途径到达这些目标:

然后我的NLB指向ALB,我已经允许ALB上有正确的IP,因此我们可以通过安全组访问它。NLB目标群体中的两个IP都是健康的

在API Gateway中创建了一个VPC链接,然后创建了一个如下所示的资源:

然后,我在最后用
/node demo
点击URL,得到上面的初始错误。要么是导游搞错了,要么是我做错了什么事。

好消息和坏消息

好消息,我已经解决了这个问题

坏消息,这太简单了

只需要在express应用程序中添加一个路由


/node demo

添加建议进行一些测试以隔离问题。您可以直接呼叫ECS内部IP吗?如果成功,那么问题在于路由。此外,请检查您的安全组,并确保端口和IP/子网都已列入白名单。访问内部IP的问题是我在哪里执行该表单?为什么您同时具有ALB和NLB?有API网关->NLB->ECS服务不是更好吗?我只是从那个指南开始,我会试一试!啊,我记得为什么,ALB意味着我可以有多个目标组,然后我可以在不同的URL下路由,即/测试/演示等