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

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

AWS::Serverless::Function

创建触发该Amazon Lambda函数的函数、Amazon Identity and Access Management (IAM) 执行角色和事件源映射。

该AWS::Serverless::Function资源还支持Metadata资源属性,因此您可以指示Amazon SAM构建应用程序所需的自定义运行时。有关构建自定义运行时环境的更多信息,请参阅构建自定义运行时

注意

当您部署到时Amazon CloudFormation,Amazon SAM会将您的Amazon SAM资源转换为Amazon CloudFormation资源。有关更多信息,请参阅Amazon CloudFormation

语法

要在Amazon Serverless Application Model (Amazon SAM) 模板中声明此实体,请使用以下语法。

属性

Architectures

该函数的指令集架构。

有关此属性的更多信息,请参阅Amazon Lambda开发者指南中的 Lambda 指令集架构

有效值x86_64或中的一个arm64

类型:清单

必需:否

默认值x86_64

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的Architectures属性。

AssumeRolePolicyDocument

为 AssumeRolePolicyDocument 为此函数创建Role的默认值添加一个。如果未指定此属性,则为该函数Amazon SAM添加默认的代入角色。

类型:JSON

必需:否

Amazon CloudFormation兼容性:此属性类似于AWS::IAM::Role资源的AssumeRolePolicyDocument属性。 Amazon SAM将此属性添加到为此函数生成的 IAM 角色中。如果为该函数提供了一个角色的 Amazon Resource Name (ARN),该属性将不执行任何操作。

AutoPublishAlias

Lambda 的名称。有关 Lambda 别名的更多信息,请参阅Amazon Lambda开发人员指南中的 Lambda 函数别名。有关使用此属性的示例,请参见逐步部署无服务器应用程序

Amazon SAM设置此属性时生成AWS::Lambda::VersionAWS::Lambda::Alias资源。有关此方案的信息,请参阅指定了 AutoPublishAlias 属性。有关生成的Amazon CloudFormation资源的一般信息,请参阅Amazon CloudFormation

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性是唯一的Amazon SAM,没有Amazon CloudFormation等效属性。

AutoPublishAliasAllProperties

指定何时创建新AWS::Lambda::Version的。当true修改 Lambda 函数中的任何属性时,就会创建一个新的 Lambda 版本。时false,只有在修改了以下任何属性时才会创建新的 Lambda 版本:

  • Environment, MemorySize, 或者 SnapStart

  • 导致Code属性更新的任何更改,例如CodeDictImageUri、或InlineCode

需要定义AutoPublishAlias此属性。

如果AutoPublishSha256还指定了,则其行为优先于AutoPublishAliasAllProperties: true

类型:布尔值

必需:否

默认值false

Amazon CloudFormation兼容性:此属性是唯一的Amazon SAM,没有Amazon CloudFormation等效属性。

AutoPublishCodeSha256

用于确定是否应发布新的 Lambda 版本的字符串值以及中的CodeUri值。只有在还定义了此属性时AutoPublishAlias才会使用。

此属性解决了Amazon SAM模板具有以下特征时出现的问题:DeploymentPreference对象配置为渐进部署(如中所述逐步部署无服务器应用程序),该AutoPublishAlias属性已设置且不会在部署之间更改,该CodeUri属性已设置且在部署之间不发生变化。

当存储在 Amazon Simple Storage Service (Amazon S3) 位置的部署包被包含更新的 Lambda 函数代码的新部署包取代,但该CodeUri属性保持不变(而不是将新的部署包上传到新的 Amazon S3 位置并更改为新位置)时,就会出现这种情况。CodeUri

在这种情况下,要成功触发渐进部署,必须为提供唯一值AutoPublishCodeSha256

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性是唯一的Amazon SAM,没有Amazon CloudFormation等效属性。

CodeSigningConfigArn

AWS::Lambda::CodeSigningConfig资源的 ARN,用于为此函数启用代码签名。有关代码签名的更多信息,请参阅为Amazon SAM应用程序配置代码签名

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的CodeSigningConfigArn属性。

CodeUri

函数代码的 Amazon S3 URI、本地文件夹或FunctionCode对象的路径。此属性仅在该PackageType属性设置为时适用Zip,否则会被忽略。

备注:

1. 如果该PackageType属性设置为Zip(默认),InlineCode则需要CodeUri或中的一个。

2. 如果提供了 Amazon S3 URI 或FunctionCode对象,则引用的Amazon S3 对象必须是有效的 Lambda 部署包

3. 如果提供了本地文件夹的路径,则要正确转换代码,模板必须经过包括sam deploy山姆·布莱德在内的工作流程sam package。默认情况下,相对路径是相对于Amazon SAM模板的位置进行解析的。

类型:字符串 | FunctionCode

必需:条件

