如何使用Dockerized SAM Local设置调试

时间:2017-11-05 18:14:48

标签: amazon-web-services docker-compose aws-lambda dockerfile aws-sam-cli

我正在使用带有Node.js的AWS Lambda开展项目。我们在开发环境中使用Docker容器。

我们当前的设置在端口上传输AWS SAM本地:3000。它运行start-api并在我的template.yml文件中安装函数。我使用postman测试这些函数,以便将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"

这是SAM的Dockerfile,它位于名为"无服务器":

的目录中
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

我尝试过将-d标志添加到" sam"的各种排列。在docker-compose.yml中的RUN指令中进行服务。例如:sam local start-api --host 0.0.0.0 --d 8080。然后我尝试更改端口映射以公开它。但是,我无法弄清楚如何使端口映射工作。一旦我到达端点,我就会收到端口错误。

我还在使用docker / docker-compose和一个完整的nube来加速Lambda的东西,很抱歉,如果这个问题很愚蠢。

TIA!

1 个答案:

答案 0 :(得分:0)

这是一篇介绍PyDev远程调试器的操作的文章,该调试器用于通过Eclipse IDE单步执行在Docker容器中运行的Lambda代码。

https://medium.com/debugging-aws-lambda-functions-from-eclipse-with/debugging-aws-lambda-python-function-with-eclipse-using-pydev-1e0fa4b2deff

它是Python而不是Node,但可以帮助您大致了解运行在Docker容器中的调试脚本。