【问题标题】:make sam to IGNORE requirements.txt让 sam 忽略 requirements.txt
【发布时间】:2021-05-22 14:43:31
【问题描述】:

所以我使用 AWS SAM 来构建和部署一些功能到 AWS Lambda。 由于我的连接速度很慢,上传功能很慢,所以我决定在其中创建一个带有需求的图层。所以下次我尝试部署功能时,我不必上传所有 50 mb 的需求,我可以使用已经上传的层。

问题是我找不到任何可以让我忽略需求文件并只部署源代码的参数。

有可能吗?

【问题讨论】:

    标签: python amazon-web-services aws-lambda requirements.txt sam


    【解决方案1】:

    我希望我能正确理解您的问题,但如果您想部署一个没有任何依赖关系的 lambda,您可以尝试两件事:

    • 在运行sam deploy之前未运行sam build
    • 有一个空的 requirements.txt 文件。那么sam build 根本不包含该 lambda 函数的任何依赖项。

    当然,在这里我假设该层已经存在于 AWS 中,并且不包含在同一个模板中。如果它们在同一个模板中定义,则必须将它们分成两个堆栈。一种是可以部署一次的层,另一种是引用该层的 lambda。

    不幸的是,据我所知,sam build 没有忽略 requirements.txt 的标志,因为该命令的核心目的是构建依赖项。

    【讨论】:

    • 谢谢,我认为 build 还创建了使用 deploy 所必需的文件。但是现在我有另一个问题,它也尝试上传虚拟环境目录,是否有类似 .saminore 的东西?就像 git 忽略一些文件一样。
    • 您可以通过修改 lambda 函数的 CodeUri 属性来控制上传到 lambda 的文件。如果您有三个文件,<root dir>/template.yml <root dir>/src/lambda_code.py<root dir>/src/requirements.txt 您可以指定 CodeUri: srcHandler: lambda_code.lambda_handler。然后只有src/文件夹中的文件会被上传到你的lambda函数中。
    【解决方案2】:

    对于所有使用图像容器的人来说,这是我找到的解决方案。它极大地改进了工作流程。

    Dockerfile [如果requirments.txt没有改变则跳过]

    FROM public.ecr.aws/lambda/python:3.8 AS build
    
    COPY requirements.txt ./
    RUN python3.8 -m pip install -r requirements.txt -t .
    
    COPY app.py ./
    COPY model /opt/ml/model
    
    CMD ["app.lambda_handler"]
    

    我改变了什么?

    这是默认的 Dockerfile

    FROM public.ecr.aws/lambda/python:3.8
    
    COPY app.py requirements.txt ./
    COPY model /opt/ml/model
    
    RUN python3.8 -m pip install -r requirements.txt -t .
    
    CMD ["app.lambda_handler"]
    

    此方案基于https://stackoverflow.com/a/34399661/5723524

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2013-04-19
      • 2010-11-27
      • 1970-01-01
      相关资源
      最近更新 更多