Amazon cloudformation 为什么GetAttr不能处理cloudformation模板参数?

Amazon cloudformation 为什么GetAttr不能处理cloudformation模板参数?,amazon-cloudformation,Amazon Cloudformation,在父子关系中拥有一组cloudformation模板,并希望将AWS::IAM::Role传递到子堆栈的参数中,并使用GetAttr获取Arn 验证失败,因为只能对资源而不是参数调用GetAttr 有人知道/猜猜为什么这样设计吗 这不是一个问题,因为它可以通过将Arn传递到堆栈中来解决,我只是好奇在AWS CloudFormation中,Fn::GetAttr和参数试图做什么是根本不同的。根据AWS文件: 内在函数Fn::GetAtt返回属性的值 来自模板中的资源 [1] 您可以使用可选参数部分

在父子关系中拥有一组cloudformation模板,并希望将AWS::IAM::Role传递到子堆栈的参数中,并使用GetAttr获取Arn

验证失败,因为只能对资源而不是参数调用GetAttr

有人知道/猜猜为什么这样设计吗


这不是一个问题,因为它可以通过将Arn传递到堆栈中来解决,我只是好奇在AWS CloudFormation中,
Fn::GetAttr
参数
试图做什么是根本不同的。根据AWS文件:

内在函数Fn::GetAtt返回属性的值 来自模板中的资源

[1]

您可以使用可选参数部分将值传递到 创建堆栈时使用模板。通过参数,您可以创建 每次创建堆栈时自定义的模板

[2]


我相信你的困惑源于这样一个事实,即你试图从面向对象/其他编程范式的角度来思考这个问题,其中,
Resources
Parameters
是某种对象,
Fn::GetAttr
是一个通用函数,用于检索作为参数传入的引用的值。

在AWS CloudFormation中,
Fn::GetAttr
Parameters
尝试执行的操作是根本不同的。根据AWS文件:

内在函数Fn::GetAtt返回属性的值 来自模板中的资源

[1]

您可以使用可选参数部分将值传递到 创建堆栈时使用模板。通过参数,您可以创建 每次创建堆栈时自定义的模板

[2]


我相信你的困惑源于这样一个事实,即你试图从面向对象/其他编程范式的角度来思考这个问题,其中,
Resources
Parameters
是某种对象,
Fn::GetAttr
是一个通用函数,用于检索作为参数传入的引用的值。

在我的例子中,我希望访问嵌套堆栈中的资源属性,如ARN和Name。如果我传递资源字符串并使用GetAtt来获取它们,我不需要将它们作为两个参数传递。由于这个限制,我必须将它们作为两个参数传递。

在我的例子中,我希望访问嵌套堆栈中的资源属性,如ARN和Name。如果我传递资源字符串并使用GetAtt来获取它们,我不需要将它们作为两个参数传递。有了这个限制,我不得不将它们作为两个参数传递。

我不相信@chestercodes会这样问。他问为什么
Fn::GetAtt
的参数必须是字符串而不能是参数值。在
Fn::GetAtt
文档中:“对于Fn::GetAtt逻辑资源名称,您不能使用函数。您必须指定一个字符串作为资源的逻辑ID。”我也很想知道这一点。无法获取在运行时确定的资源的属性。运行模板时需要提供资源的字符串值。我不相信@chestercodes会这样要求。他问为什么
Fn::GetAtt
的参数必须是字符串而不能是参数值。在
Fn::GetAtt
文档中:“对于Fn::GetAtt逻辑资源名称,您不能使用函数。您必须指定一个字符串作为资源的逻辑ID。”我也很想知道这一点。无法获取在运行时确定的资源的属性。运行模板时,需要提供资源的字符串值。