本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
构建层
您可以使用Amazon SAM以构建自定义层。有关层的信息,请参阅AmazonLambda 层中的Amazon Lambda开发人员指南.
要构建自定义图层,请在Amazon Serverless Application Model(Amazon SAM) 模板文件并包含Metadata资源属性部分带BuildMethod条目。的有效值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层资源的属性。有关更多信息,请参阅 。内容 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 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