You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过CloudFormation UserData安装CodeDeploy Agent时Fn::Sub报错如何解决

问题原因

你使用!Sub(CloudFormation Fn::Sub 函数的简写)包裹了整个UserData脚本,Fn::Sub会默认解析脚本中所有${变量名}格式的内容,尝试将其替换为CloudFormation模板中定义的参数、资源属性或伪参数。
而你脚本中的${PLAT}、${REGION}、${AUTOUPDATE}都是运行在EC2实例内部的bash脚本变量,不属于CloudFormation侧的可替换变量,因此linter会抛出找不到对应参数的E1019错误。
控制台直接填入UserData可正常运行,是因为该场景下内容不会经过CloudFormation Fn::Sub函数的解析处理,${}语法会原样保留交给bash执行,不存在变量匹配校验的问题。

解决方法

方法1:转义bash侧的变量符号

如果你需要在UserData中同时使用CloudFormation侧的变量替换能力,只需要给所有bash脚本变量的$符号添加反斜杠转义,告诉Fn::Sub不要解析这些内容:

  • 将${PLAT}修改为\${PLAT}
  • 将${REGION}修改为\${REGION}
  • 将${AUTOUPDATE}修改为\${AUTOUPDATE}
    修改完成后Fn::Sub只会解析你没有转义的${}内容,转义后的内容会原样输出到UserData中交给bash执行。

方法2:移除不需要的!Sub函数

如果你整个UserData脚本中不需要用到任何CloudFormation侧的变量替换,直接去掉!Sub修饰即可:

UserData:
  'Fn::Base64': |
    # 后面直接跟你的原始bash脚本,不需要做任何修改

此时CloudFormation不会解析脚本中的${}语法,自然不会触发参数不存在的报错。

内容的提问来源于stack exchange,提问作者Franchise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:36:05