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?
问题是,在构建映像时,当容器应用程序绑定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)
| 归档时间: |
|
| 查看次数: |
4109 次 |
| 最近记录: |