使用 Lambda 图层提高效率 Amazon SAM - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Lambda 图层提高效率 Amazon SAM

使用 Amazon SAM,您可以在无服务器应用程序中包含图层。 Amazon Lambda 层允许您将代码从 Lambda 函数提取到 Lambda 层中,然后可以在多个 Lambda 函数中使用该层。这样做可以让您缩小部署包的大小,将核心函数逻辑与依赖项分开,并在多个函数之间共享依赖项。有关层的更多信息,请参阅《Amazon Lambda 开发人员指南》中的 Lambda 层

本主题提供有关以下内容的信息:

  • 在应用程序中包含层

  • 如何在本地缓存层

有关构建自定义层的更多信息,请参阅 在中构建 Lambda 图层 Amazon SAM

在应用程序中包含层

要在应用程序中包含层,请使用 AWS::Serverless::Function 资源类型的 Layers 属性。

以下是带有包含层的 Lambda 函数的示例 Amazon SAM 模板:

ServerlessFunction: Type: AWS::Serverless::Function Properties: CodeUri: . Handler: my_handler Runtime: Python3.7 Layers: - <LayerVersion ARN>

如何在本地缓存层

当您使用其中一个 sam local 命令调用函数时,函数的层包会被下载并缓存在本地主机上。

下表显示不同操作系统的默认缓存目录位置。

OS 位置
Windows 7 C:\Users\<user>\AppData\Roaming\AWS SAM
Windows 8 C:\Users\<user>\AppData\Roaming\AWS SAM
Windows 10 C:\Users\<user>\AppData\Roaming\AWS SAM
macOS ~/.aws-sam/layers-pkg
Unix ~/.aws-sam/layers-pkg

缓存软件包后, Amazon SAM CLI 将图层叠加到用于调用函数的 Docker 镜像上。的 Amazon SAM CLI 生成其构建的图像以及缓存中保存 LayerVersions 的图像的名称。您可以在以下部分找到有关架构的更多详细信息。

要检查叠加层,请执行以下命令在要检查的映像中启动 bash 会话:

docker run -it --entrypoint=/bin/bash samcli/lambda:<Tag following the schema outlined in Docker Image Tag Schema> -i

层缓存目录名称架构

给 LayerVersionArn 定模板中定义的, Amazon SAM CLI 从 AR LayerName N 中提取和版本。它会创建一个目录,用于存放名为 LayerName-Version-<first 10 characters of sha256 of ARN> 的层内容。

示例:

ARN = arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1 Directory name = myLayer-1-926eeb5ff1

Docker 映像标签架构

要计算唯一图层哈希,请将所有唯一的图层名称与分隔符 “-” 合并,取 SHA256 哈希,然后取前 10 个字符。

示例:

ServerlessFunction: Type: AWS::Serverless::Function Properties: CodeUri: . Handler: my_handler Runtime: Python3.7 Layers: - arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1 - arn:aws:lambda:us-west-2:111111111111:layer:mySecondLayer:1

唯一名称的计算方法与层缓存目录名称架构相同:

arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1 = myLayer-1-926eeb5ff1 arn:aws:lambda:us-west-2:111111111111:layer:mySecondLayer:1 = mySecondLayer-1-6bc1022bdf

要计算唯一层哈希,请将所有唯一的层名称合并,分隔符为 '-',取 sha256 哈希,然后取前 25 个字符:

myLayer-1-926eeb5ff1-mySecondLayer-1-6bc1022bdf = 2dd7ac5ffb30d515926aef

然后将此值与函数的运行时和架构合并,分隔符为 '-':

python3.7-x86_64-2dd7ac5ffb30d515926aefffd