sam 构建 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

sam 构建

构建无服务器应用程序并为工作流程中的后续步骤做好准备,例如在本地测试应用程序或将其部署到Amazon云。如果你提供RESOURCE_LOGICAL_ID,那么Amazon SAM只构建该资源。要构建嵌套应用程序或堆栈的资源,可以使用格式提供应用程序或堆栈逻辑 ID 以及资源逻辑 IDStackLogicalId/ResourceLogicalId.

这些区域有:sam build命令处理你的Amazon SAM模板文件、应用程序代码以及任何特定于语言的适用文件和依赖关系。该命令还以工作流程后续步骤预期的格式和位置复制构建工件。您可以在应用程序中包含的清单文件中指定依赖关系,例如requirements.txt对于 Python 函数,或者package.json对于 Node.js 函数。

应用程序的构建工件的格式取决于其软件包类型。你指定你的Amazon Lambda函数的包类型与PackageType财产。选项包括:

  • Zip— 包含应用程序代码及其依赖项的 .zip 文件存档。如果要将代码打包为 .zip 文件存档,则必须为函数指定 Lambda 运行时。

  • Image— 容器映像,除应用程序代码及其依赖项外,还包括基本操作系统、运行时和扩展。

有关 Lambda 包类型的更多信息,请参阅Lambda 部署程序包中的Amazon Lambda开发人员指南.

如果资源包含Metadata资源属性带BuildMethod进入,sam build根据的值构建该资源BuildMethod进入。的有效值BuildMethod是 1) Lambda 运行时的标识符之一,或 2)makefile标识符。

  • Lambda 运行时标识符— 根据 Lambda 运行时构建资源。有关支持的运行时标识符的列表,请参阅Lambda 运行时中的Amazon Lambda开发人员指南.

  • makefile标识符 — 运行资源的构建目标的命令。在这种情况下,必须命名你的 makefileMakefile并包括一个名为的构建目标build-resource-logical-id.

要构建层和自定义运行时,您还可以使用Metadata资源属性带BuildMethod进入。有关构建图层的信息,请参阅构建层. 有关构建自定义运行时的信息,请参阅构建自定义运行时.

对于具有Image包装类型,请使用Metadata资源属性,用于配置构建容器映像所需的 Docker 映像设置。有关构建容器映像的更多信息,请参阅生成容器映像.

有关使用此命令的完整示例,包括在本地测试和部署到Amazon云,请参阅教程:部署 Hello World 应用程序. 这些区域有:sam build命令是的一部分第 2 步:构建你的应用.

使用方法:

sam build [OPTIONS] [RESOURCE_LOGICAL_ID]

示例:

To use these commands, update your SAM template to specify the path to your function's source code in the resource's Code or CodeUri property. To build on your workstation, run this command in the directory containing your SAM template. Built artifacts are written to the .aws-sam/build directory. $ sam build To build inside a Lambda-like Docker container $ sam build --use-container To build with environment variables passed to the build container from the command line $ sam build --use-container --container-env-var Function1.GITHUB_TOKEN=<token1> --container-env-var GLOBAL_ENV_VAR=<global-token> To build with environment variables passed to the build container from a file $ sam build --use-container --container-env-var-file <env-file.json> Build a Node.js 12 application using a container image pulled from DockerHub $ sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs12.x Build a function resource using the Python 3.8 container image pulled from DockerHub $ sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.8 To build and run your functions locally $ sam build && sam local invoke To build and package for deployment $ sam build && sam package --s3-bucket <bucketname> To build the 'MyFunction' resource $ sam build MyFunction To build the 'MyFunction' resource of the 'MyNestedStack' nested stack $ sam build MyNestedStack/MyFunction

参数:

参数 描述
RESOURCE_LOGICAL_ID 可选。指示Amazon SAM构建在Amazon SAM。指定资源的构建工件将是工作流中后续命令的唯一可用的构建工件,即sam packagesam deploy.

选项:

选项 描述
-b, --build-dir DIRECTORY 存储构建工件的目录的路径。此选项将删除此目录及其所有内容。
-s, --base-dir DIRECTORY 解析与此目录相关的函数或图层源代码的相对路径。如果要更改与源代码文件夹的相对路径的解析方式,请使用此选项。默认情况下,相对路径是相对于Amazon SAM模板的位置。

除了要构建的根应用程序或堆栈中的资源外,此选项还应用嵌套的应用程序或堆栈。

此选项适用于以下资源类型和属性:

  • 资源类型:AWS::Serverless::Function财产:CodeUri

  • 资源类型:AWS::Serverless::Function资源属性:Metadata进入:DockerContext

  • 资源类型:AWS::Serverless::LayerVersion财产:ContentUri

  • 资源类型:AWS::Lambda::Function财产:Code

  • 资源类型:AWS::Lambda::LayerVersion财产:Content

