何时使用getatt,ref和$ {}的Cloudformation

时间:2019-10-30 01:16:45

标签: amazon-cloudformation

我试图弄清楚getatt与ref和$ {}之间的区别。据我了解,您使用getatt只引用同一模板中的对象,而ref可以用来引用任何东西?另外,什么时候使用$ {}?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

参考可以用于两件事:

  1. 返回通过模板的parameters部分传入的参数的值。
  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文档中。

答案 2 :(得分:0)

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

stacks