本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用图层
使用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 生成它构建的映像的名称以及缓存中保存的 LayerVersion。您可以在以下章节中找到有关该架构的更多详细信息。
要检查叠加的图层,请执行以下命令以在要检查的图像中启动 bash 会话:
docker run -it --entrypoint=/bin/bash samcli/lambda:<Tag following the schema outlined in Docker Image Tag Schema> -i
层缓存目录名称架构
鉴于模板中定义的 layerVersionARN,Amazon SAMCLI 从 ARN 中提取 LayerName 和版本。它会创建一个目录以将图层内容放置在名为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