가상 파라미터를 사용하여 AWS 값 가져오기
가상 파라미터는 배포 또는 환경 간에 변경될 수 있는 계정 ID, 리전 이름, 스택 세부 정보 등의 중요한 AWS 환경 정보에 대한 액세스를 제공하는 기본 제공 변수입니다.
하드 코딩된 값 대신 가상 파라미터를 사용하여 템플릿을 더 쉽게 이동하고 여러 AWS 계정 및 리전에 재사용할 수 있습니다.
구문
가상 파라미터는 Ref
내장 함수 또는 Fn::Sub
내장 함수를 사용하여 참조할 수 있습니다.
Ref
Ref
내장 함수는 다음과 같은 일반 구문을 사용합니다. 자세한 내용은 Ref를 참조하세요.
JSON
{ "Ref" : "AWS::
PseudoParameter
" }
YAML
!Ref AWS::
PseudoParameter
Fn::Sub
Fn::Sub
내장 함수는 가상 파라미터 주위에 ${}
구문을 포함하는 다른 형식을 사용합니다. 자세한 내용은 Fn::Sub 단원을 참조하십시오.
JSON
{ "Fn::Sub" : "${AWS::
PseudoParameter
}" }
YAML
!Sub '${AWS::
PseudoParameter
}'
사용 가능한 의사 파라미터
AWS::AccountId
스택이 생성되는 계정의 AWS 계정 ID를 반환합니다(예: 123456789012
).
이 가상 파라미터는 계정별 ARN과 관련한 IAM 역할, 정책 및 기타 리소스 정책을 정의하는 데 많이 사용됩니다.
AWS::NotificationARNs
스택 이벤트 알림이 발생한 Amazon SNS 주제의 Amazon 리소스 이름(ARN) 목록을 반환합니다. 스택을 생성하거나 업데이트할 때 AWS CLI의 --notification-arns
옵션을 통해, 또는 콘솔을 통해 이러한 ARN을 지정할 수 있습니다.
단일 값을 반환하는 다른 가상 파라미터와 달리, AWS::NotificationARNs
는 ARN 목록을 반환합니다. 목록의 특정 ARN에 액세스하려면 Fn::Select
내장 함수를 사용합니다. 자세한 내용은 Fn::Select 섹션을 참조하세요.
AWS::NoValue
Fn::If
내장 함수에 반환 값으로 지정된 경우 해당 리소스 속성을 제거합니다. 자세한 내용은 Fn::If 섹션을 참조하세요.
이 가상 파라미터는 특정 조건에서만 포함되어야 하는 조건부 리소스 속성을 생성하는 데 특히 유용합니다.
AWS::Partition
리소스가 있는 파티션을 반환합니다. 표준 AWS 리전에서 파티션은 aws
입니다. 다른 파티션에 있는 리소스의 경우 파티션은 aws-
partitionname
입니다. 예를 들어 중국(베이징 및 닝샤) 리전에 있는 리소스에 대한 파티션은 aws-cn
이고, AWS GovCloud(미국 서부) 리전에 있는 리소스에 대한 파티션은 aws-us-gov
입니다.
이 파티션은 리소스의 ARN에서 일부분을 구성합니다. AWS::Partition
을 사용하면 여러 AWS 파티션에서 템플릿이 올바르게 작동합니다.
AWS::Region
포괄 리소스를 생성하는 리전을 나타내는 문자열을 반환합니다(예: us-west-2
).
수정 없이 여러 AWS 리전에 템플릿이 적응될 수 있기 때문에, 가장 일반적으로 사용되는 가상 파라미터 중 하나입니다.
AWS::StackId
arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123
과 같은 스택의 ID(ARN)를 반환합니다.
AWS::StackName
teststack
과 같은 스택의 이름을 반환합니다.
스택 이름은 고유한 리소스 이름을 생성하는 데 많이 사용되며, 해당 리소스가 특정 스택에 속해 있음을 쉽게 식별하는 데 도움이 됩니다.
AWS::URLSuffix
스택이 배포된 AWS 리전에서 AWS 도메인의 접미사를 반환합니다. 이 접미사는 일반적으로 amazonaws.com
이지만 중국(베이징) 리전의 경우 이 접미사는 amazonaws.com.cn
입니다.
이 파라미터는 AWS 서비스 엔드포인트의 URL을 구성할 때 특히 유용합니다.
예시
기본 사용법
다음 예에서는 두 가지 리소스, 즉 Amazon SNS 주제와 해당 주제에 알림을 전송하는 CloudWatch 경보를 생성합니다. AWS::StackName
, AWS::Region
및 AWS::AccountId
를 사용하여 스택 이름, 현재 AWS 리전 및 계정 ID를 리소스 이름, 설명 및 ARN에 동적으로 삽입합니다.
JSON
{ "Resources": { "MyNotificationTopic": { "Type": "AWS::SNS::Topic", "Properties": { "DisplayName": { "Fn::Sub": "Notifications for ${AWS::StackName}" } } }, "CPUAlarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmDescription": { "Fn::Sub": "Alarm for high CPU in ${AWS::Region}" }, "AlarmName": { "Fn::Sub": "${AWS::StackName}-HighCPUAlarm" }, "MetricName": "CPUUtilization", "Namespace": "AWS/EC2", "Statistic": "Average", "Period": 300, "EvaluationPeriods": 1, "Threshold": 80, "ComparisonOperator": "GreaterThanThreshold", "AlarmActions": [{ "Fn::Sub": "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${MyNotificationTopic}" }] } } } }
YAML
Resources: MyNotificationTopic: Type: AWS::SNS::Topic Properties: DisplayName: !Sub Notifications for ${AWS::StackName} CPUAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmDescription: !Sub Alarm for high CPU in ${AWS::Region} AlarmName: !Sub ${AWS::StackName}-HighCPUAlarm MetricName: CPUUtilization Namespace: AWS/EC2 Statistic: Average Period: 300 EvaluationPeriods: 1 Threshold: 80 ComparisonOperator: GreaterThanThreshold AlarmActions: - !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${MyNotificationTopic}
AWS::NotificationARNs 사용하기
다음 예에서는 인스턴스 시작 이벤트 및 시작 오류에 대한 알림을 전송하도록 Auto Scaling 그룹을 구성합니다. 이 구성에는 스택 생성 중에 지정된 Amazon SNS 주제 ARN 목록을 제공하는 AWS::NotificationARNs
가상 파라미터를 사용합니다. Fn::Select
함수는 해당 목록에서 첫 번째 ARN을 선택합니다.
JSON
"myASG": { "Type": "AWS::AutoScaling::AutoScalingGroup", "Properties": { "LaunchTemplate": { "LaunchTemplateId": { "Ref": "myLaunchTemplate" }, "Version": { "Fn::GetAtt": [ "myLaunchTemplate", "LatestVersionNumber" ] } }, "MaxSize": "1", "MinSize": "1", "VPCZoneIdentifier": [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "NotificationConfigurations" : [{ "TopicARN" : { "Fn::Select" : [ "0", { "Ref" : "AWS::NotificationARNs" } ] }, "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR" ] }] } }
YAML
myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber MinSize: '1' MaxSize: '1' VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 NotificationConfigurations: - TopicARN: Fn::Select: - '0' - Ref: AWS::NotificationARNs NotificationTypes: - autoscaling:EC2_INSTANCE_LAUNCH - autoscaling:EC2_INSTANCE_LAUNCH_ERROR
AWS::NoValue을 사용한 조건부 속성
다음 예는 스냅샷 ID가 제공된 경우에만 스냅샷을 사용하는 Amazon RDS DB 인스턴스를 생성합니다. UseDBSnapshot
조건이 true로 평가되면 CloudFormation에서는 DBSnapshotIdentifier
속성에 대한 DBSnapshotName
파라미터 값을 사용합니다. 조건이 false로 평가되면 CloudFormation이 DBSnapshotIdentifier
속성을 제거합니다.
JSON
"MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }
YAML
MyDB: Type: AWS::RDS::DBInstance Properties: AllocatedStorage: '5' DBInstanceClass: db.t2.small Engine: MySQL EngineVersion: '5.5' MasterUsername: Ref: DBUser MasterUserPassword: Ref: DBPassword DBParameterGroupName: Ref: MyRDSParamGroup DBSnapshotIdentifier: Fn::If: - UseDBSnapshot - Ref: DBSnapshotName - Ref: AWS::NoValue