Ref - AWS CloudFormation

Ref

Ref 내장 함수는 지정된 파라미터, 리소스 또는 다른 내장 함수의 값을 반환합니다. 이 함수는 일반적으로 CloudFormation 템플릿 내 리소스 사이에서 참조를 생성하는 데 사용됩니다.

선언

JSON

{ "Ref" : "logicalName" }
{ "Ref" : "IntrinsicFunction" }

YAML

전체 함수 이름의 구문:

Ref: logicalName
Ref: IntrinsicFunction

짧은 형식의 구문:

!Ref logicalName
!Ref IntrinsicFunction

파라미터

logicalName

참조하려는 리소스 또는 파라미터의 논리명입니다.

IntrinsicFunction

유효한 문자열로 확인되는 내장 함수입니다. 파라미터 또는 식별자에 대한 참조를 포함하되, 리소스 논리 식별자를 포함해서는 안 됩니다.

반환 값

Ref의 반환 값은 참조되는 엔터티 유형에 따라 달라집니다.

  • 파라미터의 논리적 이름을 지정하면 파라미터의 값이 반환됩니다. 자세한 내용은 CloudFormation 템플릿 Parameters 구문을 참조하세요.

  • 리소스의 논리명을 지정하면 해당 리소스를 식별하는 데 사용하는 값이 반환됩니다. 일반적으로 리소스의 이름입니다. 그러나 일부 리소스의 경우 리소스 측면에서 또 다른 중요한 의미를 지닌 식별자가 반환됩니다. 예를 들어 AWS::EC2::EIP 리소스는 IP 주소를 반환하고 AWS::EC2::Instance는 인스턴스 ID를 반환합니다. 리소스의 Ref 반환 값에 대한 자세한 내용은 리소스 및 속성 참조의 해당 리소스에 대한 설명서를 참조하세요.

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

예시

리소스 간 참조 생성

탄력적 IP 주소에 대한 다음 리소스 선언에는 EC2 인스턴스의 인스턴스 ID가 필요합니다. Ref 함수를 사용하여 템플릿의 다른 위치에 선언된 MyEC2Instance 리소스의 인스턴스 ID를 지정합니다.

JSON

{ "AWSTemplateFormatVersion":"2010-09-09", "Resources":{ ... "MyEIP":{ "Type":"AWS::EC2::EIP", "Properties":{ "InstanceId":{ "Ref":"MyEC2Instance" } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Resources: ... MyEIP: Type: "AWS::EC2::EIP" Properties: InstanceId: !Ref MyEC2Instance

리소스 식별자를 스택 출력으로 반환

다음 예제에서는 Ref 함수를 사용하여 논리명이 MyBucket인 Amazon S3 버킷의 이름을 스택 출력으로 반환하는 방법을 보여줍니다.

JSON

{ "AWSTemplateFormatVersion":"2010-09-09", "Resources":{ "MyBucket":{ "Type":"AWS::S3::Bucket", "Properties":{ "BucketName":{ "Fn::Sub": "${AWS::StackName}-mybucket" } } } }, "Outputs":{ "BucketNameOutput":{ "Description":"The name of the S3 bucket", "Value":{ "Ref":"MyBucket" } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Resources: MyBucket: Type: AWS::S3::Bucket Properties: BucketName: !Sub ${AWS::StackName}-mybucket Outputs: BucketNameOutput: Description: The name of the S3 bucket Value: !Ref MyBucket

Ref 함수 내에서 Fn::Join 내장 함수 사용

참고

AWS::LanguageExtensions 변환을 사용하는 경우 다른 내장 함수와 함께 Ref를 사용할 수 있습니다. 지원되는 함수는 지원되는 함수 섹션을 참조하세요.

다음 예제에서는 Stage 파라미터에 대한 입력, 조건, Fn::Sub 내장 함수를 사용하여 리소스의 식별자를 설정하는 방법을 보여줍니다. 그런 다음 RefFn::GetAtt 함수를 사용하여 단계에 따라 적절한 값을 참조합니다. 먼저 Fn::SubFn::GetAtt와 함께 사용하여 Amazon CloudWatch 경보의 크기를 설정하는 데 적합한 Amazon SQS 대기열의 ARN을 가져옵니다. 다음으로 Fn::JoinRef와 함께 사용하여 AlarmActions 속성에 대한 SNS 주제의 이름을 생성합니다.

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 ProdQueu: 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

지원되는 함수

AWS::LanguageExtensions 변환을 사용하는 경우 Ref 함수 내에서 다음 함수를 사용할 수 있습니다.