本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Fn::Sub
内部函数 Fn::Sub
将输入字符串中的变量替换为您指定的值。在您的模板中,可以使用此函数构建命令或输出,其中包含在创建或更新堆栈之前不可用的值。
声明
以下部分显示函数的语法。
JSON
{ "Fn::Sub" : [
String
, {Var1Name
:Var1Value
,Var2Name
:Var2Value
} ] }
如果您仅替换
参数中的模板参数、资源逻辑 ID 或资源属性,则不要指定变量映射。String
{ "Fn::Sub" :
String
}
YAML
完整函数名称的语法:
Fn::Sub: -
String
-Var1Name
:Var1Value
Var2Name
:Var2Value
短格式的语法:
!Sub -
String
-Var1Name
:Var1Value
Var2Name
:Var2Value
如果您仅替换
参数中的模板参数、资源逻辑 ID 或资源属性,则不要指定变量映射。String
完整函数名称的语法:
Fn::Sub:
String
短格式的语法:
!Sub
String
参数
String
-
一个带变量的字符串,Amazon CloudFormation 在运行时会将这些变量替换为其关联的值。以
${
形式编写变量。变量可以是模板参数名、资源逻辑 ID、资源属性或键值映射中的变量。如果您仅指定模板参数名、资源逻辑 ID 和资源属性,则不要指定键值映射。MyVarName
}如果您指定模板参数名或资源逻辑 ID(例如
${InstanceTypeParameter}
),则 CloudFormation 返回的值与您使用Ref
内部函数时返回的值相同。如果您指定资源属性(例如${MyInstance.PublicIp}
),则 CloudFormation 返回的值与您使用Fn::GetAtt
内部函数时返回的值相同。要按字面书写美元符号和大括号(
${}
),请在左大括号后面添加感叹号(!
),如${!
。CloudFormation将此文本解析为。Literal
}${
Literal
} VarName
-
String
参数中包含的变量的名称。 VarValue
-
CloudFormation 在运行时要将关联的变量名称替换为的值。
返回值
CloudFormation 返回原始字符串,并替换所有变量的值。
示例
以下示例说明如何使用 Fn::Sub
函数。
Fn::Sub
用映射
以下示例使用映射将 ${Domain}
变量替换为来自 Ref
函数的结果值。
JSON
{ "Name": { "Fn::Sub": [ "www.${Domain}", { "Domain": { "Ref": "RootDomainName" } } ] } }
YAML
Name: !Sub - 'www.${Domain}' - Domain: !Ref RootDomainName
Fn::Sub
没有映射
以下示例使用 Fn::Sub、AWS::Region
和 AWS::AccountId
伪参数以及 vpc
资源逻辑 ID 为 VPC 创建一个 Amazon 资源名称(ARN)。
JSON
{ "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" }
YAML
!Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}'
UserData 命令
以下示例使用 Fn::Sub
在运行时将 AWS::StackName
和 AWS::Region
伪参数替换为实际的堆栈名称和区域。
JSON
为了便于阅读,JSON 示例使用 Fn::Join
函数来分隔每条命令,而不是在单个字符串值中指定整个用户数据脚本。
"UserData": { "Fn::Base64": { "Fn::Join": ["\n", [ "#!/bin/bash -xe", "yum update -y aws-cfn-bootstrap", { "Fn::Sub": "/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}" }, { "Fn::Sub": "/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}" }]] }}
YAML
YAML 示例使用文字块指定用户数据脚本。
UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
支持的函数
对于 String
参数,您无法使用任何函数。您必须指定字符串值。
对于 VarName
和 VarValue
参数,您可以使用以下函数:
-
Fn::Base64
-
Fn::FindInMap
-
Fn::GetAtt
-
Fn::GetAZs
-
Fn::If
-
Fn::ImportValue
-
Fn::Join
-
Fn::Select
-
Ref