curl:(56)接收失败:连接由对等 aws lambda 打字稿重置

Cha*_*lie 5 curl amazon-web-services docker aws-lambda

我有一个用打字稿编写的小应用程序(现在只是测试它),我想部署到 lambda。我已按照 AWS 官方指南中创建 lambda 容器映像的官方教程进行操作。我只是将处理程序的位置更改为src/index.ts

当我跑步时,curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'我得到了curl: (56) Recv failure: Connection reset by peer

Dockerfile

FROM public.ecr.aws/lambda/nodejs:14

COPY . ${LAMBDA_TASK_ROOT}

# Install NPM dependencies for function
RUN npm install
RUN npm run build

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "dist/index.handler" ]

Run Code Online (Sandbox Code Playgroud)

包.json

FROM public.ecr.aws/lambda/nodejs:14

COPY . ${LAMBDA_TASK_ROOT}

# Install NPM dependencies for function
RUN npm install
RUN npm run build

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "dist/index.handler" ]

Run Code Online (Sandbox Code Playgroud)

src/index.ts

{
  ...
  "scripts": {
    "build": "tsc",
    "start": "yarn run build && node dist/index.js",
    "lint": "eslint . --ext .ts",
    "test": "jest"
  },
  ...
  "dependencies": {
    ...
    "typescript": "^4.5.4"
  },
  "devDependencies": {
    "@types/node": "14",
    "jest": "^27.4.5"
  }
}

Run Code Online (Sandbox Code Playgroud)

tsconfig.json

export const handler = (event, context, callback) => {
  console.log("It ran");

  return callback(null, {
    statusCode: 200,
    message: "Hello",
    body: "Hello"
  })
}

Run Code Online (Sandbox Code Playgroud)

据我了解,AWS容器映像使用aws-lambda-runtime-interface-emulator。访问他们的 github 页面,几乎没有任何关于调试的内容。无法获取日志,无法了解正在运行或未运行的内容。

从这个答案看来,容器内的应用程序没有分配给它的端口,但话又说回来,无法调试或查看日志。

当我将该函数部署到 aws lambda 并测试它时,它按预期工作:

在此输入图像描述

问题

我该如何调试正在发生的事情?为什么我会收到一个curl: (56) Recv failure: Connection reset by peer

Cha*_*lie 6

问题是,在构建映像时,当容器应用程序绑定9000到. 它通过更改解决了该问题:80008080

docker run -p 9000:8000 xxxx
Run Code Online (Sandbox Code Playgroud)

docker run -p 9000:8080 xxxx
Run Code Online (Sandbox Code Playgroud)