AWS CloudFormation模板YAML验证错误:Bash脚本被误判
解决CloudFormation YAML模板中UserData脚本的YAML验证错误
问题根源
YAML解析器误将Bash脚本内的内容识别为YAML语法元素,比如yum update -y里的-y被当作列表项标记,进而触发缩进对齐类的验证错误。
解决方法
1. 使用YAML Literal Block Scalar(推荐)
通过|符号声明多行纯文本块,让YAML解析器直接将内容视为原始文本,不解析其中的Bash语法。需保证脚本内容的缩进与Fn::Sub下一行的缩进完全一致:
UserData: Fn::Sub: | #!/bin/bash yum update -y # 后续Bash命令示例 yum install -y httpd systemctl start httpd
|会完整保留脚本的换行和格式,同时不影响Fn::Sub对CloudFormation变量的替换(比如脚本内的${AWS::Region}可正常生效)。
2. 引号包裹脚本(适合短脚本)
若脚本内容较短,可将整个脚本用双引号或单引号包裹为单行字符串,换行用\n替代。注意脚本中的$符号需转义为$$,避免被Fn::Sub误解析:
UserData: Fn::Sub: "#!/bin/bash\nyum update -y\nyum install -y httpd"
3. 严格统一缩进
确保脚本每一行的缩进完全一致,禁止混合使用空格和制表符,且缩进层级需匹配Fn::Sub的子元素要求。YAML对缩进的精度要求极高,哪怕一个空格的偏差都可能触发验证错误。
内容的提问来源于stack exchange,提问作者buga
相关产品推荐
相关产品推荐

