我正在尝试引用 CloudFormation 模板内的安全组。
该组的名称是!Sub '${EnvironmentName}-SG-Private
,其中 EnvironmentName 是模板参数。
但是,DBInstance
AWS 类型需要GroupId
安全组的,而不是组名。因此,我尝试使用 GetAtt 来检索它,但没有任何成功:
Fn::GetAtt: [$(Fn::Sub:[${EnvironmentName}-SG-Private]), GroupId]
这以及其他各种排列都导致了错误。
阅读文档, 它说
对于 Fn::GetAtt 逻辑资源名称,您不能使用函数。您必须指定一个字符串,即资源的逻辑 ID。
如果我没看错的话,我尝试的方法无法解决问题。那么我应该如何引用这个安全组?我需要在创建组时导出其 GroupId 吗?
答案1
您只能Fn::GetAtt
与同一模板中的资源一起使用。因此,您不能将其用于从模板参数派生的名称。
如果需要,GroupId
您可以从创建安全组的模板中将其导出,并将Fn::ImportValue
其导出到需要它的模板中。
有关详细信息,请参阅CloudFormation 导出/导入值
希望有帮助:)
答案2
Fn::GetAtt 内部函数返回模板中资源的属性值。有关特定资源的 GetAtt 返回值的更多信息,请参阅该资源的文档。