本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Ref
內部函數 Ref
會傳回指定之參數或資源的值。當使用 AWS::LanguageExtensions 轉換程序 轉換時,您可以使用內部函數做為 Ref 和 Fn::GetAtt 的參數。
-
當您指定參數的邏輯名稱時,它會傳回參數值。
-
當您指定資源的邏輯名稱時,它會傳回通常用於參考該資源的值,例如實體 ID。
-
當您指定內部函數時,它會傳回該函數的輸出。
當您在範本中宣告資源時,您必須以名稱指定另一個範本資源,您可以使用 Ref
來參照其他資源。一般而言,Ref
會傳回資源名稱。例如,參考 AWS::AutoScaling::AutoScalingGroup 會傳回該 Auto Scaling 群組資源的名稱。
針對某些資源,將會傳回一個識別碼,它對於該資源而言有其他重要的意義。例如, AWS:EC2::EIP 資源會傳回 IP 地址,而 AWS:EC2::Instance 會傳回執行個體 ID。
提示
您也可以使用 Ref
將值新增至 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}'
支援的函數
當使用 AWS::LanguageExtensions 轉換程序 轉換時,在 Ref
函數內,您可以使用以下函數。