首页 > 解决方案 > 每次更新代码时,使用 AWS SAM-CLI 都需要重新构建

问题描述

我正在使用 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

当我运行时:

> sam build && sam local start-api

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

在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——正如这里所建议的——但这似乎是一个糟糕的解决方案,因为我必须同时维护处理程序的两个副本。

标签: amazon-web-servicesaws-serverlessaws-samaws-sam-cli

解决方案


根据https://github.com/aws/aws-sam-cli/issues/920 & https://github.com/aws/aws-sam-cli/issues/901,您应该有两个控制台/终端打开。一个你跑的地方sam local start-api,别管它。另一个你sam build重复运行的地方(当你需要更新时)。

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


推荐阅读