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资源还支持 r Metadata esource 属性,因此您可以指示 Amazon SAM 构建应用程序所需的自定义运行时。有关构建自定义运行时系统的更多信息,请参阅 在中使用自定义运行时构建 Lambda 函数 Amazon SAM

注意

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

语法

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

属性

Architectures

该函数的指令集架构。

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

有效值x86_64arm64 之一。

类型:列表

必需:否

默认值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 逐步部署无服务器应用程序

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

类型:字符串

必需:否

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

AutoPublishAliasAllProperties

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

  • EnvironmentMemorySize 或者 SnapStart

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

此属性需要定义 AutoPublishAlias

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

类型:布尔值

必需:否

默认值false

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

AutoPublishCodeSha256

使用时,此字符串将与 CodeUri 值一起确定是否需要发布新的 Lambda 版本。此属性通常用于解决以下部署问题:部署包存储在 Amazon S3 位置,且被包含更新后的 Lambda 函数代码的新部署包取代,但 CodeUri 属性保持不变(相反情况是新的部署包上传到新的 Amazon S3 位置并且 CodeUri 更改为新位置)。

此问题由具有以下特征的 Amazon SAM 模板标记:

在这种情况下,更新 AutoPublishCodeSha256 会导致成功创建新的 Lambda 版本。但是,部署到 Amazon S3 的新函数代码将无法识别。要识别新的函数代码,请考虑在 Amazon S3 存储桶中使用版本控制。为 Lambda 函数指定 Version 属性,并将存储桶配置为始终使用最新的部署包。

在这种情况下,要成功触发逐步部署,必须为 AutoPublishCodeSha256 提供一个唯一的值。

类型:字符串

必需:否

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

CodeSigningConfigArn

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

类型:字符串

必需:否

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

CodeUri

函数的代码。可接受的值包括:

  • 该函数的 Amazon S3 URI。例如,s3://bucket-123456789/sam-app/1234567890abcdefg

  • 函数的本地路径。例如,hello_world/

  • 一个 FunctionCode 对象。

注意

如果您提供函数的 Amazon S3 URI 或FunctionCode对象,则必须引用有效的 Lambda 部署包

如果您提供了本地文件路径,请使用 Amazon SAM CLI 在部署时上传本地文件。要了解更多信息,请参阅 如何在 Amazon SAM 部署时上传本地文件

如果你在CodeUri属性中使用内部函数, Amazon SAM 将无法正确解析这些值。考虑改用AWS:: LanguageExtensions 变换

类型:[ 字符串 | FunctionCode ]

必填:条件性。当 PackageType 设置为 Zip 时,则 CodeUriInlineCode 中的一种为必需。

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

DeadLetterQueue

配置 Lambda 发送无法处理的事件的亚马逊简单通知服务 (Amazon SNSSQS) 主题或亚马逊简单队列服务 (Amazon) 队列。有关死信队列功能的更多信息,请参阅《Amazon Lambda 开发人员指南》中的死信队列

注意

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

类型:地图 | DeadLetterQueue

必需:否

Amazon CloudFormation 兼容性:此属性类似于AWS::Lambda::Function资源的DeadLetterConfig属性。在 Amazon CloudFormation 中,类型是派生自的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 等效属性。

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

Description

该函数的描述。

类型:字符串

必需:否

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

Environment

运行时系统环境的配置。

类型环境

必需:否

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

EphemeralStorage

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

有关此属性的更多信息,请参阅《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

指定亚马逊弹性文件系统 (AmazonEFS) 文件系统的连接设置的FileSystemConfig对象列表。

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

类型:列表

必需:否

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

FunctionName

函数的名称。如果您没有指定名称,则系统为您生成唯一的名称。

类型:字符串

必需:否

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

FunctionUrlConfig

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

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

类型:FunctionUrlConfig

必需:否

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

Handler

代码中被调用以开始执行的函数。仅当属性 PackageTypeZip 时,该属性是必需属性。

类型:字符串

必需:条件

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

ImageConfig

用于配置 Lambda 容器映像设置的对象。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的将容器映像与 Lambda 结合使用

类型:ImageConfig

必需:否

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

ImageUri

Lambda 函数容器镜像的亚马逊弹性容器注册表 (AmazonECR) 存储库。URI仅当 PackageType 属性设置为 Image 时,此属性才适用,否则将被忽略。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的将容器映像与 Lambda 结合使用

注意

如果将该PackageType属性设置为ImageImageUri则要么为必填项,要么必须使用 Amazon SAM 模板文件中的必要Metadata条目来构建应用程序。有关更多信息,请参阅 使用 Amazon SAM 进行默认构建

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

类型:字符串

必需:否

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

InlineCode

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

注意

如果 PackageType 属性设置为 Zip(默认),则 CodeUriInlineCode 中的一个为必需。