Amazon CloudFormation兼容性:此属性类似于AWS::Lambda::Function资源的Code属性。嵌套的 Amazon S3 属性的命名方式不同。

DeadLetterQueue

配置Amazon Simple Notification Service (Amazon SNS) 主题或 Amazon Simple Queue Service (Amazon SQS) 队列,Lambda 将 有关死信队列功能的更多信息,请参阅Amazon Lambda开发者指南中的Amazon Lambda函数死信队列

注意

如果您的 Lambda 函数的事件源是 Amazon SQS 队列,请为源队列而不是 Lambda 函数配置死信队列。您为该函数配置的死信队列用于该函数的异步调用队列,而不是用于事件源队列。

类型:地图 | DeadLetterQueue

必需:否

Amazon CloudFormation兼容性:此属性类似于AWS::Lambda::Function资源的DeadLetterConfig属性。Amazon CloudFormation在 type 中派生自TargetArn,而在中,Amazon SAM你必须将类型和一起传递TargetArn

DeploymentPreference

用于实现渐进式 Lambda 部署的设置。

如果指定了DeploymentPreference对象,则Amazon SAM创建一个AWS::CodeDeploy::Application被调用对象ServerlessDeploymentApplication(每个堆栈一个)、一个AWS::CodeDeploy::DeploymentGroup被调用<function-logical-id>DeploymentGroup者和一个AWS::IAM::Role被调用对象CodeDeployServiceRole

类型DeploymentPreference

必需:否

Amazon CloudFormation兼容性:此属性是唯一的Amazon SAM,没有Amazon CloudFormation等效属性。

另请参阅:有关此属性的更多信息,请参阅逐步部署无服务器应用程序

Description

该函数的描述。

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的Description属性。

Environment

运行时环境的配置。

类型环境

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的Environment属性。

EphemeralStorage

一个对象,用于指定 Lambda 函数在中可用的磁盘空间(以 MB 为单位)/tmp

有关此属性的更多信息,请参阅Amazon Lambda开发者指南中的 Lambda 执行环境

类型EphemeralStorage

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的EphemeralStorage属性。

EventInvokeConfig

描述 Lambda 函数的事件调用配置的对象。

类型EventInvokeConfiguration

必需:否

Amazon CloudFormation兼容性:此属性是唯一的Amazon SAM,没有Amazon CloudFormation等效属性。

Events

指定触发此函数的事件。事件由一种类型和一组依赖于该类型的属性组成。

类型EventSource

必需:否

Amazon CloudFormation兼容性:此属性是唯一的Amazon SAM,没有Amazon CloudFormation等效属性。

FileSystemConfigs

指定Amazon EEEFS File System (Amazon EFS) 文件系统连接设置的FileSystemConfig对象列表。

如果模板包含AWS::EFS::MountTarget资源,您还必须指定DependsOn资源属性,以确保在函数之前创建或更新装载目标。

类型:清单

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的FileSystemConfigs属性。

FunctionName

函数的名称。如果没有指定名称,将为您生成一个唯一的名称。

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的FunctionName属性。

FunctionUrlConfig

描述函数 URL 的对象。函数 URL 是一个 HTTPS 端点,可用于调用函数。

有关更多信息,请参阅《Amazon Lambda开发者指南》中的函数 URL

类型FunctionUrlConfig

必需:否

Amazon CloudFormation兼容性:此属性是唯一的Amazon SAM,没有Amazon CloudFormation等效属性。

Handler

代码中为开始执行而调用的函数。只有当该属性设置为时,才需要此PackageType属性Zip

类型:字符串

必需:条件

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的Handler属性。

ImageConfig

用于配置 Lambda 容器映像设置的对象。有关更多信息,请参阅Amazon Lambda开发者指南中的 Lambda 中使用容器镜像

类型ImageConfig

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的ImageConfig属性。

ImageUri

Lambda 函数的容器镜像的 Amazon Elastic Container Registry (Amazon ECR) 存储库的 URI。此属性仅在该PackageType属性设置为时适用Image,否则会被忽略。有关更多信息,请参阅Amazon Lambda开发者指南中的 Lambda 中使用容器镜像

注意

如果该PackageType属性设置为Image,则其中一个ImageUri为必填项,或者您必须在Amazon SAM模板文件中使用必要的Metadata条目来构建应用程序。有关更多信息,请参阅构建应用程序

使用必需Metadata条目构建应用程序的优先级高于ImageUri,因此,如果您同时指定这两个条目,ImageUri则会被忽略。

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::FunctionCode数据类型的ImageUri属性。

InlineCode

直接在模板中编写的 Lambda 函数代码。此属性仅在该PackageType属性设置为时适用Zip,否则会被忽略。

注意

如果该PackageType属性设置为Zip(默认),InlineCode则需要CodeUri或中的一个。

