在 AWS 文档中的此示例中,我们有一个 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 |
。
管道字符是否代表换行符,说行必须由换行符连接?
内在函数 Fn::Sub (YAML !Sub( 将输入字符串中的变量(例如示例中的${AWS::StackName}
变量(替换为您指定的值。在模板中,您可以使用此函数构造包含值的命令或输出,这些值在您创建或更新堆栈之前不可用。
字符"|"(管道符号(表示"文字样式"。这使用更简单、更易读的标量样式。这意味着您可以输入外观正常的文本,而不必使用""之类的内容来表示行尾。
fn::sub
亚姆尔规格
在您的用户数据部分中,!Sub 函数将 UserData 字符串中的变量替换为您指定的值或伪参数,如 AWS::StackName 和 AWS::Region。
此外,YAML 中行尾的管道符号表示!Sub |
后面的任何缩进文本都应解释为多行标量值。
有关更多详细信息,请参阅内部函数详细信息文档。