

# 가상 파라미터를 사용하여 AWS 값 가져오기
<a name="pseudo-parameter-reference"></a>

가상 파라미터는 배포 또는 환경 간에 변경될 수 있는 계정 ID, 리전 이름, 스택 세부 정보 등의 중요한 AWS 환경 정보에 대한 액세스를 제공하는 기본 제공 변수입니다.

하드 코딩된 값 대신 가상 파라미터를 사용하여 템플릿을 더 쉽게 이동하고 여러 AWS 계정 및 리전에 재사용할 수 있습니다.

## 구문
<a name="pseudo-parameter-syntax"></a>

가상 파라미터는 `Ref` 내장 함수 또는 `Fn::Sub` 내장 함수를 사용하여 참조할 수 있습니다.

### Ref
<a name="pseudo-parameter-ref-syntax"></a>

`Ref` 내장 함수는 다음과 같은 일반 구문을 사용합니다. 자세한 내용은 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-ref.html)를 참조하세요.

#### JSON
<a name="pseudo-parameter-ref-syntax.json"></a>

```
{ "Ref" : "AWS::PseudoParameter" }
```

#### YAML
<a name="pseudo-parameter-ref-syntax.yaml"></a>

```
!Ref AWS::PseudoParameter
```

### Fn::Sub
<a name="pseudo-parameter-sub-syntax"></a>

`Fn::Sub` 내장 함수는 가상 파라미터 주위에 `${}` 구문을 포함하는 다른 형식을 사용합니다. 자세한 내용은 [Fn::Sub](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-sub.html) 단원을 참조하십시오.

#### JSON
<a name="pseudo-parameter-sub-syntax.json"></a>

```
{ "Fn::Sub" : "${AWS::PseudoParameter}" }
```

#### YAML
<a name="pseudo-parameter-sub-syntax.yaml"></a>

```
!Sub '${AWS::PseudoParameter}'
```

## 사용 가능한 의사 파라미터
<a name="available-pseudo-parameters"></a>

### `AWS::AccountId`
<a name="cfn-pseudo-param-accountid"></a>

스택이 생성되는 계정의 AWS 계정 ID를 반환합니다(예: `123456789012`).

이 가상 파라미터는 계정별 ARN과 관련한 IAM 역할, 정책 및 기타 리소스 정책을 정의하는 데 많이 사용됩니다.

### `AWS::NotificationARNs`
<a name="cfn-pseudo-param-notificationarns"></a>

스택 이벤트 알림이 발생한 Amazon SNS 주제의 Amazon 리소스 이름(ARN) 목록을 반환합니다. 스택을 생성하거나 업데이트할 때 AWS CLI의 `--notification-arns` 옵션을 통해, 또는 콘솔을 통해 이러한 ARN을 지정할 수 있습니다.

단일 값을 반환하는 다른 가상 파라미터와 달리, `AWS::NotificationARNs`는 ARN 목록을 반환합니다. 목록의 특정 ARN에 액세스하려면 `Fn::Select` 내장 함수를 사용합니다. 자세한 내용은 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-select.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-select.html) 섹션을 참조하세요.

### `AWS::NoValue`
<a name="cfn-pseudo-param-novalue"></a>

`Fn::If` 내장 함수에 반환 값으로 지정된 경우 해당 리소스 속성을 제거합니다. 자세한 내용은 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if) 섹션을 참조하세요.

이 가상 파라미터는 특정 조건에서만 포함되어야 하는 조건부 리소스 속성을 생성하는 데 특히 유용합니다.

### `AWS::Partition`
<a name="cfn-pseudo-param-partition"></a>

리소스가 있는 파티션을 반환합니다. 표준 AWS 리전에서 파티션은 `aws`입니다. 다른 파티션에 있는 리소스의 경우 파티션은 `aws-`*partitionname*입니다. 예를 들어 중국(베이징 및 닝샤) 리전에 있는 리소스에 대한 파티션은 `aws-cn`이고, AWS GovCloud(미국 서부) 리전에 있는 리소스에 대한 파티션은 `aws-us-gov`입니다.