类型:字符串

必需:条件

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::FunctionCode数据类型的ZipFile属性。

KmsKeyArn

Lambda 用于加密和解密函数的环境变量的Amazon Key Management Service (Amazon KMS) 密钥的 ARN。

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的KmsKeyArn属性。

Layers

此函数应使用的LayerVersion ARN 列表。此处指定的顺序是运行 Lambda 函数时导入它们的顺序。

类型:清单

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的Layers属性。

MemorySize

每次调用函数分配的内存大小(以 MB 为单位)。

类型:整数

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的MemorySize属性。

PackageType

Lambda 函数的部署包类型。有关更多信息,请参阅Amazon Lambda开发人员指南中的 Lambda 部署包

备注:

1. 如果此属性设置为Zip(默认),则InlineCode应用CodeUri或并ImageUri被忽略。

2. 如果将此属性设置为Image,则仅ImageUri适用,并且CodeUriInlineCode都被忽略。CLAmazon SAM I 可以auto 创建存储函数容器映像所需的 Amazon ECR 存储库。有关更多信息,请参阅sam deploy

有效值ZipImage

类型:字符串

必需:否

默认值Zip

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的PackageType属性。

PermissionsBoundary

用于该函数的执行角色的权限边界的 ARN。只有在为你生成角色时,此属性才有效。

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::IAM::Role资源的PermissionsBoundary属性。

Policies

此功能需要的一项或多项策略。它们将附加到此函数的默认角色中。

此属性接受单个字符串或字符串列表,可以是Amazon托管Amazon SAM策略或策略模板的名称,也可以是以 YAML 格式化的内联 IAM 策略文档。

有关Amazon托管策略的更多信息,请参阅 IAM 用户指南中的Amazon托管策略。有关Amazon SAM策略模板的更多信息Amazon SAM策略模板,请参阅Amazon Serverless Application Model开发者指南。有关内联策略的更多信息,请参阅 IAM 用户指南中的内联策略

注意

如果设置该Role属性,将忽略该属性。

类型:字符串 | 列表 | 地图

必需:否

Amazon CloudFormation兼容性:此属性类似于AWS::IAM::Role资源的Policies属性。 Amazon SAM除了 JSONAmazon SAM 策略文档外,还支持Amazon托管策略名称和策略模板。 Amazon CloudFormation仅接受 JSON 策略文档。

ProvisionedConcurrencyConfig

为函数的别名预置的并发配置。

注意

ProvisionedConcurrencyConfig只有在设置了时AutoPublishAlias才能指定。否则将出错。

类型ProvisionedConcurrencyConfig

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Alias资源的ProvisionedConcurrencyConfig属性。

ReservedConcurrentExecutions

您要为该函数预留的最大数量。

有关此属性的更多信息,请参阅Amazon Lambda开发人员指南中的 Lambda 函数扩展

类型:整数

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的ReservedConcurrentExecutions属性。

Role

用作该函数的执行角色的 IAM 角色的 ARN。

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性类似于AWS::Lambda::Function资源的Role属性。这是必填项,Amazon CloudFormation但不是必填项Amazon SAM。如果未指定角色,则会为您创建一个逻辑 ID 为的角色<function-logical-id>Role

RolePath

该函数的 IAM 执行角色的路径。

在为您生成角色时使用此属性。在使用Role属性指定角色时不要使用。

类型:字符串

必需:条件

Amazon CloudFormation兼容性:此属性直接传递给AWS::IAM::Role资源的Path属性。

Runtime

函数的运行时的标识符。只有当该属性设置为时,才需要此PackageType属性Zip

注意

如果您为此属性指定了provided标识符,则可以使用Metadata资源属性Amazon SAM来指示构建此函数所需的自定义运行时。有关构建自定义运行时环境的更多信息,请参阅构建自定义运行时

类型:字符串

必需:条件

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的Runtime属性。

RuntimeManagementConfig

为您的 Lambda 函数配置运行时管理选项,例如运行时环境更新、回滚行为和选择特定的运行时版本。要了解更多信息,请参阅Amazon Lambda开发者指南中的 Lambda 运行时更新

注意

如果已配置,AutoPublishAliasRuntimeManagementConfig$LATEST同时适用于新创建的函数版本。

类型RuntimeManagementConfig

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的 RuntimeManagementConfig属性。

SnapStart

创建任何新 Lambda 函数版本的快照。快照是初始化函数的缓存状态,包括其所有依赖关系。该函数仅初始化一次,缓存状态将在future 的所有调用中重复使用,从而通过减少必须初始化函数的次数来提高应用程序性能。要了解更多信息,请参阅Amazon Lambda开发者指南 SnapStart中的 “使用 Lambda 提高启动性能”。

类型SnapStart

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的SnapStart属性。

Tags

