本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
建筑层
您可以使用Amazon SAM来构建自定义图层。有关层的信息,请参阅《Amazon Lambda开发者指南》中的 AmazonLambda 层。
要构建自定义层,请在Amazon Serverless Application Model (Amazon SAM) 模板文件中声明该图层,并添加一个带有BuildMethod条目的Metadata资源属性部分。的有效值BuildMethod是Amazon Lambda运行时的标识符,或makefile。包括一个BuildArchitecture条目来指定您的层支持的指令集架构。的有效值BuildArchitecture是 Lambda 指令集架构。
如果您指定makefile,请提供自定义 makefile,在其中声明build-包含图层构建命令的表单的构建目标。如有必要,您的 makefile 负责编译图层,并将构建工件复制到工作流程后续步骤所需的正确位置。makefile 的位置由图层资源的layer-logical-idContentUri属性指定,必须命名Makefile。
注意
创建自定义层时,Amazon Lambda依靠环境变量来查找层代码。Lambda 运行时包含将层代码复制到的/opt目录中的路径。您的项目的生成工件文件夹结构必须与运行时的预期文件夹结构相匹配,这样才能找到您的自定义层代码。
例如,对于 Python,您可以将代码放在python/子目录中。对于 NodeJS,您可以将代码放在nodejs/node_modules/子目录中。
有关更多信息,请参阅《Amazon Lambda开发者指南》中的在层中包含库依赖关系。
以下是Metadata资源属性部分的示例。
Metadata: BuildMethod: python3.8 BuildArchitecture: arm64
注意
如果您不包括Metadata资源属性部分,则Amazon SAM不会构建图层。相反,它会从图层资源CodeUri属性中指定的位置复制构建工件。有关更多信息,请参阅AWS::Serverless::LayerVersion资源类型的ContentUri属性。
在包含Metadata资源属性部分时,可以使用山姆·布莱德命令来构建图层,既可以作为独立对象,也可以作为Amazon Lambda函数的依赖关系。
-
作为一个独立的对象。 您可能只想构建图层对象,例如,当您在本地测试图层的代码更改时,不需要构建整个应用程序。要独立构建图层,请使用
sam build命令指定图层资源。layer-logical-id -
作为 Lambda 函数的依赖关系。 当您在同一个Amazon SAM模板文件的 Lambda 函数的
Layers属性中包含图层的逻辑 ID 时,该层就是该 Lambda 函数的依赖关系。当该层还包括带有BuildMethod条目的Metadata资源属性部分时,您可以通过使用命令构建整个应用程序或使用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.9 Metadata: BuildMethod: python3.9 # 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 buildlayer-logical-id# Build the 'function-logical-id' resource and layers that this function depends on sam buildfunction-logical-id# Build the entire application, including the layers that any function depends on sam build