2017-11-11 5 views
0

In diesem Beispiel von AWS docs wir ein Userdata Feld haben, die eine mehrzeilige Zeichenfolge ermöglicht, die folgende Syntax verwenden:Was bedeutet "! Sub |" im AWS UserData Feld mit YAML Syntax bedeuten?

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} 

Was !Sub | hier bedeutet, vor allem der Pipe-Zeichen? Der entsprechende JSON verwendet stattdessen "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [, aber in der YAML wird !Sub | verwendet.

Steht das Pipe-Zeichen für einen Zeilenumbruch, Zeilen müssen durch Zeilenumbrüche verbunden sein?

+0

http://www.yaml.org/spec/1.2/spec.html#id2795688 – melpomene

Antwort

2

Die intrinsische Funktion Fn :: Sub (YAML! Sub) ersetzt Variablen in einer Eingabezeichenfolge mit von Ihnen angegebenen Werten. In Ihren Vorlagen können Sie mit dieser Funktion Befehle oder Ausgaben erstellen, die Werte enthalten, die erst verfügbar sind, wenn Sie einen Stapel erstellen oder aktualisieren.

Das Zeichen '|' (Rohrsymbol) bedeutet "Literal Style". Dies verwendet einen einfacheren, besser lesbaren Skalarstil. Dies bedeutet, dass Sie normal aussehenden Text eingeben können, ohne Dinge wie "\ n" verwenden zu müssen, um das Ende der Zeile zu bedeuten.

Fn::Sub

YAML Spec

1

In Ihrem UserData-Abschnitt ersetzt die! Sub-Funktion Variablen in der UserData-Zeichenfolge durch von Ihnen angegebene Werte oder Pseudoparameter wie AWS :: StackName und AWS :: Region.

Zusätzlich bedeutet das Rohrsymbol am Ende einer Zeile in YAML, dass jeder eingerückte Text, der auf !Sub | folgt, als mehrzeiliger Skalarwert interpretiert werden soll.

Weitere Einzelheiten finden Sie in den intrinsischen Funktionsdetails documentation.