가상 파라미터를 사용하여 AWS 값 가져오기 - AWS CloudFormation

가상 파라미터를 사용하여 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::RegionAWS::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