什么是“!Sub |”在具有YAML语法的AWS UserData字段中是什么意思?

时间:2017-11-11 17:32:23

标签: amazon-web-services yaml amazon-cloudformation

在这个来自AWS docs的示例中,我们有一个允许多行字符串的UserData字段,使用以下语法:

UserData:
  Fn::Base64: !Sub |
     #!/bin/bash -xe
     yum update -y aws-cfn-bootstrap
     /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --region ${AWS::Region}
     /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}

!Sub |在这里意味着什么,特别是管道角色?相应的JSON使用"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [代替,但在YAML中,使用了!Sub |

竖线字符是否代表换行符,说换行符必须换行?

2 个答案:

答案 0 :(得分:3)

内部函数Fn :: Sub(YAML!Sub)用您指定的值替换输入字符串中的变量。在模板中,您可以使用此函数构造包含在创建或更新堆栈之前不可用的值的命令或输出。

角色' |' (管道符号)表示"文字样式"。这使用更简单,更易读的标量样式。这意味着您可以输入正常的文字而无需使用" \ n"意思是行尾。

Fn::Sub

YAML Spec

答案 1 :(得分:1)

在您的UserData部分中,!Sub函数使用您指定的值或使用伪参数(如AWS :: StackName和AWS :: Region)替换UserData字符串中的变量。

此外,YAML中一行末尾的管道符号表示!Sub |之后的任何缩进文本都应解释为多行标量值。

有关详细信息,请参阅内部函数详细信息documentation