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

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

构建层

您可以使用Amazon SAM以构建自定义层。有关层的信息,请参阅AmazonLambda 层中的Amazon Lambda开发人员指南.

要构建自定义图层,请在Amazon Serverless Application Model(Amazon SAM) 模板文件并包含Metadata资源属性部分带BuildMethod条目。的有效值BuildMethod是的标识符Amazon Lambda运行时间,或者makefile. 包含BuildArchitecture条目以指定您的层支持的指令集体系结构。的有效值BuildArchitectureLambda 指令集架构.

如果你指定makefile中,提供自定义 makefile,您可以在其中声明表单的构建目标build-layer-logical-id其中包含图层的构建命令。如有必要,makefile 负责编译图层,并将构建工件复制到工作流程后续步骤所需的适当位置。makefile 的位置由ContentUri图层资源的属性,且必须命名Makefile.

注意

在创建自定义层时,Amazon Lambda取决于环境变量来查找图层代码。Lambda 运行时包括/opt将图层代码复制到的目录。项目的构建工件文件夹结构必须与运行时的预期文件夹结构匹配,以便能够找到自定义层代码。

例如,对于 Python,您可以将代码放在python/子目录。对于 NodeJS,你可以将代码放在nodejs/node_modules/子目录。

有关更多信息,请参阅 。在层中包括库依赖项中的Amazon Lambda开发人员指南.

以下是示例:Metadata资源属性部分。

Metadata: BuildMethod: python3.8 BuildArchitecture: arm64
注意

如果您不包含Metadata资源属性部分,Amazon SAM不构建图层。相反,它会从中指定的位置复制构建工件CodeUri层资源的属性。有关更多信息,请参阅 。内容 URI的财产AWS::Serverless::LayerVersion资源类型。

当您包含Metadata资源属性部分,您可以使用sam build命令来构建图层,既可以作为独立对象,也可以作为依赖项构建图层Amazon Lambdafunction.

  • 作为一个独立的对象。您可能只想构建层对象,例如,当您在本地测试对图层的代码更改而不需要构建整个应用程序时。要独立构建图层,请使用sam build layer-logical-id命令。

  • 作为 Lambda 函数的依赖项。当您将图层的逻辑 ID 包含在Layers相同 Lambda 函数的属性Amazon SAM模板文件,该层是该 Lambda 函数的依赖关系。当该图层还包含Metadata资源属性部分带BuildMethod条目中,您可以通过使用sam build命令或者使用指定函数资源sam build function-logical-id命令。

示例

模板示例 1:针对 Python 3.6 运行时环境构建图层

以下示例Amazon SAM模板根据 Python 3.6 运行时环境构建图层。

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.6 Metadata: BuildMethod: python3.6 # Required to have Amazon SAM build this layer

模板示例 2:使用自定义 makefile 构建图层

以下示例Amazon SAM模板使用自定义makefile来构建图层。

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

以下makefile包含构建目标和将要执行的命令。请注意,ContentUri属性设置为my_layer,所以 makefile 必须位于my_layer子目录,文件名必须为Makefile. 另请注意,构建工件被复制到python/子目录以便Amazon Lambda将能够找到层代码。

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

例子 sam 构建命令

以下sam build命令构建包含Metadata资源属性部分。

# Build the 'layer-logical-id' resource independently sam build layer-logical-id # Build the 'function-logical-id' resource and layers that this function depends on sam build function-logical-id # Build the entire application, including the layers that any function depends on sam build