AWS CloudFormation - 我可以在 GetAtt 中使用 Sub 吗?

AWS CloudFormation - 我可以在 GetAtt 中使用 Sub 吗?

我正在尝试引用 CloudFormation 模板内的安全组。

该组的名称是!Sub '${EnvironmentName}-SG-Private,其中 EnvironmentName 是模板参数。

但是,DBInstanceAWS 类型需要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 返回值的更多信息,请参阅该资源的文档。

相关内容