CloudFormation YAML模板ServiceRole配置YAML格式错误如何修复?
修复CloudFormation模板中YAML格式错误的方法
你遇到的这个YAML格式错误,主要是因为模板里的!Sub语法没有正确使用引号,再加上一处空格缺失,导致CloudFormation的YAML解析器无法正确识别内容边界。
先看你原来的代码问题:
ServiceRole:!Join ["/", [!Sub arn:aws:iam::${AWS::AccountId}:role/service-role, !Ref BatchServiceRole]]
这里有两个关键问题:
!Join前面缺少空格,YAML要求键值对的冒号后面必须跟空格,否则解析器会把ServiceRole:!Join当成一个整体,无法识别是键值对;!Sub后面的字符串没有加引号,里面的${AWS::AccountId}变量占位符会让解析器混淆,无法正确识别这是一个需要变量替换的字符串。
给你两种修复方案,都能解决这个问题:
方案一:修正原写法的格式问题
补上!Join前的空格,同时给!Sub的字符串加上双引号:
ServiceRole: !Join ["/", [!Sub "arn:aws:iam::${AWS::AccountId}:role/service-role", !Ref BatchServiceRole]]
方案二:用更简洁的!Sub直接拼接
其实完全可以不用!Join,直接在!Sub的字符串里引用参数,写法更直观,也减少了格式出错的概率:
ServiceRole: !Sub "arn:aws:iam::${AWS::AccountId}:role/service-role/${BatchServiceRole}"
本质上,YAML对字符串的边界非常敏感,当字符串里包含变量、特殊符号或者复杂结构时,一定要用引号把它括起来,这样解析器才能准确识别它的内容。
内容的提问来源于stack exchange,提问作者Vikas Rathore
相关产品推荐
相关产品推荐