이 파티션은 리소스의 ARN에서 일부분을 구성합니다. `AWS::Partition`을 사용하면 여러 AWS 파티션에서 템플릿이 올바르게 작동합니다.

### `AWS::Region`
<a name="cfn-pseudo-param-region"></a>

포괄 리소스를 생성하는 리전을 나타내는 문자열을 반환합니다(예: `us-west-2`).

수정 없이 여러 AWS 리전에 템플릿이 적응될 수 있기 때문에, 가장 일반적으로 사용되는 가상 파라미터 중 하나입니다.

### `AWS::StackId`
<a name="cfn-pseudo-param-stackid"></a>

`arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123`과 같은 스택의 ID(ARN)를 반환합니다.

### `AWS::StackName`
<a name="cfn-pseudo-param-stackname"></a>

`teststack`과 같은 스택의 이름을 반환합니다.

스택 이름은 고유한 리소스 이름을 생성하는 데 많이 사용되며, 해당 리소스가 특정 스택에 속해 있음을 쉽게 식별하는 데 도움이 됩니다.

### `AWS::URLSuffix`
<a name="cfn-pseudo-param-urlsuffix"></a>

스택이 배포된 AWS 리전에서 AWS 도메인의 접미사를 반환합니다. 이 접미사는 일반적으로 `amazonaws.com`이지만 중국(베이징) 리전의 경우 이 접미사는 `amazonaws.com.cn`입니다.

이 파라미터는 AWS 서비스 엔드포인트의 URL을 구성할 때 특히 유용합니다.

## 예제
<a name="pseudo-parameter-examples"></a>

**Topics**
+ [기본 사용법](#pseudo-parameter-basic-example)
+ [AWS::NotificationARNs 사용하기](#pseudo-parameter-notification-example)
+ [AWS::NoValue을 사용한 조건부 속성](#pseudo-parameter-novalue-example)

### 기본 사용법
<a name="pseudo-parameter-basic-example"></a>

다음 예에서는 두 가지 리소스, 즉 Amazon SNS 주제와 해당 주제에 알림을 전송하는 CloudWatch 경보를 생성합니다. `AWS::StackName`, `AWS::Region` 및 `AWS::AccountId`를 사용하여 스택 이름, 현재 AWS 리전 및 계정 ID를 리소스 이름, 설명 및 ARN에 동적으로 삽입합니다.

#### JSON
<a name="pseudo-parameter-basic-example.json"></a>

```
{
    "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
<a name="pseudo-parameter-basic-example.yaml"></a>

```
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 사용하기
<a name="pseudo-parameter-notification-example"></a>

다음 예에서는 인스턴스 시작 이벤트 및 시작 오류에 대한 알림을 전송하도록 Auto Scaling 그룹을 구성합니다. 이 구성에는 스택 생성 중에 지정된 Amazon SNS 주제 ARN 목록을 제공하는 `AWS::NotificationARNs` 가상 파라미터를 사용합니다. `Fn::Select` 함수는 해당 목록에서 첫 번째 ARN을 선택합니다.

#### JSON
<a name="pseudo-parameter-notification-example.json"></a>

```
"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
<a name="pseudo-parameter-notification-example.yaml"></a>

```
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을 사용한 조건부 속성
<a name="pseudo-parameter-novalue-example"></a>

다음 예는 스냅샷 ID가 제공된 경우에만 스냅샷을 사용하는 Amazon RDS DB 인스턴스를 생성합니다. `UseDBSnapshot` 조건이 true로 평가되면 CloudFormation에서는 `DBSnapshotIdentifier` 속성에 대한 `DBSnapshotName` 파라미터 값을 사용합니다. 조건이 false로 평가되면 CloudFormation이 `DBSnapshotIdentifier` 속성을 제거합니다.

#### JSON
<a name="pseudo-parameter-novalue-example.json"></a>

```
"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
<a name="pseudo-parameter-novalue-example.yaml"></a>

```
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
```