如何解决AWS CloudFormation模板触发的YAMLException报错问题
问题根因
该报错为嵌套引号未正确转义导致的解析失败:<meta>标签的content属性外层使用双引号包裹,内部嵌入的JSON结构又直接使用了双引号,导致content的属性值到第一个内部双引号就提前截断,剩余内容不符合YAML语法规则,CloudFormation解析时直接抛出YAMLException。
修复方案
方案1:转义内层JSON双引号
把content内部的所有双引号统一加转义符,修改后的代码片段如下:<meta name="optimizely-datafile" content="{"version": "4", "rollouts": [], "typedAudiences": [], "anonymizeIP": true, "projectId": [你的项目ID]}">
如果是在JSON格式的CloudFormation模板中写入该内容,需要对转义符额外再加一层转义,即使用\\"替换原有的"。方案2:替换外层引号为单引号
无需严格符合XHTML规范的场景下,直接将content属性的外层包裹引号改为单引号即可,无需额外转义内部JSON的双引号:<meta name="optimizely-datafile" content='{"version": "4", "rollouts": [], "typedAudiences": [], "anonymizeIP": true, "projectId": [你的项目ID]}'>方案3:YAML模板使用多行字符串块
如果使用YAML格式的CloudFormation模板,可以用|块标识符包裹整段HTML内容,从根源避免引号转义冲突:
UserData: Fn::Base64: | <html> <head> <meta name="optimizely-datafile" content='{"version": "4", "rollouts": [], "typedAudiences": [], "anonymizeIP": true, "projectId": "你的项目ID"}'> </head> </html>
内容的提问来源于stack exchange,提问作者William Hardison

