如何在 cloudformation“Fn::Sub”中转义“$”

Posted

技术标签:

【中文标题】如何在 cloudformation“Fn::Sub”中转义“$”【英文标题】:How to escape "$" in cloudformations "Fn::Sub"如何在 cloudformation“Fn::Sub”中转义“$” 【发布时间】:2017-11-11 12:02:38 【问题描述】:

我希望此资源与 !Sub(或 Fn::Sub)内在函数一起使用

Resource: !Sub 'arn:aws:iam::$AWS::AccountId:user/$aws:username'

aws:username 是一个不能被替换的pollicy variable。

一种解决方案是改用Fn::Join 并编写更多样板代码。

更好:你能逃脱$aws:username 以便!Sub 可以在这里工作吗? 很遗憾,documentation 没有提及任何关于转义的内容。

【问题讨论】:

【参考方案1】:

您实际上可以使用$! 转义$ 字符。

所以你的资源应该是这样的:

Resource: !Sub 'arn:aws:iam::$AWS::AccountId:user/$!aws:username'

在字符串参数部分的docs中有提到。

要按字面意思书写美元符号和花括号 ($),请添加 左大括号后的感叹号 (!),例如 $!Literal。 AWS CloudFormation 将此文本解析为 $Literal。

【讨论】:

是的,它在文档中。我现在感觉很傻。 这是一种奇怪的逃避方式 @mana 不要觉得自己很傻。有 10 亿个 AWS 文档页面 - 很容易错过。

以上是关于如何在 cloudformation“Fn::Sub”中转义“$”的主要内容,如果未能解决你的问题,请参考以下文章

如何知道 sam/cloudformation 堆栈 lambda 正在执行啥

Cloudformation - 如何在代码中设置 SNS 订阅的过滤策略?

如何使用 CloudFormation 添加用户池的资源服务器?

如何使用单个 cloudformation 模板创建多个 Elasticbeanstalk 环境

如何通过 CloudFormation 禁用 Cognito 用户注册?

Cloudformation中如何访问跨区域资源