Ref
内部函数 Ref
返回指定 参数 或 资源 的值。使用 AWS::LanguageExtensions 转换 转换时,您可以使用内置函数作为 Ref 和 Fn::GetAtt 的参数。
-
它在您指定参数逻辑名称时返回参数值。
-
在您指定资源的逻辑名称时,它会返回一个您一般用于引用该资源的值,如物理 ID。
-
当您指定内置函数时,它会返回该函数的输出。
当您在模板中声明资源且您需要通过名称指定另一个模板资源时,您可以使用 Ref
引用那个其他资源。一般情况下,Ref
返回资源的名称。例如,AWS::AutoScaling::AutoScalingGroup 的引用返回该自动扩缩组资源的名称。
对于某些资源,会返回在资源环境中有另一种重要意义的标识符。例如,AWS::EC2::EIP 资源返回 IP 地址,AWS::EC2::Instance 返回实例 ID。
提示
您还可以使用 Ref
将值添加到 CloudFormation 模板的 Outputs 部分语法参考 消息中。
有关特定资源或属性的 Ref
返回值的更多信息,请参阅 资源和属性参考 中该资源或属性的文档。
声明
JSON
{ "Ref" : "
logicalName
" }
{ "Ref" : "
IntrinsicFunction
" }
YAML
完整函数名称的语法:
Ref:
logicalName
Ref:
IntrinsicFunction
短格式的语法:
!Ref
logicalName
!Ref
IntrinsicFunction
参数
- logicalName
-
您想引用的资源或参数的逻辑名称。
- IntrinsicFunction
-
解析为有效字符串的内置函数。其中应包含对参数或标识符的引用,不应包含资源逻辑标识符。
返回值
参数是 logicalName
时,返回的值是资源的物理 ID 或参数的值。
参数是 IntrinsicFunction
时,返回值是内置函数中的返回值
示例
示例
弹性 IP 地址的以下资源声明需要 EC2 实例的实例 ID,且使用 Ref
函数指定 MyEC2Instance
资源的实例 ID:
JSON
"MyEIP" : { "Type" : "AWS::EC2::EIP", "Properties" : { "InstanceId" : { "Ref" : "MyEC2Instance" } } }
YAML
MyEIP: Type: "AWS::EC2::EIP" Properties: InstanceId: !Ref MyEC2Instance
为多个阶段生成标识符的示例
此示例演示如何使用 Fn::Sub
内置函数替换不同阶段的标识符的值。然后,可以使用 Ref
和 Fn::GetAtt
函数根据阶段的输入来引用适当的值。Fn::Sub
首先与 Fn::GetAtt
一起使用来获取相应的 Amazon SQS 队列的 ARN,以设置 Amazon CloudWatch 警报的维度。接下来,Fn::Join 与 Ref
一起使用来创建 Stage
参数的逻辑 ID 字符串。
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::LanguageExtensions", "Parameters": { "Stage": { "Type": "String", "Default": "Dev", "AllowedValues": [ "Dev", "Prod" ] } }, "Conditions": { "isProd": { "Fn::Equals": [ {"Ref": "Stage"}, "Prod" ] }, "isDev": { "Fn::Equals": [ {"Ref": "Stage"}, "Dev" ] } }, "Resources": { "DevQueue": { "Type": "AWS::SQS::Queue", "Condition": "isDev", "Properties": { "QueueName": {"Fn::Sub": "My${Stage}Queue"} } }, "ProdQueue": { "Type": "AWS::SQS::Queue", "Condition": "isProd", "Properties": { "QueueName": {"Fn::Sub": "My${Stage}Queue"} } }, "DevTopic": { "Condition": "isDev", "Type": "AWS::SNS::Topic" }, "ProdTopic": { "Condition": "isProd", "Type": "AWS::SNS::Topic" }, "MyAlarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmDescription": "Alarm if queue depth grows beyond 10 messages", "Namespace": "AWS/SQS", "MetricName": "ApproximateNumberOfMessagesVisible", "Dimensions":[ { "Name": {"Fn::Sub": "${Stage}Queue"}, "Value": {"Fn::GetAtt": [{"Fn::Sub": "${Stage}Queue"}, "QueueName"]} } ], "Statistic": "Sum", "Period": 300, "EvaluationPeriods": 1, "Threshold": 10, "ComparisonOperator": "GreaterThanThreshold", "AlarmActions": [ { "Ref": {"Fn::Join": ["", [{"Ref": "Stage"}, "Topic"]]} } ] } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Transform: 'AWS::LanguageExtensions' Parameters: Stage: Type: String Default: Dev AllowedValues: - Dev - Prod Conditions: isProd: !Equals - !Ref Stage - Prod isDev: !Equals - !Ref Stage - Dev Resources: DevQueue: Type: 'AWS::SQS::Queue' Condition: isDev Properties: QueueName: !Sub 'My${Stage}Queue' ProdQueue: Type: 'AWS::SQS::Queue' Condition: isProd Properties: QueueName: !Sub 'My${Stage}Queue' DevTopic: Condition: isDev Type: 'AWS::SNS::Topic' ProdTopic: Condition: isProd Type: 'AWS::SNS::Topic' MyAlarm: Type: 'AWS::CloudWatch::Alarm' Properties: AlarmDescription: Alarm if queue depth grows beyond 10 messages Namespace: AWS/SQS MetricName: ApproximateNumberOfMessagesVisible Dimensions: - Name: !Sub '${Stage}Queue' Value: !GetAtt - !Sub '${Stage}Queue' - QueueName Statistic: Sum Period: 300 EvaluationPeriods: 1 Threshold: 10 ComparisonOperator: GreaterThanThreshold AlarmActions: - !Ref 'Fn::Join': - '' - - !Ref Stage - Topic
示例在 Ref
函数中使用 Fn::Sub
内置函数
此示例演示了如何使用 Fn::Sub
内置函数替换 Ref
函数的值。然后,可以使用 Ref
和 Fn::GetAtt
函数根据阶段的输入来引用适当的值。Fn::Sub
首先用来获取相应 Amazon SNS 主题的 ARN,以设置 Amazon CloudWatch 警报的维度。接下来,Fn::Join 与 Ref
一起使用来创建 Stage
参数的逻辑 ID 字符串。
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::LanguageExtensions", "Parameters": { "Stage": { "Type": "String", "Default": "Dev", "AllowedValues": [ "Dev", "Prod" ] } }, "Resources": { "TopicDev": { "Type": "AWS::SNS::Topic", "Properties": { "TopicName": "
MyTopic
" } } }, "Outputs": { "stageOutput": { "Value": { "Ref": { "Fn::Sub": "Topic${Stage}" } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Transform: 'AWS::LanguageExtensions' Parameters: Stage: Type: String Default: Dev AllowedValues: - Dev - Prod Resources: TopicDev: Type: 'AWS::SNS::Topic' Properties: TopicName: MyTopic Outputs: stageOutput: Value: !Ref 'Fn::Sub': 'Topic${Stage}'
支持的函数
在 Ref
函数中使用 AWS::LanguageExtensions 转换 转换时,您可以使用以下函数。