通过 API 网关安全路由的 ECS 容器未返回,但对容器的运行状况检查良好

ECS containers securely routed via API Gateway not returning but health check on containers is good

好的,这会很长,但我想确保我解释清楚。我正在尝试做一个概念证明,我们可以通过使用 API 网关公开的 ECS 部署微服务,这样我们就可以利用 lambda 授权者和认知。

为了实现这一点,我一直在遵循 Medium

上的指南

然而,一旦我部署了我的网关,我就会遇到以下错误:

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 网关中创建了一个 VPC link,然后创建了如下资源:

然后我部署在最后用 /node-demo 命中 URL 并得到上面的初始错误。要么是指南有误,要么是我做错了根本性的事情。

好消息和坏消息,

好消息,问题解决了

坏消息,超级简单

只是需要添加一个路由到快递应用程序,

/node-demo