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