每次更新代码时,使用 AWS SAM-CLI 都需要重建

Jef*_*eff 8 amazon-web-services aws-sam-cli aws-serverless aws-sam

我正在使用 SAM CLI 开发 API Gateway Lambda 代理集成。根据文档,我应该能够sam local start-api在本地测试我的端点。该start-api命令允许“热重新加载”,如AWS SAM 文档中所述。但是,我没有看到这种行为。

我的template.yaml文件如下所示:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /hello
            Method: get
    Metadata:
      Dockerfile: Dockerfile
      DockerContext: ./hello_world
      DockerTag: python3.9-v1
Run Code Online (Sandbox Code Playgroud)

当我跑步时:

> sam build && sam local start-api
Run Code Online (Sandbox Code Playgroud)

我可以看到端点正在工作:

在http://127.0.0.1:3000/hello处安装 HelloWorldFunction
您现在可以浏览到上述端点来调用您的函数。您在使用功能时无需重新启动/重新加载 SAM CLI,更改将立即/自动反映。

lambda_handler但是,当我对内部的函数进行更改时./hello_world/app.py, 的响应curl http://localhost:3000保持不变。不会发生热重载。

我发现的唯一解决方案是针对每个代码更改运行sam build。这极大地减慢了开发时间——由于 内部的一些依赖关系requirements.txt,我必须等待 1-2 分钟来构建每个代码更改。我可以只处理.aws-sam/build目录中的文件 -正如此处所建议的- 但这似乎是一个糟糕的解决方案,因为我必须同时维护处理程序的两个副本。

Ian*_*n-B 11

解决这个问题的一个很好的方法是使用该skip-pull-image标志,以便 Docker 重用 Lambda 运行时。本质上运行:

sam local start-api -t template.yaml --skip-pull-image

这让热重载对我有用。


pet*_*tey 1

根据https://github.com/aws/aws-sam-cli/issues/920https://github.com/aws/aws-sam-cli/issues/901,您预计有两个控制台/终端开放。sam local start-api一种你跑过去就不管它的地方。另一个是您sam build重复运行的地方(每当您需要更新时)。

如果您觉得这>有点烦人,