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

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

AWS::Serverless::Function

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

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

语法

在您的 中声明此实体 AWS 无服务器应用程序模型 (AWS SAM) 模板时,请使用以下语法。

属性

AssumeRolePolicyDocument

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

类型:JSON

必需: 否

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

AutoPublishAlias

别名的名称。Lambda有关 Lambda 别名的更多信息,请参阅 中的 Lambda 函数别名AWS Lambda Developer Guide有关使用此属性的示例,请参阅逐步部署无服务器应用程序

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

类型:字符串

必需: 否

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

AutoPublishCodeSha256

用于确定是否应发布新 CodeUri 版本的字符串值以及 Lambda 中的值。

此属性解决了 AWS SAM 模板具有以下特征时发生的问题:为逐步部署配置了 DeploymentPreference 对象(如逐步部署无服务器应用程序中所述),设置了 AutoPublishAlias 属性并且部署之间未更改,以及设置了 CodeUri 属性并且部署之间未更改。

当存储在 Amazon Simple Storage Service (Amazon S3) 位置中的部署程序包被包含更新后的 Lambda 函数代码的新部署程序包替换时,会出现此情况,但 CodeUri 属性保持不变(与上传到新 Amazon S3 位置和将 CodeUri 更改为新位置的新部署程序包相反)。

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

类型:字符串

必需: 否

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

CodeSigningConfigArn

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

类型:字符串

必需: 否

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

CodeUri

函数代码的 Amazon S3 URI、本地文件路径或 FunctionCode 对象。

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

如果提供了本地文件路径,要正确地转换代码,模板必须经过包含 sam deploysam package 命令的工作流程。

注意:需要 CodeUriInlineCode

类型: String | FunctionCode

必需: 条件

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

DeadLetterQueue

配置 Amazon Simple Notification Service (Amazon SNS) 主题或 Amazon Simple Queue Service (Amazon SQS) 队列,Lambda 在其中发送其无法处理的事件。有关死信队列功能的更多信息,请参阅 AWS Lambda 中的 函数死信队列。AWS Lambda Developer Guide

类型:Map | DeadLetterQueue

必需: 否

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

DeploymentPreference

用于启用逐步 Lambda 部署的设置。

如果指定了 DeploymentPreference 对象,AWS SAM 会创建一个名为 AWS::CodeDeploy::ApplicationServerlessDeploymentApplication(每个堆栈一个)、一个名为 AWS::CodeDeploy::DeploymentGroup<function-logical-id>DeploymentGroup 和一个名为 AWS::IAM::RoleCodeDeployServiceRole

类型: DeploymentPreference

必需: 否

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

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

Description

该函数的描述。

类型:字符串

必需: 否

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

Environment

运行时环境的配置。

类型Environment

必需: 否

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

EventInvokeConfig

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

类型: EventInvokeConfiguration

必需: 否

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

Events

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

类型: EventSource

必需: 否

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

FileSystemConfigs

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

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

类型:列表

必需: 否

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

FunctionName

函数的名称。如果不指定名称,则为您生成一个唯一名称。

类型:字符串

必需: 否

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

Handler

您的代码中调用用于开始执行的函数。此属性仅在 PackageType 属性设置为 Zip 时必需。

类型:字符串

必需: 条件

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

ImageConfig

用于配置 Lambda 容器映像设置的对象。有关更多信息,请参阅 Lambda 中的将容器映像与 结合使用AWS Lambda Developer Guide。

类型: ImageConfig

必需: 否

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

ImageUri

函数的容器映像的 Amazon Elastic Container Registry (Amazon ECR) 存储库的 URI。Lambda有关更多信息,请参阅 Lambda 中的将容器映像与 结合使用AWS Lambda Developer Guide。

类型:字符串

必需: 否

兼容性AWS CloudFormation:此属性直接传递到 ImageUri AWS::Lambda::Function 数据类型的 Code 属性。

InlineCode

直接在模板中写入的 Lambda 函数代码。

注意:需要 CodeUriInlineCode

类型:字符串

必需: 条件

兼容性AWS CloudFormation:此属性直接传递到 ZipFile AWS::Lambda::Function 数据类型的 Code 属性。

KmsKeyArn

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

类型:字符串

必需: 否

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

Layers

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

类型:列表

必需: 否

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

MemorySize

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

类型:整数

必需: 否

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

PackageType

函数的部署程序包类型。Lambda有关更多信息,请参阅 Lambda 中的 部署程序包AWS Lambda Developer Guide。

有效值Zip 或者 Image

类型:字符串

必需: 否

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

PermissionsBoundary

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

类型:字符串

必需: 否

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

Policies

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

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

有关 AWS 托管策略的更多信息,请参阅 中的 AWS 托管策略IAM 用户指南。有关 AWS SAM 策略模板的更多信息,请参阅 AWS SAM 策略模板 中的 AWS 无服务器应用程序模型 开发人员指南。有关内联策略的更多信息,请参阅 中的内联策略IAM 用户指南。

注意:如果设置了 Role 属性,则将忽略此属性。

类型:String | List | Map

必需: 否

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

ProvisionedConcurrencyConfig

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

注意:仅当设置了 ProvisionedConcurrencyConfig 时,才能指定 AutoPublishAlias。否则,将导致错误。

类型: ProvisionedConcurrencyConfig

必需: 否

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

ReservedConcurrentExecutions

要为函数预留的最大并发执行数。

有关该属性的更多信息,请参阅 https://docs.amazonaws.cn/lambda/latest/dg/scaling.html 中的 AWS Lambda 函数扩展AWS Lambda Developer Guide。

类型:整数

必需: 否

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

Role

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

类型:字符串

必需: 否

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

Runtime

函数的运行时的标识符。此属性仅在 PackageType 属性设置为 Zip 时是必需的。

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

类型:字符串

必需: 条件

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

Tags

指定添加到 Lambda 函数和相应执行角色的标签的映射(字符串到字符串)。键和值仅限于字母数字字符。键的长度可以在 1 到 127 个 Unicode 字符之间,并且不能带有前缀 aws:。 值的长度可以是 1 到 255 个 Unicode 字符。

类型:Map

必需: 否

兼容性AWS CloudFormation:此属性类似于 Tags 资源的 AWS::Lambda::Function 属性。中的 Tags 属性由键值对组成。AWS SAM在 AWS CloudFormation 中,它包含一个 Tag 对象列表。创建堆栈时,AWS SAM 会自动将 lambda:createdBy:SAM 标签添加到此 Lambda 函数和相应的执行角色。

Timeout

函数在停止前可以运行的最长时间(以秒为单位)。

类型:整数

必需: 否

默认值:3

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

Tracing

指定函数的 X-Ray 跟踪模式的字符串。有关 X-Ray 的更多信息,请参阅 中的AWS Lambda将 AWS X-Ray 与 结合使用。AWS Lambda Developer Guide

有效值Active 或者 PassThrough

类型:字符串

必需: 否

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

VersionDescription

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

类型:字符串

必需: 否

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

VpcConfig

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

类型: VpcConfig

必需: 否

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

返回值

Ref

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

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

Fn::GetAtt

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

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

Arn

底层 Lambda 函数的 ARN。

示例

简单函数

以下是 AWS::Serverless::Function 资源的基本示例。

YAML

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

函数属性示例

以下是使用 AWS::Serverless::FunctionInlineCodeLayersTracingPoliciesAmazon EFSApi 事件源的 的示例。

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.6 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 示例

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

YAML

HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageConfig: Command: - "app.lambda_handler" EntryPoint: - "entrypoint1" WorkingDirectory: "workDir"