【问题标题】:Cloudformation when to use getatt, ref, vs ${}Cloudformation 何时使用 getatt、ref 和 ${}
【发布时间】:2020-02-25 06:54:33
【问题描述】:

我正在尝试找出 GetAttRef${} 之间的区别。

据我了解,您使用GetAtt 仅指同一模板中的对象,而Ref 可用于指代任何东西?另外我什么时候使用${}

【问题讨论】:

    标签: amazon-cloudformation


    【解决方案1】:

    此图可能有助于阐明用途:

    【讨论】:

    • 这有点误导。 1) GetAtt 无法获取“资源的任何属性”,它可以获取资源定义的非常有限的集合。 2) ${} 也可以用于资源的默认值,而不仅仅是参数。
    • 谢谢@JasonWadsworth。修正后的图像。
    【解决方案2】:

    CloudFormation Ref and GetAtt cheatsheet 是一个非常方便的网页,可用于快速参考您可以通过RefGetAtt 获得的大多数 CloudFormation 资源。您可以将Ref 用作逻辑资源的默认值(包括在Sub 中使用${NAME} 方法)以及堆栈的参数。 GetAtt 只对栈的逻辑资源有用。

    【讨论】:

      【解决方案3】:

      Ref 可用于两件事:

      1. 返回您通过模板的参数部分传入的参数的值。
      2. 当您在模板中引用另一个资源的逻辑 ID 时,Ref 返回您可以认为是该类型资源的默认属性的内容。因此,对 EC2 实例使用 ref 将返回实例 ID,引用 s3 存储桶资源,它将返回存储桶名称。您可以查看 AWS 文档中每个 cloudformation 资源页面的底部以了解该值是什么(请参阅返回值部分:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html

      GetAtt 本质上与上面 Ref 的第二个函数相同,它还返回您在资源中创建的资源的属性,但是 ref 仅返回一个默认属性,GetAtt 允许您从不同的属性中选择返回。

      例如,EC2 实例的 GetAtt 让您可以选择返回实例的 AvailabilityZone、PrivateDnsName、PublicDNSName 等 - 而 Ref 只会返回 InstanceID。您可以返回的不同属性因资源类型而异。您还可以查看 AWS 文档中每个 cloudformation 资源页面的底部,了解您都可以返回哪些属性(请参阅返回值部分:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html

      ${} 是另一种引用通过模板参数部分传入的参数的方法。

      不过,所有这些都在 AWS 文档中。

      【讨论】:

      • 非常感谢。如果我想引用模板之外的内容,例如获取arn,我可以根据给出的解释使用 ref 或 getaa?
      • 否,因为这些函数只能在模板中使用。如果资源已经在模板之外创建,则可以在控制台中查看资源,然后您可以通过参数将其传递给 cloudformation
      • 回复:${} is another way to reference parameters。它是只是参数吗?根据this:“将变量写为${MyVarName}。变量可以是模板参数名称、资源逻辑ID、资源属性或键值映射中的变量。”
      猜你喜欢
      • 1970-01-01
      • 2018-12-01
      • 2021-09-26
      • 2017-05-01
      • 2017-01-11
      • 2020-10-01
      • 2018-05-09
      • 2020-06-13
      • 2020-11-26
      相关资源
      最近更新 更多