构建层 - 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条目。的有效值BuildMethodAmazon Lambdaruntime,或者makefile

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

注意

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

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

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

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

Metadata: BuildMethod: python3.6
注意

如果您不包括Metadata资源属性部分Amazon SAM不会构建图层。相反,它会从CodeUri属性。有关更多信息,请参阅 。内容属性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命令。

Examples

模板示例 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:使用自定义生成文件构建图层

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

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

以下makefile包含构建目标和将要执行的命令。请注意,ContentUri属性将设定为my_layer,因此生成文件必须位于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