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

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

使用图层

使用Amazon SAM,您可以在无服务器应用程序中包含图层。有关层的详细信息,请参阅Amazon Lambda层中的Amazon Lambda开发人员指南

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

  • 在应用程序中包含图层

  • 如何在本地缓存图层

有关构建自定义图层的信息,请参阅构建层

在应用程序中包含图层

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

下面是一个示例Amazon SAM模板,其中包含一个图层的 Lambda 函数:

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 SAMCLI 将图层叠加到用于调用函数的 Docker 映像上。这些区域有:Amazon SAMCLI 会生成它生成的映像的名称,以及保存在缓存中的层版本。您可以在以下章节中找到有关该架构的更多详细信息。

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

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

图层缓存目录名称架构

给定一个在模板中定义的层级版本 ARN,Amazon SAMCLI 从 ARN 中提取图层名称和版本。它创建一个目录,将图层内容放置在名为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-2dd7ac5ffb30d515926aefffd