有没有一种方法可以使用 AWS SAM 增量构建容器镜像?
Is there a way to incrementally build container images with AWS SAM?
我使用 AWS SAM CLI 创建了一个部署为容器映像的 Lambda 函数。问题是每次我对代码 (app.py) 和 运行 sam build 进行小改动时,都会下载需求。原因可以从下面的Dockerfile中理解。
Dockerfile
FROM public.ecr.aws/lambda/python:3.8
COPY app.py requirements.txt ./
COPY models /opt/ml/models
RUN python3.8 -m pip install -r requirements.txt -t .
CMD ["app.lambda_handler"]
每次我 运行 sam build.
它都会下载需求
我在 github 上也遇到过使用 --cached 选项的帖子,但如果我们使用容器映像,它就不起作用。
https://github.com/aws/aws-sam-cli/issues/805
template.yml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 50
MemorySize: 5000
Resources:
InferenceFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
PackageType: Image
Architectures:
- x86_64
Metadata:
Dockerfile: Dockerfile
DockerContext: ./app
DockerTag: python3.8-v1
依赖是tensorflow 2.8.0,超过200MB,我无法更改为任何其他选项,如tensorflow-lite。
根据 docker 缓存的工作方式,COPY
语句之后的所有内容都在缓存中无效(假设更改)。依赖项通常保留在缓存中的方式是仅添加安装依赖项所必需的内容,安装它们,然后仅在安装依赖项后添加您的服务代码。在下面的示例中,如果 requirements.txt 发生变化,pip install
只会 运行 多次。
FROM public.ecr.aws/lambda/python:3.8
COPY requirements.txt ./
RUN python3.8 -m pip install -r requirements.txt -t .
COPY app.py ./
COPY models /opt/ml/models
CMD ["app.lambda_handler"]
我使用 AWS SAM CLI 创建了一个部署为容器映像的 Lambda 函数。问题是每次我对代码 (app.py) 和 运行 sam build 进行小改动时,都会下载需求。原因可以从下面的Dockerfile中理解。
Dockerfile
FROM public.ecr.aws/lambda/python:3.8
COPY app.py requirements.txt ./
COPY models /opt/ml/models
RUN python3.8 -m pip install -r requirements.txt -t .
CMD ["app.lambda_handler"]
每次我 运行 sam build.
它都会下载需求我在 github 上也遇到过使用 --cached 选项的帖子,但如果我们使用容器映像,它就不起作用。 https://github.com/aws/aws-sam-cli/issues/805
template.yml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 50
MemorySize: 5000
Resources:
InferenceFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
PackageType: Image
Architectures:
- x86_64
Metadata:
Dockerfile: Dockerfile
DockerContext: ./app
DockerTag: python3.8-v1
依赖是tensorflow 2.8.0,超过200MB,我无法更改为任何其他选项,如tensorflow-lite。
根据 docker 缓存的工作方式,COPY
语句之后的所有内容都在缓存中无效(假设更改)。依赖项通常保留在缓存中的方式是仅添加安装依赖项所必需的内容,安装它们,然后仅在安装依赖项后添加您的服务代码。在下面的示例中,如果 requirements.txt 发生变化,pip install
只会 运行 多次。
FROM public.ecr.aws/lambda/python:3.8
COPY requirements.txt ./
RUN python3.8 -m pip install -r requirements.txt -t .
COPY app.py ./
COPY models /opt/ml/models
CMD ["app.lambda_handler"]