

# 擬似パラメータを使用して AWS 値を取得する
<a name="pseudo-parameter-reference"></a>

擬似パラメータは、アカウント ID、リージョン名、スタックの詳細など、デプロイや環境間で変更される可能性のある重要な AWS 環境情報へのアクセスを提供する組み込み変数です。

ハードコードされた値の代わりに擬似パラメータを使用すると、テンプレートの移植性が向上し、さまざまな AWS アカウント やリージョン間での再利用が容易になります。

## 構文
<a name="pseudo-parameter-syntax"></a>

組み込み関数 `Ref` または `Fn::Sub` を使用して、擬似パラメータを参照できます。

### 参照番号
<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>

`123456789012` など、スタックが作成されているアカウントの AWS アカウント ID を返します。

この擬似パラメータは、アカウント固有の ARN を含む IAM ロール、ポリシー、およびその他のリソースポリシーを定義するときに一般的に使用されます。

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

スタックイベント通知を受信する Amazon SNS トピックの Amazon リソースネーム (ARN) のリストを返します。これらの ARN は、スタックの作成または更新時に、AWS CLI の `--notification-arns` オプションまたはコンソールを使用して指定できます。

単一の値を返す他の擬似パラメータとは異なり、`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 リージョン に適応できるため、最も一般的に使用される擬似パラメータの 1 つです。

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

スタックの ID (ARN) を返します (例: `arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123`)。

### `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 アラームの 2 つのリソースを作成します。これらは `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 グループを設定します。この設定では、`AWS::NotificationARNs` 擬似パラメータを使用します。これは、スタックの作成時に指定された Amazon SNS トピック ARN のリストを提供します。`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
```