AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

AWS::Serverless 转换

使用转换可简化无服务器应用程序的模板撰写工作。例如,以下模板使用 AWS SAM 语法简化 Lambda 函数的声明及其执行角色。

Transform: AWS::Serverless-2016-10-31 Resources: MyServerlessFunctionLogicalID: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs4.3 CodeUri: 's3://testBucket/mySourceCode.zip'

提交模板后,AWS CloudFormation 展开 AWS SAM 语法,如转换所定义。处理后的模板展开 AWS::Serverless::Function 资源,并声明 Lambda 函数和执行角色。

{ "Resources": { "MyServerlessFunctionLogicalID": { "Type": "AWS::Lambda::Function", "Properties": { "Handler": "index.handler", "Code": { "S3Bucket": "testBucket", "S3Key": "mySourceCode.zip" }, "Role": { "Fn::GetAtt": ["FunctionNameRole", "Arn"] }, "Runtime": "nodejs4.3" } }, "FunctionNameRole": { "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 CloudFormation 使用处理后的模板创建或更新堆栈。如果您未指定转换值,AWS CloudFormation 不会处理您的模板,并且 AWS SAM 语法将无法验证模板。

语法

转换声明的值必须为文字字符串。您无法使用参数或函数来指定转换值。以下代码段是转换声明的示例:

JSON

"Transform" : "AWS::Serverless-2016-10-31"

YAML

Transform: "AWS::Serverless-2016-10-31"

模板阶段

模板的阶段指示模板是原始用户提交的模板还是 AWS CloudFormation 已在其中处理转换的模板。原始模板是用户提交的用于创建或更新堆栈的模板。处理后的模板是 AWS CloudFormation 在处理转换后用于创建或更新堆栈的模板。使用处理后的模板可解决堆栈问题。如果堆栈不包括转换,则原始模板和处理后的模板相同。

您可以使用 AWS CloudFormation 控制台AWS CLI 查看堆栈模板的阶段。

使用包含转换的堆栈

要创建或更新带转换的堆栈,您必须创建更改集,然后执行它。更改集描述 AWS CloudFormation 将基于处理后的模板执行的操作。处理期间,AWS CloudFormation 将 AWS SAM 语法转换为由此转换定义的语法。处理可添加您可能不知道的多个资源。例如,专用 AWS::Serverless::Function 资源可添加 AWS Identity and Access Management (IAM) 执行角色和 Lambda 函数。

为确保您已了解转换所引入的所有更改,AWS CloudFormation 要求您使用更改集。在查看更改集后,请执行它以应用更改或创建另一个更改集。

注意

转换可将 IAM 资源添加到您的模板。对于这些资源,AWS CloudFormation 要求您确认其功能。由于 AWS CloudFormation 无法在处理模板前了解所添加的资源,因此您可能需要在创建更改集时确认 IAM 功能,具体取决于您的转换是否包含 IAM 资源。这样一来,当您执行更改集时,AWS CloudFormation 在创建 IAM 资源时具有所需功能。

如果您使用 AWS CLI,则可使用 packagedeploy 命令减少用于启动带转换的堆栈的步骤数。有关更多信息,请参阅 AWS Lambda Developer Guide 中的部署基于 Lambda 的应用程序