【问题标题】:What does "!Sub |" mean in AWS UserData field with YAML syntax?"!Sub |" 是什么意思?在 AWS UserData 字段中使用 YAML 语法是什么意思?
【发布时间】:2018-04-24 17:57:06
【问题描述】:

在来自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 |

管道字符是否代表换行符,表示行必须由换行符连接?

【问题讨论】:

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


【解决方案1】:

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

字符“|” (管道符号)表示“文字样式”。这使用了更简单、更易读的标量样式。这意味着您可以输入正常的文本,而不必使用“\n”之类的东西来表示行尾。

Fn::Sub

YAML Spec

【讨论】:

  • 如果我可以对这个答案进行双重投票,我会的。我一直在发疯,试图弄清楚为什么我们将数据从一个命令传递到另一个命令。
【解决方案2】:

在您的 UserData 部分中,!Sub 函数将 UserData 字符串中的变量替换为您指定的值或 AWS::StackName 和 AWS::Region 等伪参数。

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

更多详情请参考内部函数详情documentation

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 2022-10-15
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    相关资源
    最近更新 更多