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 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 资源名称 (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等效属性。

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 deploysam bu在内的工作流程sam package。默认情况下,相对路径是相对于Amazon SAM模板的位置进行解析的。

类型:字符串 | FunctionCode

必需:条件

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

DeadLetterQueue

配置Amazon SiLambda ple Notification Service (Amazon SQS) 主题或 Amazon Simple Queue Service (Amazon SQS) 队列。有关死信队列功能的更多信息,请参阅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 EFile 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 函数的容器镜像。此属性仅在该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

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

类型:字符串

必需:否

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托管策略的更多信息,请参阅Amazon IAM 用户指南。有关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

用作该函数的执行角色的 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 的更多信息,请参阅Amazon Lambda开发人员指南Amazon X-Ray中的使用Amazon Lambda

有效值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

使该函数能够访问虚拟私有云 (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