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

这是新的《Amazon CloudFormation 模板参考指南》。请更新您的书签和链接。有关开始使用 CloudFormation 的帮助,请参阅《Amazon CloudFormation 用户指南》https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/Welcome.html

AWS::Serverless 转换

本主题介绍如何使用 AWS::Serverless 转换处理用 Amazon Serverless Application Model(Amazon SAM)语法编写的模板处理并将其转换为符合规范的 CloudFormation 模板。

有关使用 AWS::Serverless 转换的更多信息,请参阅 GitHub 上的 Amazon SAM transform

使用量

要使用 AWS::Serverless 转换,您必须在 CloudFormation 模板的顶层对其进行声明。AWS::Serverless 不能用作嵌入在任何其他模板部分中的转换。

该声明的值必须为文本字符串 AWS::Serverless-2016-10-31。您无法使用参数或函数来指定转换值。

语法

要在 CloudFormation 模板中声明该转换,请使用以下语法:

JSON

{ "Transform":"AWS::Serverless-2016-10-31", "Resources":{ ... } }

YAML

Transform: AWS::Serverless-2016-10-31 Resources: ...

AWS::Serverless 转换是一个独立的声明,没有其他参数。

示例

以下示例展示了如何使用 AWS::Serverless 转换和 Amazon SAM 语法,来简化 Lambda 函数及其执行角色的声明。

JSON

{ "Transform":"AWS::Serverless-2016-10-31", "Resources":{ "MyFunction":{ "Type":"AWS::Serverless::Function", "Properties":{ "Handler":"index.handler", "Runtime":"nodejs20.x", "CodeUri":"s3://amzn-s3-demo-bucket/MySourceCode.zip" } } } }

YAML

Transform: AWS::Serverless-2016-10-31 Resources: MyFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: 's3://amzn-s3-demo-bucket/MySourceCode.zip'

从模板创建更改集时,CloudFormation 会按照该转换的定义展开 Amazon SAM 语法。处理后的模板会展开 AWS::Serverless::Function 资源,并声明一个 Lambda 函数和一个执行角色。

{ "Resources": { "MyFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Handler": "index.handler", "Code": { "S3Bucket": "amzn-s3-demo-bucket", "S3Key": "MySourceCode.zip" }, "Role": { "Fn::GetAtt": ["MyFunctionRole", "Arn"] }, "Runtime": "nodejs20.x" } }, "MyFunctionRole": { "Type": "AWS::IAM::Role", "Properties": { "ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"], "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Action": ["sts:AssumeRole"], "Effect": "Allow", "Principal": { "Service": ["lambda.amazonaws.com"] } }] } } } } }

配合使用 AWS::ServerlessAWS::LanguageExtensions

如果同时使用 AWS::ServerlessAWS::LanguageExtensions,当阶段名称作为非 NoEcho 参数值传递时,引用 AWS::ApiGateway::Stage 等资源需要特殊语法。

请使用 Fn::Sub 生成逻辑 ID 引用,而不要对引用 (MyApi.Stage) 使用 Amazon SAM 语法。例如 "Ref": {"Fn::Sub": "${MyApi}${StageName}Stage"}。这将在运行时生成正确的逻辑 ID。

之所以使用此特殊格式是因为这两种转换对值的处理方式不同:

  • AWS::LanguageExtensions 将内置函数解析为其实际值。

  • AWS::Serverless 会创建不同的逻辑 ID,具体取决于它接收的是静态值还是内置函数。

有关无服务器应用程序和 Amazon Serverless Application Model(Amazon SAM)的更多信息,请参阅 Amazon Serverless Application Model 开发人员指南

有关特定于 Amazon SAM 的资源和属性类型,请参阅《Amazon Serverless Application Model 开发人员指南》中的 Amazon SAM resources and properties

有关使用宏的一般信息,请参阅《Amazon CloudFormation 用户指南》中的 使用模板宏对 CloudFormation 模板执行自定义处理