Ref
組み込み関数 Ref
は、指定したパラメータまたはリソースの値を返します。AWS::LanguageExtensions 変換 変換を使用するとき、組み込み関数を Ref と Fn::GetAtt のパラメーターとして使用できます。
-
パラメータの論理名を指定すると、それはパラメータの値を返します。
-
リソースの論理名を指定すると、それはそのリソースを参照するために通常使用できる値を返します (物理 ID)。
-
組み込み関数を指定すると、その関数の出力を返します。
テンプレートでリソースを宣言するときに別のテンプレートリソースを名前で指定する必要がある場合は、Ref
を使用して別のリソースを参照できます。一般的に、Ref
はリソースの名前を返します。たとえば、AWS::AutoScaling::AutoScalingGroup の参照は、Auto Scaling グループリソースの名前を返します。
一部のリソースでは、リソースのコンテキストにおいて別の重要な意味を持つ識別子が返されます。たとえば、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
組み込み関数を使用する
この例では、Ref
組み込み関数を使用して Fn::Sub
関数の値を代入する方法が示しています。その後、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
関数内で次の関数を使用できます。