一个映射(字符串到字符串),指定添加到该函数的标签。有关标签的有效密钥和值的详细信息,请参阅Amazon Lambda开发者指南中的标签密钥和值要求

创建堆栈时,Amazon SAM会自动向此 Lambda 函数以及为此函数生成的默认角色添加lambda:createdBy:SAM标签。

类型:地图

必需:否

Amazon CloudFormation兼容性:此属性类似于AWS::Lambda::Function资源的Tags属性。中的Tags属性由键值对Amazon SAM组成(而Amazon CloudFormation此属性由Tag对象列表组成)。此外,还Amazon SAM会自动向此 Lambda 函数以及为此函数生成的默认角色添加lambda:createdBy:SAM标签。

Timeout

该函数在停止之前可以运行的最长时间(秒)。

类型:整数

必需:否

原定设置值:3

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的Timeout属性。

Tracing

指定函数的 X-Ray 跟踪模式的字符串。有关 X-Ray ay Amazon Lambda的更多信息,请参阅Amazon Lambda开发人员指南Amazon X-Ray中的使用

有效值ActivePassThrough

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性类似于AWS::Lambda::Function资源的TracingConfig属性。如果该Tracing属性设置为Active且未指定该Role属性,则Amazon SAM将该arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess策略添加到它为您创建的 Lambda 执行角色中。

VersionDescription

指定在新 Lambda 版本资源上添加的Description字段。

类型:字符串

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Version资源的Description属性。

VpcConfig

使该函数能够访问虚拟Private Cloud (VPC) 中的私有资源的配置。

类型VpcConfig

必需:否

Amazon CloudFormation兼容性:此属性直接传递给AWS::Lambda::Function资源的VpcConfig属性。

返回值

Ref

当该资源的逻辑 ID 提供给Ref内部函数时,它将返回底层 Lambda 函数的资源名称。

有关使用该Ref函数的更多信息,请参阅RefAmazon CloudFormation用户指南》

Fn::GetAtt

Fn::GetAtt 返回一个此类型指定属性的值。以下为可用属性和示例返回值。

有关使用的更多信息Fn::GetAtt,请参阅Fn::GetAttAmazon CloudFormation用户指南》

Arn

底层 Lambda 函数的 ARN。

示例

简单的函数

以下是 Amazon S3 存储桶中包类型Zip(默认)和函数代码的AWS::Serverless::Function资源的基本示例。

YAML

Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.9 CodeUri: s3://bucket-name/key-name

函数属性示例

以下是使用InlineCode、、、、LayersApi事件源的包类型Zip(默认)的示例。AWS::Serverless::FunctionTracingPoliciesAmazon EFS

YAML

Type: AWS::Serverless::Function DependsOn: MyMountTarget # This is needed if an AWS::EFS::MountTarget resource is declared for EFS Properties: Handler: index.handler Runtime: python3.9 InlineCode: | def handler(event, context): print("Hello, world!") ReservedConcurrentExecutions: 30 Layers: - Ref: MyLayer Tracing: Active Timeout: 120 FileSystemConfigs: - Arn: !Ref MyEfsFileSystem LocalMountPath: /mnt/EFS Policies: - AWSLambdaExecute - Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:GetObject - s3:GetObjectACL Resource: 'arn:aws:s3:::my-bucket/*' Events: ApiEvent: Type: Api Properties: Path: /path Method: get

ImageConfig示例

以下是包类型的 Lambda 函数的示例ImageImageConfig

YAML

HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageUri: account-id.dkr.ecr.region.amazonaws.com/ecr-repo-name:image-name ImageConfig: Command: - "app.lambda_handler" EntryPoint: - "entrypoint1" WorkingDirectory: "workDir"

RuntimeManagementConfig 例子

配置为根据当前行为更新其运行时环境的 Lambda 函数:

TestFunction Type: AWS::Serverless::Function Properties: ... Runtime: python3.9 RuntimeManagementConfig: UpdateRuntimeOn: Auto

配置为在函数更新时更新其运行时环境的 Lambda 函数:

TestFunction Type: AWS::Serverless::Function Properties: ... Runtime: python3.9 RuntimeManagementConfig: UpdateRuntimeOn: FunctionUpdate

配置为手动更新其运行时环境的 Lambda 函数:

TestFunction Type: AWS::Serverless::Function Properties: ... Runtime: python3.9 RuntimeManagementConfig: RuntimeVersionArn: arn:aws:lambda:us-east-1::runtime:4c459dd0104ee29ec65dcad056c0b3ddbe20d6db76b265ade7eda9a066859b1e UpdateRuntimeOn: Manual

SnapStart 例子

为future 版本 SnapStart 开启的 Lambda 函数示例:

TestFunc Type: AWS::Serverless::Function Properties: ... SnapStart: ApplyOn: PublishedVersions