!Ref 和 !Sub 可以在 aws cloudformation 中的任何用例上互换使用吗

Can !Ref and !Sub be used interchangeably on any use case in aws cloudformation

!Ref 和 !Sub 可以在任何用例中互换使用吗?我需要替换环境变量 LOCATION_UPDATE_SNS_TOPIC 中的 Parameter1,以便可以使用 ec2 中的 python 代码以编程方式使用此变量。下面是 ec2 实例的用户数据 属性。

UserData:
   Fn::Base64:
     !Sub |
     #!/bin/bash
     export LOCATION_UPDATE_SNS_TOPIC=!Sub Parameter1

UserData:
   Fn::Base64:
     !Sub |
     #!/bin/bash
     export LOCATION_UPDATE_SNS_TOPIC=!Ref Parameter1

在这种情况下,您既不使用 !Sub 也不使用 !Ref。您已经用第一个 !Sub | 声明了以下包含参数。正确的解决方案是:

UserData:
   Fn::Base64:
     !Sub |
     #!/bin/bash
     export LOCATION_UPDATE_SNS_TOPIC=${Parameter1}

您可以找到一些示例 here