类型:字符串

必需:条件

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

KmsKeyArn

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

类型:字符串

必需:否

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

Layers

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

类型:列表

必需:否

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

LoggingConfig

该函数的 Amazon CloudWatch 日志配置设置。

类型:LoggingConfig

必需:否

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

MemorySize

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

类型:整数

必需:否

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

PackageType

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

备注:

1. 如果此属性设置为 Zip(默认),则将应用 CodeUriInlineCode,并忽略 ImageUri

2. 如果此属性设置为 Image,则仅应用 ImageUri,并忽略 CodeUriInlineCode。ECR存储函数容器镜像所需的 Amazon 存储库可以由自动创建 Amazon SAM CLI。 有关更多信息,请参阅sam deploy

有效值ZipImage

类型:字符串

必需:否

默认值Zip

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

PermissionsBoundary

用于此函数ARN的执行角色的权限边界。仅当为您生成角色时,此属性才起作用。

类型:字符串

必需:否

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

Policies

此函数的权限策略。策略将附加到函数的默认 Amazon Identity and Access Management (IAM) 执行角色中。

此属性接受单个值或值列表。允许的值包括:

注意

如果指定 Role 属性,则将忽略该属性。

类型:字符串 | 列表 | 映射

必需:否

Amazon CloudFormation 兼容性:此属性类似于AWS::IAM::Role资源的Policies属性。

PropagateTags

指明是否将 Tags 属性中的标签传递给 AWS::Serverless::Function 生成的资源。指定 True 以在生成的资源中传播标签。

类型:布尔值

必需:否

默认值False

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

ProvisionedConcurrencyConfig

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

注意

仅当设置 AutoPublishAlias 时才可以指定 ProvisionedConcurrencyConfig。否则将导致错误。

类型:ProvisionedConcurrencyConfig

必需:否

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

ProvisionedConcurrencyConfig

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

注意

仅当设置 AutoPublishAlias 时才可以指定 ProvisionedConcurrencyConfig。否则将导致错误。

类型:ProvisionedConcurrencyConfig

必需:否

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

RecursiveLoop

函数的递归循环检测配置的状态。

当此值设置为 Allow 且 Lambda 检测到您的函数作为递归循环的一部分调用时,它不会采取任何操作。

当此值设置为 Terminate 且 Lambda 检测到您的函数作为递归循环的一部分调用时,它会停止调用函数并通知您。

类型:字符串

必需:否

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

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

函数的运行时的标识符。仅当属性 PackageTypeZip 时,该属性是必需属性。

注意

如果为此属性指定标provided识符,则可以使用 res Metadata ource 属性 Amazon SAM 来指示构建此函数所需的自定义运行时。有关构建自定义运行时系统的更多信息,请参阅 在中使用自定义运行时构建 Lambda 函数 Amazon SAM

类型:字符串

必需:条件

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

RuntimeManagementConfig

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

类型:RuntimeManagementConfig

必需:否

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

SnapStart

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

类型:SnapStart

必需:否

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

SourceKmsKeyArn

ARN表示用于加密客户ZIP功能代码的密KMS钥。

类型:字符串

必需:否

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

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 跟踪模式的字符串。

  • Active – 为该函数激活 X-Ray 跟踪

  • Disabled – 为该函数停用 X-Ray 跟踪

  • PassThrough – 为该函数激活 X-Ray 跟踪 采样决策委托给下游服务。

如果指定为 ActivePassThrough 且未设置 Role 属性,则 Amazon SAM 会将 arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess 策略添加到它为您创建的 Lambda 执行角色中。

有关 X-Ray 的更多信息,请参阅《Amazon Lambda 开发者指南》 Amazon X-Ray中的 “Amazon Lambda 与一起使用”。

有效值:[Active|Disabled|PassThrough]

类型:字符串

必需:否

Amazon CloudFormation 兼容性:此属性类似于AWS::Lambda::Function资源的TracingConfig属性。

VersionDescription

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

类型:字符串

必需:否

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

VpcConfig

使此功能能够访问您的虚拟私有云 (VPC) 中的私有资源的配置。

类型:VpcConfig

必需:否

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

返回值

Ref

当向 Ref 内置函数提供此资源的逻辑 ID 时,将返回底层 Lambda 函数的资源名称。

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

Fn:: GetAtt

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

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

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

函数属性示例

以下是使用 InlineCodeLayersTracingPoliciesAmazon EFSApi 事件源的包类型为 Zip(默认)的 AWS::Serverless::Function 示例。

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:::amzn-s3-demo-bucket/*' Events: ApiEvent: Type: Api Properties: Path: /path Method: get

ImageConfig示例

以下是包类型为 Image 的 Lambda 函数的 ImageConfig 示例。

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例子

在未来版本中 SnapStart 启用的 Lambda 函数示例:

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