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

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

sam build

构建无服务器应用程序并为工作流中的后续步骤做好准备,例如本地测试应用程序或将其部署到Amazon云。如果您提供RESOURCE_LOGICAL_ID,然后Amazon SAM仅构建该资源。要构建嵌套应用程序或堆栈的资源,可以提供应用程序或堆栈逻辑 ID 以及资源逻辑 ID,使用StackLogicalId/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标识符 — 运行资源的构建目标命令。在这种情况下,您的生成文件必须命名为Makefile并包含一个名为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 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 公共拉取容器镜像。使用此选项可从其他位置提取图像。

您可以多次指定该选项。此选项的每个实例都可以采用字符串或键值对。如果指定字符串,则它是用于应用程序中所有资源的容器映像的 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 指定命令是否应跳过下拉 Lambda 运行时最新的 Docker 映像。
--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 SAMCLI 配置文件
--config-env TEXT 指定要使用的配置文件中默认参数值的环境名称。默认值为 “默认”。有关配置文件的详细信息,请参阅 Amazon SAMCLI 配置文件
--debug 打开调试日志记录以打印调试消息Amazon SAMCLI 生成和显示时间戳。
--help 显示此消息并退出。

Examples

使用 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

使用makefileidentifier

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

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 Metadata: BuildMethod: 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

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