本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
构建应用程序
要构建无服务器应用程序,请使用 sam 生成
命令。此命令还收集应用程序的依赖项的构建构件,并将它们放在正确的格式和位置以执行后续步骤,例如本地测试、打包和部署。
您可以在清单文件中指定应用程序的依赖项,例如 requirements.txt
(Python) 或 package.json
(Node.js),或者使用 函数资源的 Layers
属性。属性包含 Layers
函数所依赖的 AWS Lambda 层资源的列表。Lambda
您的应用程序的构建构件的格式取决于每个函数的 PackageType
属性。属性的选项是:PackageType
-
Zip
– 一个 .zip 文件存档,其中包含您的应用程序代码及其依赖项。如果将代码打包为 .zip 文件存档,则必须为函数指定 Lambda 运行时。 -
Image
容器映像,包括基本操作系统、运行时和扩展以及应用程序代码及其依赖项。–
有关 Lambda 程序包类型的更多信息,请参阅 中的 Lambda 部署程序包。AWS Lambda Developer Guide
生成 .zip 文件存档
要将无服务器应用程序构建为 .zip 文件存档,请为无服务器 函数声明 PackageType: Zip
。
如果您的 Lambda 函数依赖于具有本机编译的程序包,请使用 --use-container
标记。标志会在 Docker 容器中本地编译行为类似于 --use-container
环境的函数,因此当您将函数部署到 Lambda 云时,它们采用正确的格式。AWS
有关构建 .zip 文件存档应用程序的示例,请参阅本主题后面的“示例”部分。
构建容器映像
要将无服务器应用程序构建为容器映像,请为无服务器 函数声明 PackageType:
Image
。您还必须使用以下条目声明 Metadata
资源属性:
-
Dockerfile
:与 Lambda 函数关联的 Dockerfile 的名称 -
DockerContext
:Dockerfile 的位置 -
DockerTag
:要应用于构建的映像的可选标签 -
DockerBuildArgs
:为构建构建构建参数
以下是一个示例 Metadata
资源属性部分:
Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1
要下载配置了 Image
程序包类型的示例应用程序,请参阅步骤 1:。 在 中教程:部署 Hello World 应用程序下载示例 AWS SAM 应用程序。在提示要安装哪种程序包类型的提示时,选择 Image
。
Examples
示例 1:.zip 文件存档
以下 sam build
命令生成一个 .zip 文件存档:
# Build all functions and layers, and their dependencies sam build # Run the build process inside a Docker container that functions like a Lambda environment sam build --use-container # Build and run your functions locally sam build && sam local invoke # For more options sam build --help
示例 2:容器映像
以下 AWS SAM 模板构建为容器映像:
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageConfig: Command: ["app.lambda_handler"] Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1
以下是一个示例 Dockerfile:
FROM public.ecr.aws/lambda/python:3.8 COPY app.py requirements.txt ./ RUN python3.8 -m pip install -r requirements.txt # Overwrite the command by providing a different command directly in the template. CMD ["app.lambda_handler"]