【发布时间】:2020-02-25 06:54:33
【问题描述】:
我正在尝试找出 GetAtt 与 Ref 与 ${} 之间的区别。
据我了解,您使用GetAtt 仅指同一模板中的对象,而Ref 可用于指代任何东西?另外我什么时候使用${}?
【问题讨论】:
我正在尝试找出 GetAtt 与 Ref 与 ${} 之间的区别。
据我了解,您使用GetAtt 仅指同一模板中的对象,而Ref 可用于指代任何东西?另外我什么时候使用${}?
【问题讨论】:
CloudFormation Ref and GetAtt cheatsheet 是一个非常方便的网页,可用于快速参考您可以通过Ref 和GetAtt 获得的大多数 CloudFormation 资源。您可以将Ref 用作逻辑资源的默认值(包括在Sub 中使用${NAME} 方法)以及堆栈的参数。 GetAtt 只对栈的逻辑资源有用。
【讨论】:
Ref 可用于两件事:
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?
${} is another way to reference parameters。它是只是参数吗?根据this:“将变量写为${MyVarName}。变量可以是模板参数名称、资源逻辑ID、资源属性或键值映射中的变量。”