-u, --use-container 如果你的函数依赖于具有本地编译依赖关系的软件包,请使用此选项在类 Lambda Docker 容器中构建函数。
-e, --container-env-var TEXT 要传递到构建容器的环境变量。您可以多次指定该选项。此选项的每个实例都有一个键值对,其中键是资源和环境变量,值是环境变量的值。例如:--container-env-var Function1.GITHUB_TOKEN=TOKEN1 --container-env-var Function2.GITHUB_TOKEN=TOKEN2

此选项仅适用于--use-container选项将被指定,否则将会导致出现错误。

-ef, --container-env-var-file PATH 包含容器环境变量值的 JSON 文件的路径和文件名。有关容器环境变量文件的更多信息,请参阅容器环境变量文件.

此选项仅适用于--use-container选项将被指定,否则将会导致出现错误。

--build-image TEXT

您要为构建而提取的容器映像的 URI。默认情况下,Amazon SAM从 Amazon ECR Public 中提取容器映像。使用此选项可以从另一个位置拉出图像。

您可以多次指定该选项。此选项的每个实例都可以采用字符串或键值对。如果指定字符串,则它是用于应用程序中所有资源的容器映像的 URI。例如:sam build --use-container --build-image amazon/aws-sam-cli-build-image-python3.8。如果指定键值对,则键为资源名称,值是要用于该资源的容器镜像的 URI。例如:sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.8。使用键值对,您可以为不同的资源指定不同的容器镜像。

此选项仅适用于--use-container选项将被指定,否则将会导致出现错误。

-m, --manifest PATH 要使用的自定义依赖关系清单文件(例如 package.json)的路径,而不是默认值。
-t, --template-file, --template PATH 的路径和文件名Amazon SAM模板文件[default: template.[yaml|yml]].
--parameter-overrides (可选)包含的字符串Amazon CloudFormation参数覆盖编码为键值对。使用的格式与Amazon Command Line Interface(Amazon CLI)。例如:'ParameterKey=KeyPairNameParameterValue=MyKey ParameterKey=InstanceTypeParameterValue=t1.micro'。
--skip-pull-image 指定命令是否应跳过下拉最新 Docker 镜像获取 Lambda 运行时的操作。
--docker-network TEXT 指定 Lambda Docker 容器应连接到的现有 Docker 网络的名称或 ID,以及默认桥接网络。如果未指定此项,Lambda 容器将仅连接到默认的桥接 Docker 网络。
--parallel 启用并行构建。使用此选项来构建Amazon SAM模板的功能和层并行。默认情况下,函数和图层是按顺序构建的。
--cached 启用缓存的构建。使用此选项可以重复使用与之前的构建版本没有更改的构建工件。Amazon SAM评估您是否更改了项目目目录中的任何文件。注意: Amazon SAM不会评估您是否更改了项目所依赖的第三方模块,而您尚未提供特定版本。例如,如果你的 Python 函数包含requirements.txt带条目的文件requests=1.x,最新的请求模块版本更改自1.11.2,那么Amazon SAM在运行非缓存的构建之前,才会提取最新版本。
--cache-dir 当时存储缓存工件的目录--cached已指定。默认缓存目录为.aws-sam/cache.
--profile TEXT 从您的凭证文件获取的特定配置文件Amazon凭证。
--region TEXT 这些区域有:Amazon要部署到的区域。例如,us-east-1。
--config-file PATH 包含待使用默认参数值的配置文件对应的路径和文件名。默认值为”samconfig.toml“在项目目录的根目录中。有关配置文件的详细信息,请参阅 Amazon SAM CLI 配置文件
--config-env TEXT 指定配置文件中要使用的默认参数值的环境名称。默认值为 “默认值”。有关配置文件的详细信息,请参阅 Amazon SAM CLI 配置文件
--debug 打开调试日志记录以打印调试消息Amazon SAMCLI 生成,并显示时间戳。
--help 显示此消息并退出。

示例

使用 Lambda 运行时标识符构建资源

下面是一个示例Amazon SAM模板显示了如何使用 Lambda 运行时标识符构建资源:

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.6 Metadata: BuildMethod: python3.6

使用此模板,以下命令将构建MyLayer针对 Python 3.6 运行时环境的资源:

sam build MyLayer

使用makefile标识符

下面是一个示例Amazon SAM展示如何使用makefile标识符:

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 Metadata: BuildMethod: makefile

这是关联 makefile 的示例。该文件必须命名为Makefile并将构建目标和您要运行的命令包括在内:

build-MyLayer: mkdir -p "$(ARTIFACTS_DIR)/python" cp *.py "$(ARTIFACTS_DIR)/python" python -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"

使用此模板和 makefile,以下命令将执行build-MyLayer目标:

sam build MyLayer

将环境变量传递到构建容器

下面是一个示例,展示如何使用文件将环境变量传递给构建容器。

首先,创建名为的文件env.json包含以下内容:

{ "MyFunction1": { "GITHUB_TOKEN": "TOKEN1" }, "MyFunction2": { "GITHUB_TOKEN": "TOKEN2" } }

然后运行以下命令:

sam build --use-container --container-env-var-file env.json

有关容器环境变量文件的更多信息,请参阅容器环境变量文件.