Ref - AWS CloudFormation

Ref

Ref 내장 함수는 지정된 파라미터 또는 리소스에 대한 정보를 반환합니다. AWS::LanguageExtensions 변환 변환이 사용되는 경우 내장 함수를 Ref 및 Fn::GetAtt에 대한 파라미터로 사용할 수 있습니다.

  • 파라미터의 논리적 이름을 지정하면 파라미터의 값이 반환됩니다.

  • 리소스의 논리적 이름을 지정하면 해당 리소스를 참조하는 데 일반적으로 사용할 수 있는 값이 반환됩니다(예: 물리적 ID).

  • 내장 함수를 지정하면 해당 함수의 출력값이 반환됩니다.

템플릿에서 리소스를 선언하는 데 이름으로 또 다른 템플릿 리소스를 지정해야 하는 경우 Ref를 사용하여 해당하는 다른 리소스를 참조할 수 있습니다. 일반적으로, Ref는 리소스의 이름을 반환합니다. 예를 들어 AWS::AutoScaling::AutoScalingGroup에 대한 참조는 Auto Scaling 그룹 리소스의 이름을 반환합니다.

일부 리소스의 경우 리소스 측면에서 또 다른 중요한 의미를 지닌 식별자가 반환됩니다. 예를 들어, AWS::EC2::EIP 리소스는 IP 주소를, AWS::EC2::Instance는 인스턴스 ID를 반환합니다.

작은 정보

또한 Ref를 사용하여 결과 메시지에 값을 추가할 수도 있습니다.

특정 리소스 또는 속성의 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 내장 함수를 사용하여 여러 단계의 식별자 값을 대체하는 방법을 보여줍니다. 그런 다음 RefFn::GetAtt 함수를 사용하여 단계에 대한 입력에 따라 적절한 값을 참조할 수 있습니다. 먼저 Fn::SubFn::GetAtt와 함께 사용하여 Amazon CloudWatch 경보의 크기를 설정하는 데 적합한 Amazon SQS 대기열의 ARN을 가져옵니다. 그런 다음 Fn::JoinRef와 함께 사용하여 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 함수의 값을 대체하는 방법을 보여줍니다. 그런 다음 RefFn::GetAtt 함수를 사용하여 단계에 대한 입력에 따라 적절한 값을 참조할 수 있습니다. 먼저 Fn::Sub을(를) 사용하여 Amazon CloudWatch 경보의 크기를 설정하는 데 적절한 Amazon SNS 주제의 ARN을 가져옵니다. 그런 다음 Fn::JoinRef와 함께 사용하여 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 함수 내에서 다음 함수를 사용할 수 있습니다.