本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS::Serverless::Function
创建 AWS Lambda 函数、AWS Identity and Access Management (IAM) 执行角色以及触发该函数的事件源映射。
资源还支持 AWS::Serverless::Function 资源属性,因此您可以指示 Metadata
构建应用程序所需的自定义运行时。AWS SAM有关构建自定义运行时的更多信息,请参阅构建自定义运行时。
语法
在您的 中声明此实体 AWS 无服务器应用程序模型 (AWS SAM) 模板时,请使用以下语法。
YAML
Type: AWS::Serverless::Function Properties: AssumeRolePolicyDocument:
JSON
AutoPublishAlias:String
AutoPublishCodeSha256:String
CodeSigningConfigArn:String
CodeUri:String | FunctionCode
DeadLetterQueue:Map | DeadLetterQueue
DeploymentPreference:DeploymentPreference
Description:String
Environment:Environment
EventInvokeConfig:EventInvokeConfiguration
Events:EventSource
FileSystemConfigs:List
FunctionName:String
Handler:String
ImageConfig:ImageConfig
ImageUri:String
InlineCode:String
KmsKeyArn:String
Layers:List
MemorySize:Integer
PackageType:String
PermissionsBoundary:String
Policies:String | List | Map
ProvisionedConcurrencyConfig:ProvisionedConcurrencyConfig
ReservedConcurrentExecutions:Integer
Role:String
Runtime:String
Tags:Map
Timeout:Integer
Tracing:String
VersionDescription:String
VpcConfig:VpcConfig
属性
-
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::Version 和 AWS::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 deploy
或sam package
命令的工作流程。注意:需要
CodeUri
或InlineCode
。类型: 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
和一个名为 的 AWS::IAM::Role<function-logical-id>
DeploymentGroupCodeDeployServiceRole
。必需: 否
兼容性AWS CloudFormation:此属性对于 AWS SAM 是唯一的,没有等效的 AWS CloudFormation。
另请参阅:有关此属性的更多信息,请参阅逐步部署无服务器应用程序。
-
Description
-
该函数的描述。
类型:字符串
必需: 否
兼容性AWS CloudFormation:此属性直接传递给
Description
资源的AWS::Lambda::Function
属性。 -
Environment
-
运行时环境的配置。
类型:Environment
必需: 否
兼容性AWS CloudFormation:此属性直接传递给
Environment
资源的AWS::Lambda::Function
属性。 -
EventInvokeConfig
-
描述 Lambda 函数上的事件调用配置的对象。
必需: 否
兼容性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 函数代码。
注意:需要
CodeUri
或InlineCode
。类型:字符串
必需: 条件
兼容性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
函数的更多信息,请参阅 中的 Ref
AWS CloudFormation 用户指南。
Fn::GetAtt
Fn::GetAtt
返回一个此类型指定属性的值。以下为可用属性和示例返回值。
有关使用 Fn::GetAtt
的更多信息,请参阅 Fn::GetAtt
AWS CloudFormation 用户指南 中的 。
示例
简单函数
以下是 AWS::Serverless::Function 资源的基本示例。
YAML
Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.6 CodeUri: s3://bucket/key
函数属性示例
以下是使用 AWS::Serverless::Function、InlineCode
、Layers
、Tracing
、Policies
、Amazon EFS
和 Api
事件源的 的示例。
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
"