AWS CloudFormation中!Sub与!Join函数联合使用触发模板错误的解决求助
解决CloudFormation中!Sub与!Join联合使用的ValidationError问题
我来帮你搞定这个模板错误!你遇到的问题根源是错误地混用了!Sub和!Join的语法结构,让我们一步步拆解解决:
错误原因分析
你当前的写法把!Sub的参数写成了数组,但!Sub的数组格式要求第一个元素必须是字符串模板,而你放了!Join函数,这完全不符合Fn::Sub的语法规则,所以CloudFormation抛出了ValidationError。
其实你根本不需要同时用!Sub和!Join——!Sub本身就支持直接在字符串里嵌入变量完成拼接,完全能满足你的需求。
正确写法
直接使用!Sub处理ARN拼接即可,代码如下:
ManagedPolicyArns: - !Ref kinesiss3logpolicy PermissionsBoundary: !Sub 'arn:aws:iam::${AWS::AccountId}:policy/${AdminPolicy}'
补充说明
${AWS::AccountId}是CloudFormation的伪参数,会自动替换为当前部署模板的AWS账号ID${AdminPolicy}会直接引用你模板中定义的同名参数,无需额外的!Ref(!Sub会自动识别参数和伪参数)
如果你一定要用!Join来实现(虽然没必要),可以去掉!Sub,写成这样:
PermissionsBoundary: !Join - '' - - 'arn:aws:iam::' - !Ref AWS::AccountId - ':policy/' - !Ref AdminPolicy
但显然第一种用!Sub的写法更简洁易读,推荐使用。
内容的提问来源于stack exchange,提问作者Sushil
相关产品推荐
相关产品推荐

