Nei*_*rdi 6 amazon-web-services dockerfile aws-lambda docker-compose aws-sam-cli
我正在处理一个使用 AWS Lambda 和 Node.js 的项目。我们将 Docker 容器用于我们的开发环境。
我们当前的设置在端口 :3000 上启动本地 AWS SAM。它运行 start-api 并将函数挂载到我的 template.yml 文件中。我使用邮递员测试这些功能以将 JSON 发送到已安装的 API 端点,如下所示:http : //127.0.0.1 : 3000/ foo
Docker 设置还在 :4000 上启动了一个单独的 Node.js 实例。
如上所述,我可以在本地测试 Lambda 内容。但是,我想激活调试,以便我可以单步执行该函数并检查变量,而不是使用console.log(). 我不知道如何编辑 Dockerfile / docker-compose.yml 来实现这一点。
这是我的 docker-compose 文件:
version: '3'
services:
web:
build: ./web
container_name: someapp
command: npm run dev
volumes:
- ./web:/usr/app/
- /usr/app/node_modules
ports:
- "4000:4000"
environment:
DATABASE_URL: mongo://someapp:someapp@10.10.62.205:37017,10.10.62.205:37018,10.10.62.205:37019/somedb
sam:
build: serverless/.
container_name: samlocal
command: sam local start-api --host 0.0.0.0
environment:
COMPOSE_CONVERT_WINDOWS_PATHS: 1
SAM_DOCKER_VOLUME_BASEDIR: ${CURRENT_DIRECTORY}/serverless
DATABASE_URL: mongo://someapp:someapp@10.10.62.205:37017,10.10.62.205:37018,10.10.62.205:37019/somedb
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./serverless:/var/opt
ports:
- "3000:3000"
Run Code Online (Sandbox Code Playgroud)
这是 SAM 的 Dockerfile,它位于名为“serverless”的目录中:
FROM alpine:3.6
ENV VERSION=0.2.2
RUN apk add --no-cache curl && \
curl -sSLO https://github.com/awslabs/aws-sam-local/releases/download/v${VERSION}/sam_${VERSION}_linux_386.tar.gz && \
tar -C /usr/local/bin -zxvf /sam_${VERSION}_linux_386.tar.gz && \
apk del curl && \
rm -f /sam_${VERSION}_linux_386.tar.gz
# awscli for "sam package" and "sam deploy"
RUN apk add --no-cache py-pip && pip install awscli
WORKDIR /var/opt
EXPOSE 3000
Run Code Online (Sandbox Code Playgroud)
我已经尝试了将 --d 标志添加到 docker-compose.yml 中 RUN 指令中的“sam”服务的各种排列。例如:sam local start-api --host 0.0.0.0 --d 8080。然后我尝试更改端口映射以公开它。但是,我不知道如何让端口映射工作。一旦我到达端点,我就会收到端口错误。
当涉及到 Lambda 的东西时,我仍然在加快 docker / docker-compose 的速度,并且完全是 nube,如果问题很愚蠢,很抱歉。
蒂亚!
我已经确定我最初的方法是错误的。
将 SAM Local 作为我的 docker-compose 设置的一部分(或者我是这么认为)的好处是,我可以省去我的队友在他们的计算机上本地安装它的麻烦。并以这种方式开始:
sam local start-api --host 0.0.0.0
似乎提供了“自动”安装所有 API 端点的额外便利。
然而,这并没有为用户提供打开和关闭调试的灵活性。它也不允许用户在使用 Postman 进行 POST 输入或从文件加载输入数据之间进行切换。
所以这就是我现在正在做的方式:
$ npm install aws-sam-local --g
$ cd path/to/my/template.yml
Run Code Online (Sandbox Code Playgroud)
使用邮递员:
$ sam local start-api
Run Code Online (Sandbox Code Playgroud)
或 Postman 加调试器:
$sam local start-api -d 5858
Run Code Online (Sandbox Code Playgroud)
要绕过 Postman 并简单地从文件中读取输入:
$ sam local invoke "NameOfResource" -e ./path/to/file.json
Run Code Online (Sandbox Code Playgroud)
或者使用调试器执行相同的操作:
$ sam local invoke "NameOfResource" -e ./path/to/file.json -d 5858
Run Code Online (Sandbox Code Playgroud)
注意:在上面的示例中,"NameOfResource"必须是一个字符串,并且必须与 template.yml 中列出的资源名称匹配(以防与源代码中的实际函数名称不同)。
通过这种方式,我可以连接 WebStorm 中的远程 Node.js 调试器并设置断点。我还可以连接 Visual Studio Code 调试器。但是,Visual Studio Code 似乎忽略了我的断点,迫使我使用debugger;语句。这很不幸,因为我的队友都使用 Visual Studio Code,而 WebStorm 不是免费的。如果有人知道如何解决 Visual Studio 问题,请大声喊叫!
| 归档时间: |
|
| 查看次数: |
3472 次 |
| 最近记录: |