

これは新しい CloudFormation テンプレートリファレンスガイドです。ブックマークとリンクを更新してください。CloudFormation の開始方法については、『[AWS CloudFormation ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)』を参照してください。

# 組み込み関数リファレンス
<a name="intrinsic-function-reference"></a>

CloudFormation には、スタックの管理に役立ついくつかの組み込み関数が用意されています。実行するまでわからない値をプロパティに代入するには、テンプレートで組み込み関数を使用します。

**注記**  
組み込み関数は、テンプレートの特定の部分でのみ使用できます。現在、リソースプロパティ、出力、メタデータ属性、および更新ポリシー属性で組込み関数を使用できます。また、条件付きでスタックリソースを作成するために組み込み関数も使用できます。

**Topics**
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::Cidr`](intrinsic-function-reference-cidr.md)
+ [条件関数](intrinsic-function-reference-conditions.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Split`](intrinsic-function-reference-split.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Fn::Transform`](intrinsic-function-reference-transform.md)
+ [`Ref`](intrinsic-function-reference-ref.md)
+ [ルール関数](intrinsic-function-reference-rules.md)

# `Fn::Base64`
<a name="intrinsic-function-reference-base64"></a>

組み込み関数 `Fn::Base64` は、入力文字列の Base64 表現を返します。この関数は通常、`UserData` プロパティを介して Amazon EC2 インスタンスにエンコードされたデータを渡すために使用されます。

## 宣言
<a name="w2aac24c12b5"></a>

### JSON
<a name="intrinsic-function-reference-base64-syntax.json"></a>

```
{ "Fn::Base64" : valueToEncode }
```

### YAML
<a name="intrinsic-function-reference-base64-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Base64: valueToEncode
```

短縮形の構文:

```
!Base64 valueToEncode
```

**注記**  
短縮形を使用し `valueToEncode` パラメータにすぐに別の関数を含める場合、少なくとも 1 つの関数では、完全名関数を使用します。例えば、次の構文は無効です。  

```
!Base64 !Sub string
!Base64 !Ref logical_ID
```
代わりに、次の例に示すように、少なくとも 1 つの関数では、完全名関数を使用します。  

```
!Base64
  "Fn::Sub": string

Fn::Base64:
  !Sub string
```

## パラメータ
<a name="w2aac24c12b7"></a>

valueToEncode  
Base64 に変換する文字列値。

## 戻り値:
<a name="w2aac24c12b9"></a>

元の文字列 (Base64 表現)。

## 例
<a name="w2aac24c12c11"></a>

### JSON
<a name="intrinsic-function-reference-base64-example.json"></a>

```
{ "Fn::Base64" : "AWS CloudFormation" }
```

### YAML
<a name="intrinsic-function-reference-base64-example.yaml"></a>

```
Fn::Base64: AWS CloudFormation
```

## サポートされている関数
<a name="w2aac24c12c13"></a>

`Fn::Base64` 関数内の文字列を変えるどの関数も使用できます。

# `Fn::Cidr`
<a name="intrinsic-function-reference-cidr"></a>

組み込み関数 `Fn::Cidr` は CIDR アドレスブロックの配列を返します。返される CIDR ブロックの数は、`count` パラメータによって異なります。

## 宣言
<a name="intrinsic-function-reference-cidr-declaration"></a>

### JSON
<a name="intrinsic-function-reference-cidr-syntax.json"></a>

```
{ "Fn::Cidr" : [ipBlock, count, cidrBits]}
```

### YAML
<a name="intrinsic-function-reference-cidr-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Cidr: 
  - ipBlock
  - count
  - cidrBits
```

短縮形の構文:

```
!Cidr [ ipBlock, count, cidrBits ]
```

## パラメータ
<a name="intrinsic-function-reference-cidr-parameters"></a>

ipBlock  <a name="ipBlock"></a>
より小さい CIDR ブロックに分割されるユーザー指定の CIDR アドレスブロック。

count  <a name="count"></a>
生成する CIDR の数。有効な範囲は 1～256 です。

cidrBits  <a name="cidrBits"></a>
CIDR のサブネットビット数。たとえば、このパラメータに値「8」を指定すると、「/24」のマスクを持つ CIDR が作成されます。  
サブネットビットはサブネットマスクの逆です。特定のサブネットビットに必要なホストビットを計算するには、IPv4 の場合は 32、IPv6 の場合は 128 からサブネットビットを減算します。

## 戻り値
<a name="intrinsic-function-reference-cidr-return-values"></a>

CIDR アドレスブロックの配列。

## 例
<a name="intrinsic-function-reference-cidr-examples"></a>

### 基本的な使用法
<a name="intrinsic-function-reference-cidr-example1"></a>

この例では、サブマスクが「/24」の CIDR から、内部にサブネットマスクが「/27」の CIDR を 6 つ作成します。

#### JSON
<a name="intrinsic-function-reference-cidr-example1.json"></a>

```
{ "Fn::Cidr" : [ "192.168.0.0/24", "6", "5"] }
```

#### YAML
<a name="intrinsic-function-reference-cidr-example1.yaml"></a>

```
!Cidr [ "192.168.0.0/24", 6, 5 ]
```

### IPv6 対応の VPC を作成する
<a name="intrinsic-function-reference-cidr-example2"></a>

このサンプルテンプレートは、IPv6 対応サブネットを作成します。

#### JSON
<a name="intrinsic-function-reference-cidr-example2.json"></a>

```
{
    "Resources": {
        "ExampleVpc": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16"
            }
        },
        "IPv6CidrBlock": {
            "Type": "AWS::EC2::VPCCidrBlock",
            "Properties": {
                "AmazonProvidedIpv6CidrBlock": true,
                "VpcId": {
                    "Ref": "ExampleVpc"
                }
            }
        },
        "ExampleSubnet": {
            "Type": "AWS::EC2::Subnet",
            "DependsOn": "IPv6CidrBlock",
            "Properties": {
                "AssignIpv6AddressOnCreation": true,
                "CidrBlock": {
                    "Fn::Select": [
                        0,
                        {
                            "Fn::Cidr": [
                                {
                                    "Fn::GetAtt": [
                                        "ExampleVpc",
                                        "CidrBlock"
                                    ]
                                },
                                1,
                                8
                            ]
                        }
                    ]
                },
                "Ipv6CidrBlock": {
                    "Fn::Select": [
                        0,
                        {
                            "Fn::Cidr": [
                                {
                                    "Fn::Select": [
                                        0,
                                        {
                                            "Fn::GetAtt": [
                                                "ExampleVpc",
                                                "Ipv6CidrBlocks"
                                            ]
                                        }
                                    ]
                                },
                                1,
                                64
                            ]
                        }
                    ]
                },
                "VpcId": {
                    "Ref": "ExampleVpc"
                }
            }
        }
    }
}
```

#### YAML
<a name="intrinsic-function-reference-cidr-example2.yaml"></a>

```
Resources:
  ExampleVpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  IPv6CidrBlock:
    Type: AWS::EC2::VPCCidrBlock
    Properties:
      AmazonProvidedIpv6CidrBlock: true
      VpcId: !Ref ExampleVpc
  ExampleSubnet:
    Type: AWS::EC2::Subnet
    DependsOn: IPv6CidrBlock
    Properties:
      AssignIpv6AddressOnCreation: true
      CidrBlock: !Select
        - 0
        - !Cidr
          - !GetAtt ExampleVpc.CidrBlock
          - 1
          - 8
      Ipv6CidrBlock: !Select
        - 0
        - !Cidr
          - !Select
            - 0
            - !GetAtt ExampleVpc.Ipv6CidrBlocks
          - 1
          - 64
      VpcId: !Ref ExampleVpc
```

## サポートされている関数
<a name="intrinsic-function-reference-cidr-functions"></a>

`Fn::Cidr` 関数で以下の関数を使用できます。
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

# 条件関数
<a name="intrinsic-function-reference-conditions"></a>

`Fn::If`、`Fn::Equals` などの組み込み関数を使用して、条件付きロジックに基づいてスタックリソースを作成および設定できます。これらの条件は、スタックの作成時または更新時に評価されます。必要な条件をすべて定義したら、テンプレートの `Resources` セクションと `Outputs` セクションでそれらをリソースまたはリソースプロパティに関連付けることができます。

高度なシナリオでは、`Fn::And` または `Fn::Or` 関数を使用して条件を組み合わせたり、`Fn::Not` を使用して条件の値を否定したりできます。条件をネストして、より複雑な条件付きロジックを作成することもできます。

テンプレートで条件を初めて使用する場合は、まず「*AWS CloudFormation ユーザーガイド*」の「[CloudFormation テンプレートの Conditions 構文](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html)」トピックを確認することをお勧めします。

**注記**  
`Fn::If` 条件を除くすべての条件は、テンプレートの `Conditions` セクションで定義する必要があります。`Fn::If` 条件は、`Metadata` 属性、`UpdatePolicy` 属性、および `Resources` セクションと `Outputs` セクションのプロパティ値で使用できます。

**Topics**
+ [`Fn::And`](#intrinsic-function-reference-conditions-and)
+ [`Fn::Equals`](#intrinsic-function-reference-conditions-equals)
+ [`Fn::If`](#intrinsic-function-reference-conditions-if)
+ [`Fn::Not`](#intrinsic-function-reference-conditions-not)
+ [`Fn::Or`](#intrinsic-function-reference-conditions-or)
+ [サポートされている関数](#w2aac24c20c25)
+ [サンプルテンプレート](#conditions-sample-templates)

## `Fn::And`
<a name="intrinsic-function-reference-conditions-and"></a>

指定されたすべての条件が true に評価された場合は `true` を返します。条件のいずれかが false に評価された場合は `false` を返します。`Fn::And` は AND 演算子として機能します。含めることができる条件の最小数は 2 で、最大数は 10 です。

### 宣言
<a name="intrinsic-function-reference-conditions-and-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-and-syntax.json"></a>

```
"Fn::And": [{condition}, {...}]
```

#### YAML
<a name="intrinsic-function-reference-conditions-and-syntax.yaml"></a>

完全関数名の構文:

```
Fn::And: [condition]
```

短縮形の構文:

```
!And [condition]
```

### パラメータ
<a name="w2aac24c20c13b7"></a>

condition  <a name="fn-and-condition"></a>
`true` または `false` に評価される条件です。

### `Fn::And` の使用例
<a name="w2aac24c20c13b9"></a>

次の `MyAndCondition` は、参照されるセキュリティグループ名が `sg-mysggroup` と等しく、`SomeOtherCondition` が true に評価された場合、true に評価されます。

#### JSON
<a name="intrinsic-function-reference-conditions-and-example.json"></a>

```
"MyAndCondition": {
   "Fn::And": [
      {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]},
      {"Condition": "SomeOtherCondition"}
   ]
}
```

#### YAML
<a name="intrinsic-function-reference-conditions-and-example.yaml"></a>

```
MyAndCondition: !And
  - !Equals ["sg-mysggroup", !Ref ASecurityGroup]
  - !Condition SomeOtherCondition
```

## `Fn::Equals`
<a name="intrinsic-function-reference-conditions-equals"></a>

2 つの値が等しいかどうかを比較します。2 つの値が同じ場合は `true` を返し、同じでない場合は `false` を返します。

### 宣言
<a name="intrinsic-function-reference-conditions-equals-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-equals-syntax.json"></a>

```
"Fn::Equals" : ["value_1", "value_2"]
```

#### YAML
<a name="intrinsic-function-reference-conditions-equals-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Equals: [value_1, value_2]
```

短縮形の構文:

```
!Equals [value_1, value_2]
```

### パラメータ
<a name="w2aac24c20c15b7"></a>

value  
比較する文字列値です。

### `Fn::Equals` の使用例
<a name="w2aac24c20c15b9"></a>

次の `IsProduction` 条件は、`EnvironmentType` パラメーターの値が `prod` と等しい場合に true に評価されます。

#### JSON
<a name="intrinsic-function-reference-conditions-equals-example.json"></a>

```
"IsProduction" : {
   "Fn::Equals": [
      {"Ref": "EnvironmentType"},
      "prod"
   ]
}
```

#### YAML
<a name="intrinsic-function-reference-conditions-equals-example.yaml"></a>

```
IsProduction:
  !Equals [!Ref EnvironmentType, prod]
```

## `Fn::If`
<a name="intrinsic-function-reference-conditions-if"></a>

指定された条件が `true` に評価された場合は 1 つの値を返し、指定された条件が `false` に評価された場合はもう 1 つの値を返します。現在、CloudFormation では、`Metadata` 属性、`UpdatePolicy` 属性、およびテンプレートの `Resources` セクションと `Outputs` セクションのプロパティ値で `Fn::If` 組み込み関数がサポートされています。対応するプロパティを削除するために、戻り値として `AWS::NoValue` 擬似パラメーターを使用できます。

### 宣言
<a name="intrinsic-function-reference-conditions-if-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-if-syntax.json"></a>

```
"Fn::If": [condition_name, value_if_true, value_if_false]
```

#### YAML
<a name="intrinsic-function-reference-conditions-if-syntax.yaml"></a>

完全関数名の構文:

```
Fn::If: [condition_name, value_if_true, value_if_false]
```

短縮形の構文:

```
!If [condition_name, value_if_true, value_if_false]
```

### パラメータ
<a name="w2aac24c20c19b7"></a>

condition\$1name  <a name="condition_name"></a>
Conditions セクションの条件への参照です。参照するには条件の名前を使用します。

value\$1if\$1true  <a name="value_if_true"></a>
指定された条件が true に評価された場合に返される値です。

value\$1if\$1false  <a name="value_if_false"></a>
指定された条件が `false` に評価された場合に返される値です。

### `Fn::If` の使用例
<a name="w2aac24c20c19b9"></a>

**Topics**
+ [条件付きでリソースを選択する](#w2aac24c20c19b9b5)
+ [条件付き出力](#w2aac24c20c19b9b7)
+ [条件付き配列値](#w2aac24c20c19b9b9)
+ [条件付きプロパティとプロパティ値](#w2aac24c20c19b9c11)
+ [条件付き更新ポリシー](#w2aac24c20c19b9c13)

#### 条件付きでリソースを選択する
<a name="w2aac24c20c19b9b5"></a>

次の例では、Amazon EC2 リソース定義の `Fn::If` 関数を使用して、インスタンスに関連付けるセキュリティグループリソースを決定します。`CreateNewSecurityGroup` 条件が true に評価された場合、CloudFormation は参照値 `NewSecurityGroup` (テンプレートの他の場所で作成されたセキュリティグループ) を使用して `SecurityGroupIds` プロパティを指定します。`CreateNewSecurityGroup` が false の場合、CloudFormation は参照値 `ExistingSecurityGroupId` (既存のセキュリティグループを参照するパラメータ) を使用します。

##### JSON
<a name="intrinsic-function-reference-conditions-if-example1.json"></a>

```
"Resources": {
  "EC2Instance": {
    "Type": "AWS::EC2::Instance",
    "Properties": {
      "ImageId": "ami-0abcdef1234567890",
      "InstanceType": "t3.micro",
      "SecurityGroupIds": {
        "Fn::If": [
          "CreateNewSecurityGroup",
          [{"Ref": "NewSecurityGroup"}],
          [{"Ref": "ExistingSecurityGroupId"}]
        ]
      }]
    }
  }
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example1.yaml"></a>

```
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0abcdef1234567890
      InstanceType: t3.micro
      SecurityGroupIds: !If
        - CreateNewSecurityGroup
        - [!Ref NewSecurityGroup]
        - [!Ref ExistingSecurityGroupId]
```

#### 条件付き出力
<a name="w2aac24c20c19b9b7"></a>

テンプレートの `Output` セクションでは、`Fn::If` 関数を使用して条件付きで情報を出力できます。次のスニペットでは、`CreateNewSecurityGroup` 条件が true に評価される場合、CloudFormation は `NewSecurityGroup` リソースのセキュリティグループ ID を出力します。条件が false の場合は、CloudFormation が `ExistingSecurityGroup` リソースのセキュリティグループ ID を出力します。

##### JSON
<a name="intrinsic-function-reference-conditions-if-example2.json"></a>

```
"Outputs" : {
  "SecurityGroupId" : {
    "Description" : "Group ID of the security group used.",
    "Value" : {
      "Fn::If" : [
        "CreateNewSecurityGroup",
        {"Ref" : "NewSecurityGroup"},
        {"Ref" : "ExistingSecurityGroupId"}
      ]
    }
  }
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example2.yaml"></a>

```
Outputs:
  SecurityGroupId: 
    Description: Group ID of the security group used.
    Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroupId]
```

#### 条件付き配列値
<a name="w2aac24c20c19b9b9"></a>

次の例では、`Fn::If` を使用して、条件に基づいて異なる配列値を条件付きで指定します。`MoreThan2AZs` 条件が true に評価された場合、3 つのパブリックサブネットを使用します。それ以外の場合は、2 つのパブリックサブネットのみを使用します。

##### JSON
<a name="intrinsic-function-reference-conditions-if-example-arrays.json"></a>

```
"Subnets": {
  "Fn::If": [
    "MoreThan2AZs",
    [
      {"Fn::ImportValue": "PublicSubnet01"},
      {"Fn::ImportValue": "PublicSubnet02"},
      {"Fn::ImportValue": "PublicSubnet03"}
    ],
    [
      {"Fn::ImportValue": "PublicSubnet01"},
      {"Fn::ImportValue": "PublicSubnet02"}
    ]
  ]
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example-arrays.yaml"></a>

```
Subnets:
  Fn::If:
    - MoreThan2AZs
    - - Fn::ImportValue: PublicSubnet01
      - Fn::ImportValue: PublicSubnet02
      - Fn::ImportValue: PublicSubnet03
    - - Fn::ImportValue: PublicSubnet01
      - Fn::ImportValue: PublicSubnet02
```

#### 条件付きプロパティとプロパティ値
<a name="w2aac24c20c19b9c11"></a>

次の例では、`Fn::If` 関数で `AWS::NoValue` 擬似パラメータを使用します。条件は、スナップショット ID が指定されている場合にのみ、Amazon RDS DB インスタンスのスナップショットを使用します。`UseDBSnapshot` 条件が true に評価された場合は、CloudFormation は `DBSnapshotIdentifier` プロパティに `DBSnapshotName` パラメータ値を使用します。条件が false に評価された場合は、CloudFormation は `DBSnapshotIdentifier` プロパティを削除します。

また、Amazon RDS DB インスタンスの `AllocatedStorage` プロパティで `Fn::If` 関数も使用します。`IsProduction` 条件が true に評価された場合、ストレージサイズは `100` に設定されます。それ以外の場合、`20` に設定されます。

##### JSON
<a name="intrinsic-function-reference-conditions-if-example3.json"></a>

```
"MyDatabase" : {
  "Type" : "AWS::RDS::DBInstance",
  "Properties": {
    "DBInstanceClass": "db.t3.micro",
    "AllocatedStorage": {
      "Fn::If": [
        "IsProduction",
        100,
        20
      ]
    },
    "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="intrinsic-function-reference-conditions-if-example3.yaml"></a>

```
MyDatabase:
  Type: AWS::RDS::DBInstance
  Properties:
    DBInstanceClass: db.t3.micro
    AllocatedStorage: !If [IsProduction, 100, 20]
    Engine: MySQL
    EngineVersion: 5.5
    MasterUsername: !Ref DBUser
    MasterUserPassword: !Ref DBPassword
    DBParameterGroupName: !Ref MyRDSParamGroup
    DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"]
```

#### 条件付き更新ポリシー
<a name="w2aac24c20c19b9c13"></a>

次のスニペットは、`RollingUpdates` 条件が true に評価される場合にだけ、自動拡大縮小更新ポリシーを提供します。条件が false に評価される場合は、CloudFormation は `AutoScalingRollingUpdate` 更新ポリシーを削除します。

##### JSON
<a name="intrinsic-function-reference-conditions-if-example4.json"></a>

```
"UpdatePolicy": {
  "Fn::If": [
    "RollingUpdates",
    {
      "AutoScalingRollingUpdate": {
        "MaxBatchSize": 2,
        "MinInstancesInService": 2,
        "PauseTime": "PT0M30S"
      }
    },
    {
      "Ref": "AWS::NoValue"
    }
  ]
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example4.yaml"></a>

```
UpdatePolicy: !If
  - RollingUpdates
  - AutoScalingRollingUpdate:
      MaxBatchSize: 2
      MinInstancesInService: 2
      PauseTime: PT0M30S
  - !Ref "AWS::NoValue"
```

## `Fn::Not`
<a name="intrinsic-function-reference-conditions-not"></a>

`false` と評価された条件に対しては、`true` を返し、`true` と評価された条件に対しては、`false` を返します。`Fn::Not` は NOT 演算子として機能します。

### 宣言
<a name="intrinsic-function-reference-conditions-not-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-not-syntax.json"></a>

```
"Fn::Not": [{condition}]
```

#### YAML
<a name="intrinsic-function-reference-conditions-not-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Not: [condition]
```

短縮形の構文:

```
!Not [condition]
```

### パラメータ
<a name="w2aac24c20c21b7"></a>

condition  <a name="condition"></a>
`Fn::Equals` または `true` に評価される、`false` のような条件です。

### `Fn::Not` の使用例
<a name="w2aac24c20c21b9"></a>

次の `EnvCondition` 条件は、`EnvironmentType` パラメータの値が `prod` と等しくない場合に true に評価されます。

#### JSON
<a name="intrinsic-function-reference-conditions-not-example.json"></a>

```
"MyNotCondition" : {
   "Fn::Not" : [{
      "Fn::Equals" : [
         {"Ref" : "EnvironmentType"},
         "prod"
      ]
   }]
}
```

#### YAML
<a name="intrinsic-function-reference-conditions-not-example.yaml"></a>

```
MyNotCondition:
  !Not [!Equals [!Ref EnvironmentType, prod]]
```

## `Fn::Or`
<a name="intrinsic-function-reference-conditions-or"></a>

指定された条件のいずれかが true に評価された場合は `true` を返します。条件のすべてが false に評価された場合は `false` を返します。`Fn::Or` は OR 演算子として機能します。含めることができる条件の最小数は 2 で、最大数は 10 です。

### 宣言
<a name="intrinsic-function-reference-conditions-or-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-or-syntax.json"></a>

```
"Fn::Or": [{condition}, {...}]
```

#### YAML
<a name="intrinsic-function-reference-conditions-or-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Or: [condition, ...]
```

短縮形の構文:

```
!Or [condition, ...]
```

### パラメータ
<a name="w2aac24c20c23b7"></a>

condition  
`true` または `false` に評価される条件です。

### `Fn::Or` の使用例
<a name="w2aac24c20c23b9"></a>

次の `MyOrCondition` は、参照されるセキュリティグループ名が `sg-mysggroup` と等しいか、`SomeOtherCondition` が true に評価された場合、true に評価されます。

#### JSON
<a name="intrinsic-function-reference-conditions-or-example.json"></a>

```
"MyOrCondition" : {
   "Fn::Or" : [
      {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]},
      {"Condition" : "SomeOtherCondition"}
   ]
}
```

#### YAML
<a name="intrinsic-function-reference-conditions-or-example.yaml"></a>

```
MyOrCondition:
  !Or [!Equals [sg-mysggroup, !Ref ASecurityGroup], Condition: SomeOtherCondition]
```

## サポートされている関数
<a name="w2aac24c20c25"></a>

`Fn::If` 条件で次の関数を使用できます。
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

`Fn::Equals` や `Fn::Or` など他のすべての条件で次の関数を使用できます。
+ `Fn::FindInMap`
+ `Ref`
+ そのほかの条件関数

## サンプルテンプレート
<a name="conditions-sample-templates"></a>

### 条件付きで、本稼働用、開発用、またはテスト用のスタックのリソースを作成します。
<a name="w2aac24c20c27b3"></a>

場合によっては、似てはいるものの、微調整したスタックを作成することがあります。たとえば、本稼働用アプリケーションに使用するテンプレートがあるとします。開発またはテスト用に、同じ本稼働用スタックを作成します。ただし、開発やテストでは、本稼働レベルのスタックに含まれている余分な容量のすべては必要としません。代わりに、次の例に示すように環境タイプ入力パラメータを使用して、条件付きで本稼働、開発、およびテストに固有のスタックリソースを作成できます。

`prod` パラメーターには、`dev`、`test`、または `EnvType` を指定できます。環境タイプごとに、テンプレートは異なるインスタンスタイプを指定します。インスタンスタイプは、大きなコンピューティング最適化インスタンスタイプから小さい汎用インスタンスタイプまでさまざまです。条件付きでインスタンスタイプを指定するために、テンプレートは `Conditions` セクションで 2 つの条件を定義します。1 つは `CreateProdResources` で、`EnvType` パラメータ値が `prod` に等しい場合は true に評価されます。もう 1 つは `CreateDevResources` で、パラメータ値が `dev` に等しい場合は true に評価されます。

`InstanceType` プロパティ内で、テンプレートは 2 つの `Fn::If` 組み込み関数を使用して、どのインスタンスタイプを使用するかを調べます。`CreateProdResources` 条件が true の場合、インスタンスタイプは `c5.xlarge` です。条件が false の場合は、`CreateDevResources` 条件が評価されます。`CreateDevResources` 条件が true の場合、インスタンスタイプは `t3.medium` です。その他の場合、インスタンスタイプは `t3.small` です。

インスタンスタイプの他に、本稼働環境は Amazon EC2 ボリュームを作成して、インスタンスにアタッチします。`MountPoint` および `NewVolume` リソースは、条件が true に評価される場合にだけリソースが作成されるように、`CreateProdResources` 条件に関連付けられています。

**Example JSON**  

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Parameters" : {
    "EnvType" : {
      "Description" : "Environment type.",
      "Default" : "test",
      "Type" : "String",
      "AllowedValues" : ["prod", "dev", "test"],
      "ConstraintDescription" : "must specify prod, dev, or test."
    }
  },
  "Conditions" : {
    "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "prod"]},
    "CreateDevResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "dev"]}
  },
  "Resources" : {
    "EC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "ImageId" : "ami-1234567890abcdef0",
        "InstanceType" : { "Fn::If" : [
          "CreateProdResources",
          "c5.xlarge",
          {"Fn::If" : [
            "CreateDevResources",
            "t3.medium",
            "t3.small"
          ]}
        ]}
      }
    },
    "MountPoint" : {
      "Type" : "AWS::EC2::VolumeAttachment",
      "Condition" : "CreateProdResources",
      "Properties" : {
        "InstanceId" : { "Ref" : "EC2Instance" },
        "VolumeId"  : { "Ref" : "NewVolume" },
        "Device" : "/dev/sdh"
      }
    },
    "NewVolume" : {
      "Type" : "AWS::EC2::Volume",
      "Condition" : "CreateProdResources",
      "Properties" : {
        "Size" : "100",
        "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]}
      }
    }
  }
}
```

**Example YAML**  

```
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  EnvType:
    Description: Environment type.
    Default: test
    Type: String
    AllowedValues: [prod, dev, test]
    ConstraintDescription: must specify prod, dev, or test.
Conditions:
  CreateProdResources: !Equals [!Ref EnvType, prod]
  CreateDevResources: !Equals [!Ref EnvType, "dev"]
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-1234567890abcdef0
      InstanceType: !If [CreateProdResources, c5.xlarge, !If [CreateDevResources, t3.medium, t3.small]]    
  MountPoint:
    Type: AWS::EC2::VolumeAttachment
    Condition: CreateProdResources
    Properties:
      InstanceId: !Ref EC2Instance
      VolumeId: !Ref NewVolume
      Device: /dev/sdh
  NewVolume:
    Type: AWS::EC2::Volume
    Condition: CreateProdResources
    Properties:
      Size: 100
      AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
```

**注記**  
条件を使用してリソースを作成するより複雑な例については、「[`Condition` 属性](aws-attribute-condition.md)」トピックを参照してください。

# `Fn::FindInMap`
<a name="intrinsic-function-reference-findinmap"></a>

組み込み関数 `Fn::FindInMap` は、`Mappings` セクションで宣言された 2 つのレベルのマッピングのキーに対応する値を返します。

## 宣言
<a name="w2aac24c25b5"></a>

### JSON
<a name="intrinsic-function-reference-findinmap-syntax.json"></a>

```
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
```

### YAML
<a name="intrinsic-function-reference-findinmap-syntax.yaml"></a>

完全関数名の構文:

```
Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]
```

短縮形の構文:

```
!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
```

**注記**  
短縮形を使用した 2 つの関数の 2 つのインスタンスをネストすることはできません。

## パラメータ
<a name="w2aac24c25b7"></a>

MapName  <a name="MapName"></a>
Mappings セクションで宣言された、キーと値を含むマッピングの論理名。

TopLevelKey  <a name="TopLevelKey"></a>
最上位のキー名。この値は、キーと値のペアのリストです。

SecondLevelKey  <a name="SecondLevelKey"></a>
2 番目のレベルのキー名で、`TopLevelKey` に割り当てられたリストのキーの 1 つに設定されます。

## 戻り値
<a name="w2aac24c25b9"></a>

`SecondLevelKey` に割り当てられた値。

## 例
<a name="intrinsic-function-reference-findinmap-examples"></a>

次の例では、`Fn::FindInMap` 関数を使用する方法を示します。

**Topics**
+ [リージョン固有の値で Fn::FindInMap を使用する](#intrinsic-function-reference-findinmap-region-example)
+ [環境固有の設定に Fn::FindInMap を使用する](#intrinsic-function-reference-findinmap-environment-example)

### リージョン固有の値で Fn::FindInMap を使用する
<a name="intrinsic-function-reference-findinmap-region-example"></a>

次の例は、`AWSInstanceType2Arch` と `AWSRegionArch2AMI` の 2 つのマッピングを含むテンプレートで `Fn::FindInMap` を使用する方法を示しています。また、`t3.micro` と `t4g.nano` のどちらかを選択できる `InstanceType` パラメータも含まれています。デフォルトは `t3.micro` ですが、これはスタックの作成時に上書きできます。

`Fn::FindInMap` は、選択したインスタンスタイプに基づいてアーキテクチャ (`HVM64` または `ARM64`) を最初に決定し、次に現在の AWS リージョン でそのアーキテクチャの正しい AMI ID を検索します。

**注記**  
これらの例に示す AMI ID は、デモンストレーション用のプレースホルダーです。可能な場合は、`Mappings` セクションの代わりに AWS Systems Manager パラメータへの動的参照を使用することを検討してください。使用する AMI が変更されるたびに、すべてのテンプレートが新しい ID で更新されることを回避するには、AWS Systems Manager パラメータを使用してスタックの作成時または更新時に最新の AMI ID を取得します。一般的に使用される AMI の最新バージョンは、Systems Manager のパブリックパラメータとしても利用できます。詳細については、「[動的参照を使用して他のサービスに格納されている値を取得する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)」を参照してください。

#### JSON
<a name="intrinsic-function-reference-findinmap-region-example.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "InstanceType": {
      "Description": "The EC2 instance type",
      "Type": "String",
      "AllowedValues": [
        "t3.micro",
        "t4g.nano"
      ],
      "Default": "t3.micro"
    }
  },
  "Mappings": {
    "AWSInstanceType2Arch": {
      "t3.micro": {
        "Arch": "HVM64"
      },
      "t4g.nano": {
        "Arch": "ARM64"
      }
    },
    "AWSRegionArch2AMI": {
      "us-east-1" : { 
        "HVM64" : "ami-12345678901234567", "ARM64" : "ami-23456789012345678" 
      },
      "us-west-1" : { 
        "HVM64" : "ami-34567890123456789", "ARM64" : "ami-45678901234567890"
      },
      "eu-west-1" : { 
        "HVM64" : "ami-56789012345678901", "ARM64" : "ami-67890123456789012" 
      },
      "ap-southeast-1" : { 
        "HVM64" : "ami-78901234567890123", "ARM64" : "ami-89012345678901234" 
      },
      "ap-northeast-1" : { 
        "HVM64" : "ami-90123456789012345", "ARM64" : "ami-01234567890123456" 
      }
    }
  },
  "Resources" : {
    "MyEC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "InstanceType" : { "Ref": "InstanceType" },
        "ImageId" : {
          "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ]}]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-region-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  InstanceType:
    Description: The EC2 instance type
    Type: String
    AllowedValues:
      - t3.micro
      - t4g.nano
    Default: t3.micro
Mappings: 
  AWSInstanceType2Arch:
    t3.micro:
      Arch: HVM64
    t4g.nano:
      Arch: ARM64
  AWSRegionArch2AMI:
    us-east-1: 
      HVM64: ami-12345678901234567
      ARM64: ami-23456789012345678
    us-west-1: 
      HVM64: ami-34567890123456789
      ARM64: ami-45678901234567890
    eu-west-1: 
      HVM64: ami-56789012345678901
      ARM64: ami-67890123456789012
    ap-southeast-1: 
      HVM64: ami-78901234567890123
      ARM64: ami-89012345678901234
    ap-northeast-1: 
      HVM64: ami-90123456789012345
      ARM64: ami-01234567890123456
Resources: 
  myEC2Instance: 
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref InstanceType
      ImageId:
        Fn::FindInMap:
        - AWSRegionArch2AMI
        - Ref: AWS::Region
        - Fn::FindInMap:
          - AWSInstanceType2Arch
          - Ref: InstanceType
          - Arch
```

### 環境固有の設定に Fn::FindInMap を使用する
<a name="intrinsic-function-reference-findinmap-environment-example"></a>

次の例は、1 つのマッピング `SecurityGroups` を含む `Mappings` セクションを使用して、テンプレートに対して `Fn::FindInMap` を使用する方法を示します。また、環境が `Dev` か `Prod` かを指定できる `EnvironmentType` パラメータも含まれています。デフォルトは `Dev` ですが、スタックの作成時に上書きできます。

`Fn::FindInMap` は、`EnvironmentType` パラメータに基づいて適切な `SecurityGroupIds` を返します。次に、`Fn::Split` はセキュリティグループ ID のカンマ区切り文字列を [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids) に期待される形式であるリストに分割します。

`EnvironmentType` を `Dev` に設定してこのスタックをデプロイする場合、`EC2Instance` の `SecurityGroupIds` は `sg-12345678` になります。`EnvironmentType` を `Prod` に設定すると、`sg-abcdef01` と `sg-ghijkl23` が使用されます。

#### JSON
<a name="intrinsic-function-reference-findinmap-environment-example.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters":{
    "EnvironmentType":{
      "Description":"The environment type (Dev or Prod)",
      "Type":"String",
      "Default":"Dev",
      "AllowedValues":[
        "Dev",
        "Prod"
      ]
    }
  },
  "Mappings":{
    "SecurityGroups":{
      "Dev":{
        "SecurityGroupIds":"sg-12345678"
      },
      "Prod":{
        "SecurityGroupIds":"sg-abcdef01,sg-ghijkl23"
      }
    }
  },
  "Resources":{
    "Ec2Instance":{
      "Type":"AWS::EC2::Instance",
      "Properties":{
        "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}",
        "InstanceType": "t2.micro",
        "SecurityGroupIds":{
          "Fn::Split":[
            ",",
            {
              "Fn::FindInMap":[
                "SecurityGroups",
                {
                  "Ref":"EnvironmentType"
                },
                "SecurityGroupIds"
              ]
            }
          ]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-environment-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EnvironmentType:
    Description: The environment type (Dev or Prod)
    Type: String
    Default: Dev
    AllowedValues:
      - Dev
      - Prod
Mappings:
  SecurityGroups:
    Dev:
      SecurityGroupIds: sg-12345678
    Prod:
      SecurityGroupIds: sg-abcdef01,sg-ghijkl23
Resources:
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}'
      InstanceType: t2.micro
      SecurityGroupIds:
        Fn::Split:
          - ","
          - Fn::FindInMap: [ SecurityGroups, !Ref EnvironmentType, SecurityGroupIds ]
```

## サポートされている関数
<a name="w2aac24c25c13"></a>

`Fn::FindInMap` 関数で以下の関数を使用できます。
+ `Fn::FindInMap`
+ `Ref`

## 関連リソース
<a name="w2aac24c25c15"></a>

`Fn::FindInMap` 関数で他の組み込み関数またはデフォルト値を使用するには、テンプレート内で `AWS::LanguageExtensions` 変換を宣言する必要があります。詳細については、「[`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md)」を参照してください。

これらの関連トピックは、`Fn::FindInMap` 関数を使用するテンプレートを作成する際に役立ちます。
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ 『AWS CloudFormation ユーザーガイド』の「[CloudFormation テンプレートの Mappings 構文](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html)」

# `Fn::ForEach`
<a name="intrinsic-function-reference-foreach"></a>

`Fn::ForEach` 組み込み関数はコレクションとフラグメントを受け取り、コレクションの項目を指定されたフラグメントの識別子に適用します。`Fn::ForEach` は (`Fn::ForEach` 自体など) 他の組み込み関数を含めることができ、`Conditions`、`Outputs`、`Resources` (リソース プロパティを含む) セクション内で使用できます。`AWSTemplateFormatVersion`、`Description`、`Metadata`、`Transform`、`Parameters`、`Mappings`、`Rules`、または `Hooks` の各セクションでは使用できません。

テンプレートで `Fn::ForEach` 組み込み関数を使用する場合は、[`AWS::LanguageExtensions` 変換](transform-aws-languageextensions.md) も使用する必要があります。

`Fn::ForEach` 組み込み関数を使用しても、生成されるテンプレートに適用されるクォータは変更されません。クォータには、テンプレートの最大サイズとテンプレート内の最大リソース数が含まれます。詳細については、『AWS CloudFormation ユーザーガイド』の「[CloudFormation のクォータを理解する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html)」を参照してください。

## 宣言
<a name="intrinsic-function-reference-foreach-declaration"></a>

### JSON
<a name="intrinsic-function-reference-foreach-declaration.json"></a>

```
"Fn::ForEach::LoopLogicalName": [
  "Identifier",
  ["Value1","Value2"], // Collection
  {"OutputKey": {OutputValue}}
]
```

### YAML
<a name="intrinsic-function-reference-foreach-declaration.yaml"></a>

```
'Fn::ForEach::LoopLogicalName':
    - Identifier
    - - Value1 # Collection
      - Value2
    - 'OutputKey':
        OutputValue
```

## パラメータ
<a name="intrinsic-function-reference-foreach-parameters"></a>

*ループ論理名*  
ループの論理 ID。名前はテンプレート内で一意である必要があり、テンプレートの `Resources` セクションのどの論理 ID 値とも競合できません。この名前は変換された出力には含まれません。これは、CloudFormation テンプレート自体の内部参照に使用されます。

*識別子*  
`OutputKey` パラメータおよび `OutputValue` パラメータで置き換えられるプレースホルダーの識別子。`OutputKey` パラメータと `OutputValue` パラメータにある `${Identifier}` または `&{Identifier}` のすべてのインスタンスは、`Collection` パラメータの値に置き換えられます。

*収集*  
反復処理の対象となる値のコレクション。このパラメーターの配列または [`Ref`](intrinsic-function-reference-ref.md) に対する `CommaDelimitedList` の場合があります。`&{Identifier}` を使用すると、英数字以外の文字を `Collection` に渡すことができます。

*出力キー*  
変換されたテンプレートのキー。`${Identifier}` または `&{Identifier}` は `OutputKey` パラメータに含める必要があります。たとえば、テンプレートの `Resources` セクションで `Fn::ForEach` が使用されている場合、これは各リソースの論理 ID です。  
`&{}` 構文では、`OutputKey` パラメータで使用する `Collection` に英数字以外の文字を使用できます。この例については、「[`Fn::ForEach` の `Collection` 内に英数字以外の文字を渡す](intrinsic-function-reference-foreach-example-resource.md#intrinsic-function-reference-foreach-example-non-alphanumeric)」を参照してください。

*出力値*  
`Collection` パラメータの各項目に変換されたテンプレートで複製される値。たとえば、`Fn::ForEach` をテンプレートの `Resources` セクションで使用する場合、これは各リソースを設定するために繰り返されるテンプレートフラグメントです。

## 戻り値
<a name="intrinsic-function-reference-foreach-return-value"></a>

コレクションの項目ごとに 1 回繰り返されるオブジェクト フラグメントを含む展開オブジェクト。フラグメントの識別子はコレクションの項目に置き換えられます。

## サポートされている関数
<a name="intrinsic-function-reference-foreach-nested-functions"></a>

`Fn::ForEach` 内で次の関数を使用できます。
+ 条件関数
  + [`Fn::And`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-and)
  + [`Fn::Equals`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-equals)
  + [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
  + [`Fn::Not`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-not)
  + [`Fn::Or`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-or)
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::Transform`](intrinsic-function-reference-transform.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

## 例
<a name="intrinsic-function-reference-foreach-example-pointer"></a>

`Conditions`、`Outputs`、`Resources` の各セクションの例は、[例](intrinsic-function-reference-foreach-examples.md) に記載されています。

# 例
<a name="intrinsic-function-reference-foreach-examples"></a>

**Topics**
+ [`Resources` セクションの `Fn::ForEach` の例](intrinsic-function-reference-foreach-example-resource.md)
+ [`Outputs` セクションの `Fn::ForEach` の例](intrinsic-function-reference-foreach-example-outputs.md)
+ [`Conditions` セクションの `Fn::ForEach` の例](intrinsic-function-reference-foreach-example-conditions.md)

# `Resources` セクションの `Fn::ForEach` の例
<a name="intrinsic-function-reference-foreach-example-resource"></a>

これらの例は、`Resources` セクションにおける `Fn::ForEach` 組み込み関数の使用を示しています。このセクションの詳細については、『AWS CloudFormation ユーザーガイド』の「[リソース](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html)」を参照してください。

**Topics**
+ [Amazon SNS リソースの複製](#intrinsic-function-reference-foreach-example-replicate-resource)
+ [Amazon DynamoDB リソースの複製](#intrinsic-function-reference-foreach-example-replicate-ddb-resource)
+ [複数リソースを複製する](#intrinsic-function-reference-foreach-example-replicate-multiple-resources)
+ [入れ子になった `Fn::ForEach` ループを使用して複数リソースを複製する](#intrinsic-function-reference-foreach-example-nested-loop-resources)
+ [Amazon EC2 リソースの複製されたプロパティに関するリファレンス](#intrinsic-function-reference-foreach-example-reference-replicated-resource)
+ [Amazon EC2 リソースのプロパティの複製](#intrinsic-function-reference-foreach-example-replicate-resource-properties)
+ [`Fn::ForEach` の `Collection` 内に英数字以外の文字を渡す](#intrinsic-function-reference-foreach-example-non-alphanumeric)

## Amazon SNS リソースの複製
<a name="intrinsic-function-reference-foreach-example-replicate-resource"></a>

このスニペットの例では、`true` に設定された一致する `TopicName` と `FifoTopic` を持つコレクション(`Success`、`Failure`、`Timeout`、`Unknown`)の項目に対応する論理 ID を使用して 4 つの Amazon SNS トピックのリストが返されます。

**注記**  
FIFO トピックと標準トピックの両方を使用する必要があるテンプレートの場合は、`TopicName` の代わりに `DisplayName` プロパティを使用できます。そうすることで、`FifoTopic` が `true` のときに CloudFormation が適切な `.fifo` サフィックスを持つトピック名を自動生成できます。`Properties` セクションで `TopicName` を `DisplayName: !Ref TopicName` に置き換えてください。

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-resource.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Resources": {
        "Fn::ForEach::Topics": [
            "TopicName",
            ["Success", "Failure", "Timeout", "Unknown"],
            {
                "SnsTopic${TopicName}": {
                    "Type": "AWS::SNS::Topic",
                    "Properties": {
                        "TopicName": {"Fn::Sub": "${TopicName}.fifo"},
                        "FifoTopic": true
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Topics':
    - TopicName
    - [Success, Failure, Timeout, Unknown]
    - 'SnsTopic${TopicName}':
        Type: AWS::SNS::Topic
        Properties:
          TopicName: !Sub '${TopicName}.fifo'
          FifoTopic: true
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  SnsTopicSuccess:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Success.fifo
      FifoTopic: true
  SnsTopicFailure:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Failure.fifo
      FifoTopic: true
  SnsTopicTimeout:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Timeout.fifo
      FifoTopic: true
  SnsTopicUnknown:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Unknown.fifo
      FifoTopic: true
```

## Amazon DynamoDB リソースの複製
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource"></a>

このスニペットの例では、`Points` や `Score` などの名前を持つ 4 つの [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-dynamodb-table.html) リソースが作成されます。

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Resources": {
        "Fn::ForEach::Tables": [
            "TableName",
            ["Points", "Score", "Name", "Leaderboard"],
            {
                "DynamoDB${TableName}": {
                    "Type": "AWS::DynamoDB::Table",
                    "Properties": {
                        "TableName": {
                            "Ref": "TableName"
                        },
                        "AttributeDefinitions": [
                            {
                                "AttributeName": "id",
                                "AttributeType": "S"
                            }
                        ],
                        "KeySchema": [
                            {
                                "AttributeName": "id",
                                "KeyType": "HASH"
                            }
                        ],
                        "ProvisionedThroughput": {
                            "ReadCapacityUnits": "5",
                            "WriteCapacityUnits": "5"
                        }
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Tables':
    - TableName
    - [Points, Score, Name, Leaderboard]
    - 'DynamoDB${TableName}':
        Type: AWS::DynamoDB::Table
        Properties:
          TableName: !Ref TableName
          AttributeDefinitions:
            - AttributeName: id
              AttributeType: S
          KeySchema:
            - AttributeName: id
              KeyType: HASH
          ProvisionedThroughput:
            ReadCapacityUnits: '5'
            WriteCapacityUnits: '5'
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  DynamoDBPoints:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Points
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBScore:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Score
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBName:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Name
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBLeaderboard:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Leaderboard
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
```

## 複数リソースを複製する
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources"></a>

この例は、`"{ResourceType}${Identifier}"` という命名規則を使用して [AWS::EC2::NatGateway](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-natgateway.html) と [AWS::EC2::EIP](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-eip.html) の複数のインスタンスを作成します。1 つの `Fn::ForEach` ループで複数のリソースタイプを宣言し、単一の識別子を活用できます。

コレクションにある各要素の固有値は、対応する値を参照するために [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md) 組み込み関数が使用される `Mappings` セクション内で定義されます。`Fn::FindInMap` が対応する識別子を見つけることができない場合、`Condition` プロパティは `!Ref AWS:::NoValue` に解決されるように設定されません。

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Conditions": {
    "TwoNatGateways": {"Fn::Equals": [{"Ref": "AWS::Region"}, "us-east-1"]},
    "ThreeNatGateways": {"Fn::Equals": [{"Ref": "AWS::Region"}, "us-west-2"]}
  },
  "Mappings": {
    "NatGateway": {
      "Condition": {
        "B": "TwoNatGateways",
        "C": "ThreeNatGateways"
      }
    }
  },
  "Resources": {
    "VPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {"CidrBlock": "10.0.0.0/16"}
    },
    "PublicSubnetA": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.1.0/24",
        "AvailabilityZone": {"Fn::Select": [0, {"Fn::GetAZs": ""}]}
      }
    },
    "PublicSubnetB": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.2.0/24",
        "AvailabilityZone": {"Fn::Select": [1, {"Fn::GetAZs": ""}]}
      }
    },
    "PublicSubnetC": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.3.0/24",
        "AvailabilityZone": {"Fn::Select": [2, {"Fn::GetAZs": ""}]}
      }
    },
    "Fn::ForEach::NatGatewayAndEIP": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "NatGateway${Identifier}": {
          "Type": "AWS::EC2::NatGateway",
          "Properties": {
            "AllocationId": {"Fn::GetAtt": [{"Fn::Sub": "NatGatewayAttachment${Identifier}"}, "AllocationId"]},
            "SubnetId": {"Ref": {"Fn::Sub": "PublicSubnet${Identifier}"}}
          },
          "Condition": {"Fn::FindInMap": ["NatGateway", "Condition", {"Ref": "Identifier"}, {"DefaultValue": {"Ref": "AWS::NoValue"}}]}
        },
        "NatGatewayAttachment${Identifier}": {
          "Type": "AWS::EC2::EIP",
          "Properties": {
            "Domain": "vpc"
          },
          "Condition": {"Fn::FindInMap": ["NatGateway", "Condition", {"Ref": "Identifier"}, {"DefaultValue": {"Ref": "AWS::NoValue"}}]}
        }
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Conditions:
  TwoNatGateways: !Equals [!Ref "AWS::Region", "us-east-1"]
  ThreeNatGateways: !Equals [!Ref "AWS::Region", "us-west-2"]
Mappings:
  NatGateway:
    Condition:
      B: TwoNatGateways
      C: ThreeNatGateways
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs ""]
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: !Select [1, !GetAZs ""]
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
      AvailabilityZone: !Select [2, !GetAZs ""]
  Fn::ForEach::NatGatewayAndEIP:
    - Identifier
    - - A
      - B
      - C
    - NatGateway${Identifier}:
        Type: AWS::EC2::NatGateway
        Properties:
          AllocationId: !GetAtt
            - !Sub NatGatewayAttachment${Identifier}
            - AllocationId
          SubnetId: !Ref
            Fn::Sub: PublicSubnet${Identifier}
        Condition: !FindInMap
          - NatGateway
          - Condition
          - !Ref Identifier
          - DefaultValue: !Ref AWS::NoValue
      NatGatewayAttachment${Identifier}:
        Type: AWS::EC2::EIP
        Properties:
          Domain: vpc
        Condition: !FindInMap
          - NatGateway
          - Condition
          - !Ref Identifier
          - DefaultValue: !Ref AWS::NoValue
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Conditions:
  TwoNatGateways: !Equals [!Ref "AWS::Region", "us-east-1"]
  ThreeNatGateways: !Equals [!Ref "AWS::Region", "us-west-2"]
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs ""]
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: !Select [1, !GetAZs ""]
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
      AvailabilityZone: !Select [2, !GetAZs ""]
  NatGatewayA:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentA
        - AllocationId
      SubnetId: !Ref PublicSubnetA
  NatGatewayB:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentB
        - AllocationId
      SubnetId: !Ref PublicSubnetB
    Condition: TwoNatGateways
  NatGatewayC:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentC
        - AllocationId
      SubnetId: !Ref PublicSubnetC
    Condition: ThreeNatGateways
  NatGatewayAttachmentA:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
  NatGatewayAttachmentB:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Condition: TwoNatGateways
  NatGatewayAttachmentC:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Condition: ThreeNatGateways
```

## 入れ子になった `Fn::ForEach` ループを使用して複数リソースを複製する
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources"></a>

この例では、入れ子になった `Fn::ForEach` ループを使用して、3 つのリソース ([AWS::EC2::NetworkAcl](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-natgateway.html)、[AWS::EC2::Subnet](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-subnet.html)、[AWS::EC2::SubnetNetworkAclAssociation](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-subnetnetworkaclassociation.html)) を相互にマッピングします。

### JSON
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Resources": {
    "VPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/16",
        "EnableDnsSupport": "true",
        "EnableDnsHostnames": "true"
      }
    },
    "Fn::ForEach::SubnetResources": [
      "Prefix",
      [
        "Transit",
        "Public"
      ],
      {
        "Nacl${Prefix}Subnet": {
          "Type": "AWS::EC2::NetworkAcl",
          "Properties": {
            "VpcId": {
              "Ref": "VPC"
            }
          }
        },
        "Fn::ForEach::LoopInner": [
          "Suffix",
          [
            "A",
            "B",
            "C"
          ],
          {
            "${Prefix}Subnet${Suffix}": {
              "Type": "AWS::EC2::Subnet",
              "Properties": {
                "VpcId": {
                  "Ref": "VPC"
                }
              }
            },
            "Nacl${Prefix}Subnet${Suffix}Association": {
              "Type": "AWS::EC2::SubnetNetworkAclAssociation",
              "Properties": {
                "SubnetId": {
                  "Ref": {
                    "Fn::Sub": "${Prefix}Subnet${Suffix}"
                  }
                },
                "NetworkAclId": {
                  "Ref": {
                    "Fn::Sub": "Nacl${Prefix}Subnet"
                  }
                }
              }
            }
          }
        ]
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  'Fn::ForEach::SubnetResources':
  - Prefix
  - [Transit, Public]
  - 'Nacl${Prefix}Subnet':
      Type: AWS::EC2::NetworkAcl
      Properties:
        VpcId: !Ref 'VPC'
    'Fn::ForEach::LoopInner':
    - Suffix
    - [A, B, C]
    - '${Prefix}Subnet${Suffix}':
        Type: AWS::EC2::Subnet
        Properties:
          VpcId: !Ref 'VPC'
      'Nacl${Prefix}Subnet${Suffix}Association':
        Type: AWS::EC2::SubnetNetworkAclAssociation
        Properties:
          SubnetId: !Ref
            'Fn::Sub': '${Prefix}Subnet${Suffix}'
          NetworkAclId: !Ref
            'Fn::Sub': 'Nacl${Prefix}Subnet'
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  NaclTransitSubnet:
    Type: AWS::EC2::NetworkAcl
    Properties:
      VpcId: !Ref VPC
  TransitSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetAAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetA
      NetworkAclId: !Ref NaclTransitSubnet
  TransitSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetBAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetB
      NetworkAclId: !Ref NaclTransitSubnet
  TransitSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetCAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetC
      NetworkAclId: !Ref NaclTransitSubnet
  NaclPublicSubnet:
    Type: AWS::EC2::NetworkAcl
    Properties:
      VpcId: !Ref VPC
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetAAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetA
      NetworkAclId: !Ref NaclPublicSubnet
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetBAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetB
      NetworkAclId: !Ref NaclPublicSubnet
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetCAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetC
      NetworkAclId: !Ref NaclPublicSubnet
```

## Amazon EC2 リソースの複製されたプロパティに関するリファレンス
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource"></a>

この例では、`Fn::ForEach` 組み込み関数を使用して複製された [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html) リソースを参照します。

### JSON
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "Instances": {
      "InstanceType": {
        "B": "m5.4xlarge",
        "C": "c5.2xlarge"
      },
      "ImageId": {"A": "ami-id1"}
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "Identifier",
      [
        "A",
        "B",
        "C"
      ],
      {
        "Instance${Identifier}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "InstanceType": {"Fn::FindInMap": ["Instances", "InstanceType", {"Ref": "Identifier"}, {"DefaultValue": "m5.xlarge"}]},
            "ImageId": {"Fn::FindInMap": ["Instances", "ImageId", {"Ref": "Identifier"}, {"DefaultValue": "ami-id-default"}]}
          }
        }
      }
    ]
  },
  "Outputs": {
    "SecondInstanceId": {
      "Description": "Instance Id for InstanceB",
      "Value": {"Ref": "InstanceB"}
    },
    "SecondPrivateIp": {
      "Description": "Private IP for InstanceB",
      "Value": {
        "Fn::GetAtt": [
          "InstanceB",
          "PrivateIp"
        ]
      }
    }
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Instances:
    InstanceType:
      B: m5.4xlarge
      C: c5.2xlarge
    ImageId:
      A: ami-id1
Resources:
  'Fn::ForEach::Instances':
  - Identifier
  - [A, B, C]
  - 'Instance${Identifier}':
      Type: AWS::EC2::Instance
      Properties:
        InstanceType: !FindInMap [Instances, InstanceType, !Ref 'Identifier', {DefaultValue: m5.xlarge}]
        ImageId: !FindInMap [Instances, ImageId, !Ref 'Identifier', {DefaultValue: ami-id-default}]
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref 'InstanceB'
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.xlarge
      ImageId: ami-id1
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.4xlarge
      ImageId: ami-id-default
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: c5.2xlarge
      ImageId: ami-id-default
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

## Amazon EC2 リソースのプロパティの複製
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties"></a>

この例では、`Fn::ForEach` 組み込み関数を使用して `ImageId`、`InstanceType`、`AvailabilityZone` などのプロパティを [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html) リソースに対して繰り返します。

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "InstanceA": {
      "Properties": {
        "ImageId": "ami-id1",
        "InstanceType": "m5.xlarge"
      }
    },
    "InstanceB": {
      "Properties": {
        "ImageId": "ami-id2"
      }
    },
    "InstanceC": {
      "Properties": {
        "ImageId": "ami-id3",
        "InstanceType": "m5.2xlarge",
        "AvailabilityZone": "us-east-1a"
      }
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "InstanceLogicalId",
      [ "InstanceA", "InstanceB", "InstanceC" ],
      {
        "${InstanceLogicalId}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "DisableApiTermination": true,
            "UserData": {
              "Fn::Base64": {
                "Fn::Join": [
                  "",
                  [
                    "#!/bin/bash\n",
                    "yum update -y\n",
                    "yum install -y httpd.x86_64\n",
                    "systemctl start httpd.service\n",
                    "systemctl enable httpd.service\n",
                    "echo \"Hello World from $(hostname -f)\" > /var/www/html/index.html\n"
                  ]
                ]
              }
            },
            "Fn::ForEach::Properties": [
              "PropertyName",
              [ "ImageId", "InstanceType", "AvailabilityZone" ],
              {
                "${PropertyName}": {
                  "Fn::FindInMap": [
                    { "Ref": "InstanceLogicalId" },
                    "Properties",
                    { "Ref": "PropertyName"},
                    {
                      "DefaultValue": { "Ref": "AWS::NoValue" }
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  InstanceA:
    Properties:
      ImageId: ami-id1
      InstanceType: m5.xlarge
  InstanceB:
    Properties:
      ImageId: ami-id2
  InstanceC:
    Properties:
      ImageId: ami-id3
      InstanceType: m5.2xlarge
      AvailabilityZone: us-east-1a
Resources:
  'Fn::ForEach::Instances':
  - InstanceLogicalId
  - [InstanceA, InstanceB, InstanceC]
  - '${InstanceLogicalId}':
      Type: AWS::EC2::Instance
      Properties:
        DisableApiTermination: true
        UserData:
          Fn::Base64: !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
        'Fn::ForEach::Properties':
          - PropertyName
          - [ImageId, InstanceType, AvailabilityZone]
          - '${PropertyName}':
             'Fn::FindInMap':
               - Ref: 'InstanceLogicalId'
               - Properties
               - Ref: 'PropertyName'
               - {DefaultValue: !Ref 'AWS::NoValue'}
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id1
      InstanceType: m5.xlarge
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id2
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id3
      InstanceType: m5.2xlarge
      AvailabilityZone: us-east-1a
```

## `Fn::ForEach` の `Collection` 内に英数字以外の文字を渡す
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric"></a>

この例は `&{}` 構文を使用します。これにより、IP アドレスの英数字以外の文字 (`.` および `/`) を `Collection` 内で渡すことができます。

### JSON
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric-json.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "IpAddresses": {
            "Type": "CommaDelimitedList",
            "Default": "10.0.2.0/24,10.0.3.0/24,10.0.4.0/24"
        }
    },
    "Resources": {
        "VPC": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsSupport": "true",
                "EnableDnsHostnames": "true"
            }
        },
        "Fn::ForEach::Subnets": [
            "CIDR",
            {
                "Ref": "IpAddresses"
            },
            {
                "Subnet&{CIDR}": {
                    "Type": "AWS::EC2::Subnet",
                    "Properties": {
                        "VpcId": {
                            "Ref": "VPC"
                        },
                        "CidrBlock": {
                            "Ref": "CIDR"
                        }
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric-yaml.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  IpAddresses:
    Type: CommaDelimitedList
    Default: '10.0.2.0/24,10.0.3.0/24,10.0.4.0/24'
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  'Fn::ForEach::Subnets':
    - CIDR
    - !Ref IpAddresses
    - 'Subnet&{CIDR}':
        Type: AWS::EC2::Subnet
        Properties:
          VpcId: !Ref VPC
          CidrBlock: !Ref CIDR
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  IpAddresses:
    Type: CommaDelimitedList
    Default: '10.0.2.0/24,10.0.3.0/24,10.0.4.0/24'
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  Subnet1002024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
  Subnet1003024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
  Subnet1004024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.4.0/24
```

# `Outputs` セクションの `Fn::ForEach` の例
<a name="intrinsic-function-reference-foreach-example-outputs"></a>

これらの例は、`Outputs` セクションにおける `Fn::ForEach` 組み込み関数の使用を示しています。このセクションの詳細については、『AWS CloudFormation ユーザーガイド』の「[出力](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html)」を参照してください。

**Topics**
+ [`AWS::S3::Bucket` リソースを複製したリファレンス](#intrinsic-function-reference-foreach-example-replicate-outputs)
+ [`AWS::EC2::Instance` リソースを複製したリファレンス](#intrinsic-function-reference-foreach-example-replicate-conditions)

## `AWS::S3::Bucket` リソースを複製したリファレンス
<a name="intrinsic-function-reference-foreach-example-replicate-outputs"></a>

この例では、`Outputs` セクションで入れ子になった `Fn::ForEach` ループを使用してテンプレートの長さを短くしています。

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-outputs.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Resources": {
    "Fn::ForEach::Buckets": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "S3Bucket${Identifier}": {
          "Type": "AWS::S3::Bucket",
          "Properties": {
            "AccessControl": "PublicRead",
            "MetricsConfigurations": [
              {
                "Id": {"Fn::Sub": "EntireBucket${Identifier}"}
              }
            ],
            "WebsiteConfiguration": {
              "IndexDocument": "index.html",
              "ErrorDocument": "error.html",
              "RoutingRules": [
                {
                  "RoutingRuleCondition": {
                    "HttpErrorCodeReturnedEquals": "404",
                    "KeyPrefixEquals": "out1/"
                  },
                  "RedirectRule": {
                    "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
                    "ReplaceKeyPrefixWith": "report-404/"
                  }
                }
              ]
            }
          },
          "DeletionPolicy": "Retain",
          "UpdateReplacePolicy": "Retain"
        }
      }
    ]
  },
  "Outputs": {
    "Fn::ForEach::BucketOutputs": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "Fn::ForEach::GetAttLoop": [
          "Property",
          [ "Arn", "DomainName", "WebsiteURL" ],
          {
            "S3Bucket${Identifier}${Property}": {
              "Value": {"Fn::GetAtt": [{"Fn::Sub": "S3Bucket${Identifier}"}, {"Ref": "Property"}]}
            }
          }
        ]
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-outputs.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Buckets':
    - Identifier
    - [A, B, C]
    - 'S3Bucket${Identifier}':
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: PublicRead
          MetricsConfigurations:
            - Id: !Sub 'EntireBucket${Identifier}'
          WebsiteConfiguration:
            IndexDocument: index.html
            ErrorDocument: error.html
            RoutingRules:
              - RoutingRuleCondition:
                  HttpErrorCodeReturnedEquals: '404'
                  KeyPrefixEquals: out1/
                RedirectRule:
                  HostName: ec2-11-22-333-44.compute-1.amazonaws.com
                  ReplaceKeyPrefixWith: report-404/
        DeletionPolicy: Retain
        UpdateReplacePolicy: Retain
Outputs:
  'Fn::ForEach::BucketOutputs':
    - Identifier
    - [A, B, C]
    - 'Fn::ForEach::GetAttLoop':
        - Property
        - [Arn, DomainName, WebsiteURL]
        - 'S3Bucket${Identifier}${Property}':
            Value: !GetAtt [!Sub 'S3Bucket${Identifier}', !Ref Property]
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  S3BucketA:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketA
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
  S3BucketB:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketB
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
  S3BucketC:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketC
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
Outputs:
  S3BucketAArn:
    Value: !GetAtt [S3BucketA, Arn]
  S3BucketADomainName:
    Value: !GetAtt [S3BucketA, DomainName]
  S3BucketAWebsiteURL:
    Value: !GetAtt [S3BucketA, WebsiteURL]
  S3BucketBArn:
    Value: !GetAtt [S3BucketB, Arn]
  S3BucketBDomainName:
    Value: !GetAtt [S3BucketB, DomainName]
  S3BucketBWebsiteURL:
    Value: !GetAtt [S3BucketB, WebsiteURL]
  S3BucketCArn:
    Value: !GetAtt [S3BucketC, Arn]
  S3BucketCDomainName:
    Value: !GetAtt [S3BucketC, DomainName]
  S3BucketCWebsiteURL:
    Value: !GetAtt [S3BucketC, WebsiteURL]
```

## `AWS::EC2::Instance` リソースを複製したリファレンス
<a name="intrinsic-function-reference-foreach-example-replicate-conditions"></a>

この例では、生成された論理 ID を使用して `Resources` セクションの複製されたリソースを参照します。

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-conditions.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "Instances": {
      "InstanceType": {
        "B": "m5.4xlarge",
        "C": "c5.2xlarge"
      },
      "ImageId": {"A": "ami-id1"}
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "Instance${Identifier}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "InstanceType": {"Fn::FindInMap": ["Instances", "InstanceType", {"Ref": "Identifier"}, {"DefaultValue": "m5.xlarge"}]},
            "ImageId": {"Fn::FindInMap": ["Instances", "ImageId", {"Ref": "Identifier"}, {"DefaultValue": "ami-id-default"}]}
          }
        }
      }
    ]
  },
  "Outputs": {
    "SecondInstanceId": {
      "Description": "Instance Id for InstanceB",
      "Value": {"Ref": "InstanceB"}
    },
    "SecondPrivateIp": {
      "Description": "Private IP for InstanceB",
      "Value": {
        "Fn::GetAtt": [
          "InstanceB",
          "PrivateIp"
        ]
      }
    }
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-conditions.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Instances:
    InstanceType:
      B: m5.4xlarge
      C: c5.2xlarge
    ImageId:
      A: ami-id1
Resources:
  'Fn::ForEach::Instances':
    - Identifier
    - [A, B, C]
    - 'Instance${Identifier}':
        Type: AWS::EC2::Instance
        Properties:
          InstanceType: !FindInMap [Instances, InstanceType, !Ref Identifier, DefaultValue: m5.xlarge]
          ImageId: !FindInMap [Instances, ImageId, !Ref Identifier, DefaultValue: ami-id-default]
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.xlarge
      ImageId: ami-id1
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.4xlarge
      ImageId: ami-id-default
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: c5.2xlarge
      ImageId: ami-id-default
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

# `Conditions` セクションの `Fn::ForEach` の例
<a name="intrinsic-function-reference-foreach-example-conditions"></a>

これらの例は、`Conditions` セクションにおける `Fn::ForEach` 組み込み関数の使用を示しています。このセクションの詳細については、『AWS CloudFormation ユーザーガイド』の「[条件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html)」を参照してください。

**重要**  
`Conditions` は、リストの 2 番目またはそれより後のプロパティである必要があります。`Conditions` がの `Fn::ForEach` のテンプレートフラグメントパラメータにリストされている最初のプロパティの場合、スタックの作成は失敗します。

```
Resources:
  'Fn::ForEach::Topics':
    - LogicalId
    - !Ref TopicList
    - '${LogicalId}':
        Condition: !Sub 'TopicCondition${LogicalId}'
        Type: AWS::SNS::Topic
        Properties:
          TopicName: !Sub 'My${LogicalId}'
```

スタックの作成を正常に行うには、`Conditions` を 2 番目のキーとして追加するか、後で追加する必要があります。

```
Resources:
  'Fn::ForEach::Topics':
    - LogicalId
    - !Ref TopicList
    - '${LogicalId}':
        Type: AWS::SNS::Topic
        Condition: !Sub 'TopicCondition${LogicalId}'
        Properties:
          TopicName: !Sub 'My${LogicalId}'
```

**Topics**
+ [単一条件の複製](#intrinsic-function-reference-foreach-example-replicated-single-condition)

## 単一条件の複製
<a name="intrinsic-function-reference-foreach-example-replicated-single-condition"></a>

この例では、`Conditions` セクションの `Fn::ForEach` 組み込み関数を使用して異なるプロパティを持つ複数の類似条件を複製します。

### JSON
<a name="intrinsic-function-reference-foreach-example-conditions.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "ParamA": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamB": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamC": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamD": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        }
    },
    "Conditions": {
        "Fn::ForEach::CheckTrue": [
            "Identifier",
            ["A", "B", "C", "D"],
            {
                "IsParam${Identifier}Enabled": {
                    "Fn::Equals": [
                        {"Ref": {"Fn::Sub": "Param${Identifier}"}},
                        "true"
                    ]
                }
            }
        ]
    },
    "Resources": {
        "WaitConditionHandle": {
            "Type": "AWS::CloudFormation::WaitConditionHandle"
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-conditions.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  ParamA:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamB:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamC:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamD:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
Conditions:
  'Fn::ForEach::CheckTrue':
    - Identifier
    - [A, B, C, D]
    - 'IsParam${Identifier}Enabled': !Equals 
        - !Ref 
          'Fn::Sub': 'Param${Identifier}'
        - 'true'
Resources:
  WaitConditionHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

変換されたテンプレートは次のテンプレートと同等です。

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  ParamA:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamB:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamC:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamD:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
Conditions:
  IsParamAEnabled: !Equals 
    - !Ref ParamA
    - 'true'
  IsParamBEnabled: !Equals 
    - !Ref ParamB
    - 'true'
  IsParamCEnabled: !Equals 
    - !Ref ParamC
    - 'true'
  IsParamDEnabled: !Equals 
    - !Ref ParamD
    - 'true'
Resources:
  WaitConditionHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

# `Fn::GetAtt`
<a name="intrinsic-function-reference-getatt"></a>

`Fn::GetAtt` 組み込み関数は、テンプレートのリソースから属性の値を返します。

## 宣言
<a name="getatt-declaration"></a>

### JSON
<a name="intrinsic-function-reference-getatt-syntax.json"></a>

```
{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
```

### YAML
<a name="intrinsic-function-reference-getatt-syntax.yaml"></a>

完全関数名の構文:

```
Fn::GetAtt: [ logicalNameOfResource, attributeName ]
```

短縮形の構文:

```
!GetAtt logicalNameOfResource.attributeName
```

## パラメータ
<a name="getatt-parameters"></a>

`logicalNameOfResource`  
必要な属性を含むリソースの論理名 (*論理 ID* とも呼ばれます)。

`attributeName`  
必要としている値のある、リソース固有の属性の名前です。各リソースタイプで使用できる属性の詳細については、リソースの参照ページに説明されています。

## 戻り値
<a name="intrinsic-function-reference-getatt-return"></a>

属性の値です。リソースの `GetAtt` 戻り値の詳細については、「[リソースとプロパティのリファレンス](aws-template-resource-type-ref.md)」のリソースのドキュメントを参照してください。

## 例
<a name="intrinsic-function-reference-getatt-examples"></a>

### 属性値を返す
<a name="intrinsic-function-reference-getatt-example"></a>

次の例では、論理名 `myELB` を持ったロードバランサーの DNS 名を含む文字列が返されます。

#### JSON
<a name="intrinsic-function-reference-getatt-example.json"></a>

```
"Fn::GetAtt" : [ "myELB" , "DNSName" ]
```

#### YAML
<a name="intrinsic-function-reference-getatt-example.yaml"></a>

```
!GetAtt myELB.DNSName
```

#### 複数の属性値を返す
<a name="intrinsic-function-reference-getatt-example2"></a>

次の例では、`myELB` という論理名のロードバランサーの `SourceSecurityGroup.OwnerAlias` および `SourceSecurityGroup.GroupName` が返されます。

##### JSON
<a name="intrinsic-function-reference-getatt-example2.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "myELB": {
            "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
            "Properties": {
                "AvailabilityZones": [
                    "eu-west-1a"
                ],
                "Listeners": [
                    {
                        "LoadBalancerPort": "80",
                        "InstancePort": "80",
                        "Protocol": "HTTP"
                    }
                ]
            }
        },
        "myELBIngressGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "ELB ingress group",
                "SecurityGroupIngress": [
                    {
                        "IpProtocol": "tcp",
                        "FromPort": 80,
                        "ToPort": 80,
                        "SourceSecurityGroupOwnerId": {
                            "Fn::GetAtt": [
                                "myELB",
                                "SourceSecurityGroup.OwnerAlias"
                            ]
                        },
                        "SourceSecurityGroupName": {
                            "Fn::GetAtt": [
                                "myELB",
                                "SourceSecurityGroup.GroupName"
                            ]
                        }
                    }
                ]
            }
        }
    }
}
```

##### YAML
<a name="intrinsic-function-reference-getatt-example2.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  myELB:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      AvailabilityZones:
        - eu-west-1a
      Listeners:
        - LoadBalancerPort: '80'
          InstancePort: '80'
          Protocol: HTTP
  myELBIngressGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ELB ingress group
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          SourceSecurityGroupOwnerId: !GetAtt myELB.SourceSecurityGroup.OwnerAlias
          SourceSecurityGroupName: !GetAtt myELB.SourceSecurityGroup.GroupName
```

#### `Fn::GetAtt` 関数内の `Fn::Sub` を使用する
<a name="intrinsic-function-reference-getatt-foreach"></a>

**注記**  
`AWS::LanguageExtensions` 変換を使用すると、`Fn::GetAtt` を他の組み込み関数と組み合わせて使用できます。サポートされている関数については、「[サポートされている関数](#getatt-supported-functions)」を参照してください。

次の例では、テンプレートの長さと冗長性を減らすため、テンプレートの `Outputs` セクションで [`Fn::ForEach`](intrinsic-function-reference-foreach.md) と組み合わせて `Fn::GetAtt` を [`Fn::Sub`](intrinsic-function-reference-sub.md) と使用する方法が示されます。`Fn::GetAtt` 内で `Fn::Sub` を使用すると、`Fn::ForEach` 呼び出しが繰り返されるたびに異なるバケットを参照する組み込み関数を 1 つテンプレートに含めることができます。

##### JSON
<a name="intrinsic-function-reference-getatt-foreach.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Mappings": {
        "Buckets": {
            "Properties": {
                "Identifiers": ["A", "B", "C"]
            }
        }
    },
    "Resources": {
        "Fn::ForEach::Buckets": [
            "Identifier",
            {"Fn::FindInMap": ["Buckets", "Properties", "Identifiers"]},
            {
                "S3Bucket${Identifier}": {
                    "Type": "AWS::S3::Bucket",
                    "Properties": {
                        "AccessControl": "PublicRead",
                        "MetricsConfigurations": [
                            {
                                "Id": {"Fn::Sub": "EntireBucket${Identifier}"}
                            }
                        ],
                        "WebsiteConfiguration": {
                            "IndexDocument": "index.html",
                            "ErrorDocument": "error.html",
                            "RoutingRules": [
                                {
                                    "RoutingRuleCondition": {
                                        "HttpErrorCodeReturnedEquals": "404",
                                        "KeyPrefixEquals": "out1/"
                                    },
                                    "RedirectRule": {
                                        "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
                                        "ReplaceKeyPrefixWith": "report-404/"
                                    }
                                }
                            ]
                        }
                    },
                    "DeletionPolicy": "Retain",
                    "UpdateReplacePolicy": "Retain"
                }
            }
        ]
    },
    "Outputs": {
        "Fn::ForEach::BucketOutputs": [
            "Identifier",
            {"Fn::FindInMap": ["Buckets", "Properties", "Identifiers"]},
            {
                "Fn::ForEach::GetAttLoop": [
                    "Property",
                    ["Arn", "DomainName", "WebsiteURL"],
                    {
                        "S3Bucket${Identifier}${Property}": {
                            "Value": {
                                "Fn::GetAtt": [{"Fn::Sub": "S3Bucket${Identifier}"}, {"Ref": "Property"}]
                            }
                        }
                    }
                ]
            }
        ]
    }
}
```

##### YAML
<a name="intrinsic-function-reference-getatt-foreach.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Buckets:
    Properties:
      Identifiers:
        - A
        - B
        - C
Resources:
  'Fn::ForEach::Buckets':
    - Identifier
    - Fn::FindInMap: 
      - Buckets
      - Properties
      - Identifiers
    - 'S3Bucket${Identifier}':
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: PublicRead
          MetricsConfigurations:
            - Id: 
                Fn::Sub: 'EntireBucket${Identifier}'
          WebsiteConfiguration:
            IndexDocument: index.html
            ErrorDocument: error.html
            RoutingRules:
              - RoutingRuleCondition:
                  HttpErrorCodeReturnedEquals: '404'
                  KeyPrefixEquals: out1/
                RedirectRule:
                  HostName: ec2-11-22-333-44.compute-1.amazonaws.com
                  ReplaceKeyPrefixWith: report-404/
        DeletionPolicy: Retain
        UpdateReplacePolicy: Retain
Outputs:
  'Fn::ForEach::BucketOutputs':
    - Identifier
    - Fn::FindInMap:
      - Buckets
      - Properties
      - Identifiers
    - 'Fn::ForEach::GetAttLoop':
        - Property
        - - Arn
          - DomainName
          - WebsiteURL
        - 'S3Bucket${Identifier}${Property}':
            Value: !GetAtt 
              - !Sub 'S3Bucket${Identifier}'
              - !Ref Property
```

## サポートされている関数
<a name="getatt-supported-functions"></a>

[AWS::LanguageExtensions 変換](transform-aws-languageextensions.md) を使用するとき、`Fn::GetAtt` 関数内で次の関数を使用できます。これは `Fn::GetAtt` 論理リソース名でも `Fn::GetAtt` 属性名でも同じです。
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

`AWS::LanguageExtensions` 変換を使用しないとき
+ `Fn::GetAtt` 属性名は [`Ref`](intrinsic-function-reference-ref.md) 関数のみを使用できます。
+ `Fn::GetAtt` 論理リソース名は関数を使用できません。リソースの論理 ID である文字列を指定する必要があります。

# `Fn::GetAZs`
<a name="intrinsic-function-reference-getavailabilityzones"></a>

組み込み関数 `Fn::GetAZs` は、指定したリージョンのアベイラビリティーゾーンをアルファベット順にリストした配列を返します。アベイラビリティーゾーンへのアクセス権は顧客ごとに異なります。テンプレート作成者は、組み込み関数 `Fn::GetAZs` を使用することで、呼び出し元のユーザーのアクセス権にうまく適応するテンプレートを作成することができます。こうすることで、特定のリージョンのすべてのアベイラビリティーゾーンをハードコーディングせずに済みます。

**重要**  
デフォルト サブネットがあるアベイラビリティーゾーンがない場合を除き、`Fn::GetAZs` 関数はデフォルト サブネットがあるアベイラビリティーゾーンのみを返します。その場合、すべてのアベイラビリティーゾーンが返されます。  
`describe-availability-zones` AWS CLI コマンドからのレスポンスと同様に、`Fn::GetAZs` 関数からの結果の順序は保証されるわけではなく、新しいアベイラビリティーゾーンが追加されたときに変更される可能性があります。

IAM アクセス許可

`Fn::GetAZs` 関数を使用するために必要なアクセス権限は、Amazon EC2 インスタンスを起動しているプラットフォームによって異なります。両方のプラットフォームで、Amazon EC2 `DescribeAvailabilityZones` および `DescribeAccountAttributes` アクションのアクセス権限が必要です。また、EC2-VPC では、Amazon EC2 `DescribeSubnets` アクションのアクセス権限も必要です。

## 宣言
<a name="intrinsic-function-reference-getazs-declaration"></a>

### JSON
<a name="intrinsic-function-reference-getazs-syntax.json"></a>

```
{ "Fn::GetAZs" : "リージョン" }
```

### YAML
<a name="intrinsic-function-reference-getazs-syntax.yaml"></a>

完全関数名の構文:

```
Fn::GetAZs: リージョン
```

短縮形の構文:

```
!GetAZs リージョン
```

## パラメータ
<a name="intrinsic-function-reference-getazs-parameters"></a>

リージョン  <a name="region"></a>
アベイラビリティーゾーンの取得対象となるリージョンの名前。  
スタックの作成先となるリージョンは `AWS::Region` 擬似パラメータを使用して指定できます。空の文字列を指定した場合、`AWS::Region` を指定したと見なされます。

## 戻り値
<a name="intrinsic-function-reference-getazs-return-value"></a>

リージョンのアベイラビリティーゾーンのリスト。

## 例
<a name="intrinsic-function-reference-getazs-examples"></a>

### リージョンを評価する
<a name="intrinsic-function-reference-getazs-examples-evaluate-region"></a>

これらの例では、スタックが `us-east-1` リージョンで作成されたものと見なされ、CloudFormation により `Fn::GetAZs` は、次の配列として評価されます。

`[ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e" ]`

#### JSON
<a name="intrinsic-function-reference-getazs-example1.json"></a>

```
1. { "Fn::GetAZs" : "" }
2. { "Fn::GetAZs" : { "Ref" : "AWS::Region" } }
3. { "Fn::GetAZs" : "us-east-1" }
```

#### YAML
<a name="intrinsic-function-reference-getazs-example1.yaml"></a>

```
1. Fn::GetAZs: ""
2. Fn::GetAZs:
3.   Ref: "AWS::Region"
4. Fn::GetAZs: us-east-1
```

 

### サブネットのアベイラビリティーゾーンの指定
<a name="intrinsic-function-reference-getazs-examples-subnet-az"></a>

次の例では、`Fn::GetAZs` を使用してサブネットのアベイラビリティーゾーンを指定します。

#### JSON
<a name="intrinsic-function-reference-getazs-example.json"></a>

```
"mySubnet" : {
  "Type" : "AWS::EC2::Subnet",
  "Properties" : {
    "VpcId" : { 
      "Ref" : "VPC"   
    },
    "CidrBlock" : "10.0.0.0/24",
    "AvailabilityZone" : {
      "Fn::Select" : [ 
        0, 
        { 
          "Fn::GetAZs" : "" 
        } 
      ]
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getazs-example.yaml"></a>

```
mySubnet: 
  Type: AWS::EC2::Subnet
  Properties: 
    VpcId: 
      !Ref VPC
    CidrBlock: 10.0.0.0/24
    AvailabilityZone: 
      Fn::Select: 
        - 0
        - Fn::GetAZs: ""
```

 

### ネストされた関数と短い形式の YAML
<a name="intrinsic-function-reference-getazs-examples-nested-functions"></a>

次の例では、ネストされた組み込み関数と短い形式の YAML を使用して有効なパターンを示します。短い形式の関数を連続してネストすることはできないため、`!GetAZs !Ref` のようなパターンは無効です。

#### YAML
<a name="intrinsic-function-reference-getavailabilityzones-example3.yaml"></a>

```
1. AvailabilityZone: !Select
2.   - 0
3.   - !GetAZs
4.     Ref: 'AWS::Region'
```

#### YAML
<a name="intrinsic-function-reference-getavailabilityzones-example4.yaml"></a>

```
1. AvailabilityZone: !Select
2.   - 0
3.   - Fn::GetAZs: !Ref 'AWS::Region'
```

## サポートされている関数
<a name="intrinsic-function-reference-getazs-supported-functions"></a>

`Fn::GetAZs` 関数で `Ref` 関数を使用できます。

# `Fn::ImportValue`
<a name="intrinsic-function-reference-importvalue"></a>

`Fn::ImportValue` 組み込み関数は、別のスタックによってエクスポートされた出力の値を返します。この関数は通常、クロススタック参照を作成するために使用されます。詳細については、『AWS CloudFormation ユーザーガイド』の「[チュートリアル: 別の CloudFormation スタックのリソース出力を参照する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html)」を参照してください。

次のサンプルテンプレートスニペットでは、スタック A は VPC セキュリティグループ値をエクスポートし、スタック B はそれをインポートします。

**注記**  
クロススタック参照には以下の制限があります。  
AWS アカウント ごとに、`Export` 名がリージョン内で一意である必要があります。
リージョン間でクロススタック参照は作成できません。組み込み関数 `Fn::ImportValue` を使用すると、同じリージョン内にエクスポートされた値のみをインポートできます。
出力の場合、`Export` の `Name` プロパティの値は、リソースに依存する `Ref` または `GetAtt` の関数を使用できません。  
同様に、`ImportValue` 関数にリソースに依存する `Ref` または `GetAtt` 関数を含めることはできません。
別のスタックが出力値をインポート後、出力値をエクスポートしているスタックを削除したり、エクスポートされた出力値を変更することはできません。エクスポートしているスタックを削除したり出力値を変更する前に、インポートをすべて削除する必要があります。

## JSON
<a name="intrinsic-function-reference-importvalue-export.json"></a>

スタック A エクスポート

```
"Outputs" : {
  "PublicSubnet" : {
    "Description" : "The subnet ID to use for public web servers",
    "Value" :  { "Ref" : "PublicSubnet" },
    "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SubnetID" }}
  },
  "WebServerSecurityGroup" : {
    "Description" : "The security group ID to use for public web servers",
    "Value" :  { "Fn::GetAtt" : ["WebServerSecurityGroup", "GroupId"] },
    "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SecurityGroupID" }}
  }
}
```

## YAML
<a name="intrinsic-function-reference-importvalue-export.yaml"></a>

スタック A エクスポート

```
Outputs:
  PublicSubnet:
    Description: The subnet ID to use for public web servers
    Value:
      Ref: PublicSubnet
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SubnetID'
  WebServerSecurityGroup:
    Description: The security group ID to use for public web servers
    Value:
      'Fn::GetAtt':
        - WebServerSecurityGroup
        - GroupId
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SecurityGroupID'
```

## JSON
<a name="intrinsic-function-reference-importvalue-import.json"></a>

スタック B のインポート

```
"Resources" : {
  "WebServerInstance" : {
    "Type" : "AWS::EC2::Instance",
    "Properties" : {
      "InstanceType" : "t2.micro",
      "ImageId" : "ami-a1b23456",
      "NetworkInterfaces" : [{
        "GroupSet" : [{"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SecurityGroupID"}}],
        "AssociatePublicIpAddress" : "true",
        "DeviceIndex" : "0",
        "DeleteOnTermination" : "true",
        "SubnetId" : {"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SubnetID"}}
      }]
    }
  }
}
```

## YAML
<a name="intrinsic-function-reference-importvalue-import.yaml"></a>

スタック B のインポート

```
Resources:
  WebServerInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-a1b23456
      NetworkInterfaces:
        - GroupSet:
            - Fn::ImportValue: 
              'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID'
          AssociatePublicIpAddress: 'true'
          DeviceIndex: '0'
          DeleteOnTermination: 'true'
          SubnetId: Fn::ImportValue: 
            'Fn::Sub': '${NetworkStackNameParameter}-SubnetID'
```

## 宣言
<a name="w2aac24c43c11"></a>

### JSON
<a name="intrinsic-function-reference-importvalue-syntax.json"></a>

```
{ "Fn::ImportValue" : sharedValueToImport }
```

### YAML
<a name="intrinsic-function-reference-importvalue-syntax.yaml"></a>

完全な関数名を使用できます。

```
Fn::ImportValue: sharedValueToImport
```

または、短縮形も使用できます。

```
!ImportValue sharedValueToImport
```

**重要**  
`!Sub` の短縮形が含まれる場合、`!ImportValue` の短縮形は使用できません。  

```
# do not use
!ImportValue
  !Sub '${NetworkStack}-SubnetID'
```
代わりに、完全な関数名を使用する必要があります。次に例を示します。  

```
Fn::ImportValue:
  !Sub "${NetworkStack}-SubnetID"
```

## パラメータ
<a name="w2aac24c43c13"></a>

sharedValueToImport  
インポートするスタックの出力値。

## 戻り値
<a name="w2aac24c43c15"></a>

スタックの出力値。

## 例
<a name="w2aac24c43c17"></a>

### JSON
<a name="intrinsic-function-reference-importvalue-example.json"></a>

```
{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }
```

### YAML
<a name="intrinsic-function-reference-importvalue-example.yaml"></a>

```
Fn::ImportValue:
  !Sub "${NetworkStackName}-SecurityGroupID"
```

## サポートされている関数
<a name="w2aac24c43c19"></a>

`Fn::ImportValue` 関数で以下の関数を使用できます。これらの関数の値はリソースに依存することはできません。
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Join`
<a name="intrinsic-function-reference-join"></a>

組み込み関数 `Fn::Join` は、一連の値を特定の区切り文字で区切って 1 つの値に追加します。区切り文字が空の文字列の場合、一連の値は区切り文字を使用することなく連結されます。

## 宣言
<a name="w2aac24c48b5"></a>

### JSON
<a name="intrinsic-function-reference-join-syntax.json"></a>

```
{ "Fn::Join" : [ "delimiter", [ comma-delimited list of values ] ] }
```

### YAML
<a name="intrinsic-function-reference-join-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Join: [ delimiter, [ comma-delimited list of values ] ]
```

短縮形の構文:

```
!Join [ delimiter, [ comma-delimited list of values ] ]
```

## パラメータ
<a name="intrinsic-function-reference-join-parameters"></a>

delimiter  
値を区切る区切り文字を指定する値。区切り文字は値の間にのみ挿入されます。これは最後の値を終了しません。

ListOfValues  
結合する値のリスト。

## 戻り値
<a name="intrinsic-function-reference-join-returnvalues"></a>

結合された文字列。

## 例
<a name="intrinsic-function-reference-join-examples"></a>

### シンプルな文字列配列を結合する
<a name="intrinsic-function-reference-join-example1"></a>

次の例は、`"a:b:c"` を返します。

#### JSON
<a name="intrinsic-function-reference-join-example1.json"></a>

```
"Fn::Join" : [ ":", [ "a", "b", "c" ] ]
```

#### YAML
<a name="intrinsic-function-reference-join-example1.yaml"></a>

```
!Join [ ":", [ a, b, c ] ]
```

### パラメータ付きの Ref 関数を使用した結合
<a name="intrinsic-function-reference-join-example2"></a>

次の例では、`Fn::Join` を使用して文字列値を作成しています。これは、`Ref` パラメータと `AWS::Partition` 擬似パラメータで `AWS::AccountId` 関数を使用します。

#### JSON
<a name="intrinsic-function-reference-join-example2.json"></a>

```
{
  "Fn::Join": [
    "", [
      "arn:",
      {
        "Ref": "AWS::Partition"
      },
      ":s3:::elasticbeanstalk-*-",
      {
        "Ref": "AWS::AccountId"
      }
    ]
  ]
}
```

#### YAML
<a name="intrinsic-function-reference-join-example2.yaml"></a>

```
!Join
  - ''
  - - 'arn:'
    - !Ref AWS::Partition
    - ':s3:::elasticbeanstalk-*-'
    - !Ref AWS::AccountId
```

**注記**  
同様の機能の [`Fn::Sub`](intrinsic-function-reference-sub.md) 関数も参照してください。

## サポートされている関数
<a name="intrinsic-function-reference-join-supportedfunctions"></a>

`Fn::Join` 区切り記号には、関数を使用できません。文字列値を指定する必要があります。

`Fn::Join` の値リストには、以下の機能を使用できます。
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Split`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Length`
<a name="intrinsic-function-reference-length"></a>

組み込み関数 `Fn::Length` は、配列内の要素数を返すか、配列を返す組み込み関数を返します。

**重要**  
`Fn::Length` 組み込み関数を使用するには、[`AWS::LanguageExtensions` 変換](transform-aws-languageextensions.md) を使用する必要があります。

## 宣言
<a name="length-declaration"></a>

### JSON
<a name="intrinsic-function-reference-length-syntax.json"></a>

```
{ "Fn::Length" : IntrinsicFunction }
```

```
{ "Fn::Length" : Array }
```

### YAML
<a name="intrinsic-function-reference-length-syntax.yaml"></a>

```
Fn::Length : IntrinsicFunction
```

```
Fn::Length : Array
```

## パラメータ
<a name="length-parameters"></a>

`IntrinsicFunction`  
複数の要素を返す配列を返す組み込み関数。

`Array`  
要素数を返す配列。

## 戻り値
<a name="intrinsic-function-reference-length-return"></a>

配列を返す組み込み関数、または組み込み関数に渡された配列内の要素数。

## 例
<a name="intrinsic-function-reference-length-examples"></a>

### 配列を返す組み込み関数の要素数を返す
<a name="intrinsic-function-reference-length-example-subsection"></a>

このサンプルスニペットは、配列を返す組み込み関数の要素数を返します。この関数は 3 を返します。

#### JSON
<a name="intrinsic-function-reference-length-example.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::Length" : {
            "Fn::Split": ["|", "a|b|c"]
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-legnth-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    !Split ["|", "a|b|c"]
#...
```

### リストパラメータ型を参照する Ref 組み込み関数の要素数を返す
<a name="intrinsic-function-reference-length-example2"></a>

このサンプルスニペットは、リストパラメータ型を参照する `Ref` 組み込み関数内の要素数を返します。`ListParameter` という名前の付いたパラメータが 3 つの要素からなるリストである場合は、関数は 3 を返します。

#### JSON
<a name="intrinsic-function-reference-length-example2.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::Length": {
            "Ref": "ListParameter"
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-legnth-example2.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    !Ref ListParameter
#...
```

### 配列内の要素数を返す
<a name="intrinsic-function-reference-length-example3"></a>

このサンプルスニペットは、組み込み関数に渡された配列内の要素数を返します。この関数は 3 を返します。

#### JSON
<a name="intrinsic-function-reference-length-example3.json"></a>

```
 1. {
 2. //...
 3.     "Transform": "AWS::LanguageExtensions"
 4.     //...
 5.         "Fn::Length": [
 6.             1,
 7.             {"Ref": "ParameterName"}, 
 8.             3
 9.         ]
10. //...
11. }
```

#### YAML
<a name="intrinsic-function-reference-legnth-example3.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    - 1
    - !Ref ParameterName
    - 3
#...
```

## サポートされている関数
<a name="length-supported-functions"></a>

`Fn::Length` 組み込み関数または配列の中で、次の関数を使用できます。
+ `Condition Functions`
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::Join`
+ `Fn::Length`
+ `Fn::Select`
+ `Fn::Split`
+ `Fn::Sub`
+ `Fn::ToJsonString`
+ `Ref`

# `Fn::Select`
<a name="intrinsic-function-reference-select"></a>

組み込み関数 `Fn::Select` は、インデックスによってオブジェクトのリストから 1 つのオブジェクトを返します。

**重要**  
`Fn::Select` では、null 値のチェックや、インデックスが配列の範囲外であるかどうかのチェックは行われません。どちらの条件でもスタックエラーが発生するため、有効なインデックスを選択し、リストに null 以外の値が含まれるようにする必要があります。

## 宣言
<a name="w2aac24c58b7"></a>

### JSON
<a name="intrinsic-function-reference-select-syntax.json"></a>

```
{ "Fn::Select" : [ index, listOfObjects ] }
```

### YAML
<a name="intrinsic-function-reference-select-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Select: [ index, listOfObjects ] 
```

短縮形の構文:

```
!Select [ index, listOfObjects ]
```

## パラメータ
<a name="w2aac24c58b9"></a>

index  
取得するオブジェクトのインデックスです。これは、ゼロから N-1 の値である必要があります。N は、配列内の要素の数を表します。

listOfObjects  
選択するオブジェクトが含まれているリストです。このリストは null であってはならず、null エントリを含めることもできません。

## 戻り値
<a name="w2aac24c58c11"></a>

選択されたオブジェクトです。

## 例
<a name="w2aac24c58c13"></a>

### 基本的な の例
<a name="w2aac24c58c13b3"></a>

次の例は、`"grapes"` を返します。

#### JSON
<a name="intrinsic-function-reference-select-example0.json"></a>

```
{ "Fn::Select" : [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ] }
```

#### YAML
<a name="intrinsic-function-reference-select-example0.yaml"></a>

```
!Select [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ]
```

 

### カンマ区切りリストのパラメータ型
<a name="w2aac24c58c13b5"></a>

`Fn::Select` を使用して、`CommaDelimitedList` パラメーターからオブジェクトを選択することもできます。`CommaDelimitedList` パラメーターは、関連するパラメーターの値を結合するために使用できます。そうすることで、テンプレート内のパラメーターの総数を減らすことができます。たとえば、次のパラメーターは、3 つの CIDR ブロックのカンマ区切りリストを指定します。

#### JSON
<a name="intrinsic-function-reference-select-example1.json"></a>

```
"Parameters" : {
  "DbSubnetIpBlocks": {
    "Description": "Comma-delimited list of three CIDR blocks",
    "Type": "CommaDelimitedList",
      "Default": "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-select-example1.yaml"></a>

```
Parameters: 
  DbSubnetIpBlocks: 
    Description: "Comma-delimited list of three CIDR blocks"
    Type: CommaDelimitedList
    Default: "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
```

3 つの CIDR ブロックのうちの 1 つを指定するには、次のサンプルスニペットで示されているように、同じテンプレートの Resources セクションで `Fn::Select` を使用します。

#### JSON
<a name="intrinsic-function-reference-select-example2.json"></a>

```
"Subnet0": {
  "Type": "AWS::EC2::Subnet",
    "Properties": {
      "VpcId": { "Ref": "VPC" },
      "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "DbSubnetIpBlocks"} ] }
    }
}
```

#### YAML
<a name="intrinsic-function-reference-select-example2.yaml"></a>

```
Subnet0: 
  Type: AWS::EC2::Subnet
  Properties: 
    VpcId: !Ref VPC
    CidrBlock: !Select [ 0, !Ref DbSubnetIpBlocks ]
```

 

### ネストされた関数と短い形式の YAML
<a name="w2aac24c58c13b7"></a>

次の例では、ネストされた組み込み関数と `!Select` の短い形式を使用して有効なパターンを示します。短い形式の関数を連続してネストすることはできないため、`!GetAZs !Ref` のようなパターンは無効です。

#### YAML
<a name="intrinsic-function-reference-select-example3.yaml"></a>

```
AvailabilityZone: !Select 
  - 0
  - !GetAZs 
    Ref: 'AWS::Region'
```

#### YAML
<a name="intrinsic-function-reference-select-example4.yaml"></a>

```
AvailabilityZone: !Select 
  - 0
  - Fn::GetAZs: !Ref 'AWS::Region'
```

## サポートされている関数
<a name="w2aac24c58c15"></a>

`Fn::Select` インデックス値では、`Ref` 関数と `Fn::FindInMap` 関数を使用できます。

オブジェクトの `Fn::Select` リストでは、次の関数を使用できます。
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Split`
+ `Ref`

# `Fn::Split`
<a name="intrinsic-function-reference-split"></a>

文字列を文字列値のリストに分割し、結果の文字列のリストから要素を選択できるようにするには、`Fn::Split` 組み込み関数を使用します。`,` (カンマ) などの区切り記号で、分割の場所を指定します。文字列を分割したら、[`Fn::Select`](intrinsic-function-reference-select.md) 関数を使用して特定の要素を選択します。

たとえば、サブネット ID のカンマ区切りの文字列がスタックテンプレートにインポートされる場合は、各カンマで文字列を分割できます。サブネット ID のリストから、`Fn::Select` 組み込み関数を使用してリソースのサブネット ID を指定します。

## 宣言
<a name="w2aac24c62b7"></a>

### JSON
<a name="intrinsic-function-reference-split-syntax.json"></a>

```
{ "Fn::Split" : [ "delimiter", "source string" ] }
```

### YAML
<a name="intrinsic-function-reference-split-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Split: [ delimiter, source string ]
```

短縮形の構文:

```
!Split [ delimiter, source string ]
```

## パラメータ
<a name="w2aac24c62b9"></a>

両方のパラメータを指定する必要があります。

区切り記号  
ソース文字列を分割する場所を決める文字列値。

ソース文字列  
分割する文字列値。

## 戻り値
<a name="w2aac24c62c11"></a>

文字列値のリスト。

## 例
<a name="w2aac24c62c13"></a>

次の例では、`Fn::Split` 関数の動作を示します。

### シンプルなリスト
<a name="w2aac24c62c13b5"></a>

次の例では、縦線 (`|`) ごとに文字列を分割します。 関数は を返します`["a", "b", "c"]`

#### JSON
<a name="intrinsic-function-reference-split-example.json"></a>

```
{ "Fn::Split" : [ "|" , "a|b|c" ] }
```

#### YAML
<a name="intrinsic-function-reference-split-example.yaml"></a>

```
!Split [ "|" , "a|b|c" ]
```

 

### 空の文字列値を使用したリスト
<a name="w2aac24c62c13b7"></a>

継続した区切り記号で文字列を分割する場合、返されるリストには空の文字列が含まれます。次の例では、2 つの連続した区切り記号と追加された区切り記号を持つ文字列がどのように分割されるかを示しています。 関数は を返します`["a", "", "c", ""]`

#### JSON
<a name="w2aac24c62c13b7b5"></a>

```
{ "Fn::Split" : [ "|" , "a||c|" ] }
```

#### YAML
<a name="w2aac24c62c13b7b7"></a>

```
!Split [ "|" , "a||c|" ]
```

 

### インポートされた出力値の分割
<a name="w2aac24c62c13b9"></a>

次の例では、インポートされた出力値を分割し、`Fn::Select` 関数で指定されるように、返されるサブネット ID のリストから 3 番目の要素を選択します。

#### JSON
<a name="w2aac24c62c13b9b5"></a>

```
{ "Fn::Select" : [ "2", { "Fn::Split": [",", {"Fn::ImportValue": "AccountSubnetIDs"}]}] }
```

#### YAML
<a name="w2aac24c62c13b9b7"></a>

```
!Select [2, !Split [",", !ImportValue AccountSubnetIDs]]
```

## サポートされている関数
<a name="w2aac24c62c15"></a>

`Fn::Split` 区切り記号には、関数を使用できません。文字列値を指定する必要があります。

`Fn::Split` の値リストには、以下の機能を使用できます。
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Sub`
<a name="intrinsic-function-reference-sub"></a>

組み込み関数 `Fn::Sub` は、入力文字列の変数を、指定した値に置き換えます。テンプレートで、スタックを作成または更新するまで使用できない値を含むコマンドまたは出力を作成するために、この関数を使用できます。

## 宣言
<a name="intrinsic-function-reference-sub-declaration"></a>

以下のセクションでは、関数の構文を示します。

### JSON
<a name="intrinsic-function-reference-sub-syntax.json"></a>

```
{ "Fn::Sub" : [ String, { Var1Name: Var1Value, Var2Name: Var2Value } ] }
```

`String` パラメーターのテンプレートパラメーター、リソースの論理 ID、またはリソース属性のみを置き換える場合、変数マップを指定しないでください。

```
{ "Fn::Sub" : String }
```

### YAML
<a name="intrinsic-function-reference-sub-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Sub:
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value
```

短縮形の構文:

```
!Sub
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value
```

`String` パラメーターのテンプレートパラメーター、リソースの論理 ID、またはリソース属性のみを置き換える場合、変数マップを指定しないでください。

完全関数名の構文:

```
Fn::Sub: String
```

短縮形の構文:

```
!Sub String
```

## パラメータ
<a name="w2aac24c66b7"></a>

`String`  
ランタイムに、CloudFormation が関連する値と置き換わる変数のある文字列。変数を `${MyVarName}` として書き込みます。変数は、テンプレートパラメーター名、リソースの論理 ID、リソース属性、またはキー/値マップの変数です。テンプレートパラメーター名、リソースの論理 ID、およびリソース属性のみを指定する場合、キー/値マップを指定しないでください。  
テンプレートパラメータ名、または `${InstanceTypeParameter}` などのリソースの論理 ID を指定すると、CloudFormation は `Ref` 組み込み関数を使用した場合と同じ値を返します。`${MyInstance.PublicIp}` などのリソース属性を指定すると、CloudFormation は `Fn::GetAtt` 組み込み関数を使用した場合と同じ値を返します。  
USD 記号と中括弧 (`${}`) をそのまま書き込むには、最初の中括弧の後に感嘆符 (`!`) を追加します (`${!Literal}` など)。CloudFormation は、このテキストを `${Literal}` として解決します。  
起動テンプレートを使用している場合は、`\${!Literal}` などのドル記号の前にバックスラッシュ `\` を追加します。追加しないと、その文字は空の文字列として解決されます。

`VarName`  
`String` パラメーターに含めた変数の名前。

`VarValue`  
実行時に CloudFormation が関連する変数の名前と置き換える値。

## 戻り値
<a name="w2aac24c66b9"></a>

CloudFormation は、すべての変数の値を置き換え、元の文字列を返します。

## 例
<a name="w2aac24c66c11"></a>

次の例では、`Fn::Sub` 関数を使用する方法を示します。

### key-value マップなしで `Fn::Sub` を使用する
<a name="w2aac24c66c11b5"></a>

このシンプルな例では、`InstanceSecurityGroup` リソースの説明は `AWS::StackName` 疑似パラメータを使用して動的に作成されます。例えば、スタック名が「VPC-EC2-ALB-Stack」の場合、結果の説明は「SSH security group for VPC-EC2-ALB-Stack」になります。

#### JSON
<a name="intrinsic-function-reference-sub-example-1.json"></a>

```
"InstanceSecurityGroup" : {
    "Type" : "AWS::EC2::SecurityGroup",
    "Properties" : {
        "GroupDescription" : {"Fn::Sub": "SSH security group for ${AWS::StackName}"}
}}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-1.yaml"></a>

```
InstanceSecurityGroup:
  Type: AWS::EC2::SecurityGroup
  Properties:
    GroupDescription: !Sub "SSH security group for ${AWS::StackName}"
```

### key-value マップを使用して `Fn::Sub` を使用する
<a name="w2aac24c66c11b7"></a>

この例では、`WWWBucket` リソースの名前は key-value マップを使用して動的に作成されます。`Fn::Sub` 関数は、入力文字列 `www.${Domain}` の `${Domain}` を、同じスタックテンプレート内で定義されている `RootDomainName` パラメータを参照する `Ref` 関数の値に置き換えます。例えば、ルートドメイン名が「mydomain.com」の場合、このリソースの結果の名前は「www.mydomain.com」になります。

#### JSON
<a name="intrinsic-function-reference-sub-example-2.json"></a>

```
"WWWBucket":{
  "Type":"AWS::S3::Bucket",
  "Properties":{
    "BucketName":{
      "Fn::Sub":[
        "www.${Domain}",
        {
          "Domain":{
            "Ref":"RootDomainName"
          }
        }
      ]
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-2.yaml"></a>

```
  WWWBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub
        - 'www.${Domain}'
        - Domain: !Ref RootDomainName
```

### 複数の変数を使用して ARN を構築する
<a name="w2aac24c66c11b9"></a>

次の例では、VPC の Amazon リソースネーム (ARN) を作成するために、`AWS::Region`、`AWS::AccountId` 擬似パラメータ、および `vpc` リソース論理 ID とともに `Fn::Sub` を使用します。

#### JSON
<a name="intrinsic-function-reference-sub-example-3.json"></a>

```
{ "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" }
```

#### YAML
<a name="intrinsic-function-reference-sub-example-3.yaml"></a>

```
!Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}'
```

### ユーザーデータスクリプトでパラメータ値を渡す
<a name="w2aac24c66c11c11"></a>

以下の例では、`Fn::Sub` を使用して、実行時に実際のスタック名とリージョンに `AWS::StackName` と `AWS::Region` 擬似パラメータを置き換えます。

#### JSON
<a name="intrinsic-function-reference-sub-example.json"></a>

読みやすくするため、JSON の例では、ユーザーデータのスクリプト全体を単一文字列値で指定する代わりに、`Fn::Join` 関数を使用して各コマンドを分けています。

```
"UserData": { "Fn::Base64": { "Fn::Join": ["\n", [
  "#!/bin/bash -xe",
  "yum update -y aws-cfn-bootstrap",
  { "Fn::Sub": "/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}" },
  { "Fn::Sub": "/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}" }]]
}}
```

#### YAML
<a name="intrinsic-function-reference-sub-example.yaml"></a>

YAML の例では、ユーザーデータスクリプトを指定してリテラルブロックを使用しています。

```
UserData:
  Fn::Base64:
    !Sub |
      #!/bin/bash -xe
      yum update -y aws-cfn-bootstrap
      /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}
      /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
```

### マッピングを使用した条件値を指定する
<a name="w2aac24c66c11c13"></a>

この例では、`log_group_name` 変数を `Fn::FindInMap` 関数の結果の値に置き換えることで、`myLogGroup` リソースの名前が動的に作成されます。

#### JSON
<a name="intrinsic-function-reference-sub-example-5.json"></a>

```
{
  "Mappings": {
    "LogGroupMapping": {
      "Test": {
        "Name": "test_log_group"
      },
      "Prod": {
        "Name": "prod_log_group"
      }
    }
  },
  "Resources": {
    "myLogGroup": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "LogGroupName": {
          "Fn::Sub": [
            "cloud_watch_${log_group_name}",
            {
              "log_group_name": {
                "Fn::FindInMap": [
                  "LogGroupMapping",
                  "Test",
                  "Name"
                ]
              }
            }
          ]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-5.yaml"></a>

```
Mappings:
  LogGroupMapping:
    Test:
      Name: test_log_group
    Prod:
      Name: prod_log_group
Resources:
  myLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Sub 
        - 'cloud_watch_${log_group_name}'
        - log_group_name: !FindInMap 
            - LogGroupMapping
            - Test
            - Name
```

## サポートされている関数
<a name="intrinsic-function-reference-sub-supported-functions"></a>

`String` パラメータには、関数を使用できません。文字列値を指定する必要があります。

`VarName` および `VarValue` パラメータに対して、以下の関数を使用できます。
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](#intrinsic-function-reference-sub)
+ [`Ref`](intrinsic-function-reference-ref.md)

# `Fn::ToJsonString`
<a name="intrinsic-function-reference-ToJsonString"></a>

`Fn::ToJsonString` 組み込み関数は、オブジェクトまたは配列を対応する JSON 文字列に変換します。

**重要**  
`Fn::ToJsonString` 組み込み関数を使用するには、[`AWS::LanguageExtensions` 変換](transform-aws-languageextensions.md) を使用する必要があります。

## 宣言
<a name="tojsonstring-declaration"></a>

### JSON
<a name="intrinsic-function-reference-tojsonstring-syntax.json"></a>

```
{ "Fn::ToJsonString": Object }
```

```
{ "Fn::ToJsonString": Array }
```

### YAML
<a name="intrinsic-function-reference-tojsonstring-syntax.yaml"></a>

```
Fn::ToJsonString: Object
```

```
Fn::ToJsonString: Array
```

## パラメータ
<a name="tojsonstring-parameters"></a>

`Object`  
JSON 文字列に変換するオブジェクト。

`Array`  
JSON 文字列に変換する配列。

## 戻り値
<a name="intrinsic-function-reference-tojsonstring-return"></a>

JSON 文字列に変換されたオブジェクトまたは配列。

## 例
<a name="intrinsic-function-reference-tojsonstring-examples"></a>

### オブジェクトを JSON 文字列に変換する
<a name="intrinsic-function-reference-tojsonstring-example-subsection"></a>

このサンプルスニペットは、組み込み関数に渡されたオブジェクトを JSON 文字列に変換します。

#### JSON
<a name="intrinsic-function-reference-tojsonstring-example.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::ToJsonString": {
            "key1": "value1",
            "key2": { 
                "Ref": "ParameterName"
            }
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-tojsonstring-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::ToJsonString: 
    key1: value1
    key2: !Ref ParameterName
#...
```

どちらの例でも、`Ref` から `ParameterName` が `resolvedValue` に解決される場合、この関数は次の JSON 文字列に解決されます。

```
"{\"key1\":\"value1\",\"key2\":\"resolvedValue\"}"
```

### 配列を JSON 文字列に変換する
<a name="intrinsic-function-reference-tojsonstring-example2"></a>

このサンプルスニペットは、組み込み関数に渡された配列を JSON 文字列に変換します。

#### JSON
<a name="intrinsic-function-reference-tojsonstring-example2.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::ToJsonString": [{
            "key1": "value1",
            "key2": { 
                "Ref": "ParameterName" 
            }
        }]
//...
}
```

#### YAML
<a name="intrinsic-function-reference-tojsonstring-example2.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::ToJsonString: 
    - key1: value1
      key2: !Ref ParameterName
#...
```

どちらの例でも、`Ref` から `ParameterName` が `resolvedValue` に解決される場合、この関数は次の JSON 文字列に解決されます。

```
"[{\"key1\":\"value1\"},{\"key2\":\"resolvedValue\"}]"
```

## サポートされている関数
<a name="tojsonstring-supported-functions"></a>

`Fn::ToJsonString` 組み込み関数または配列の中で、次の関数を使用できます。
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Length`
+ `Fn::Select`
+ `Fn::Split`
+ `Fn::Sub`
+ `Fn::ToJsonString`
+ `Ref`

# `Fn::Transform`
<a name="intrinsic-function-reference-transform"></a>

組み込み関数 `Fn::Transform` は、スタックテンプレートの一部に対してカスタム処理を実行するためのマクロを指定します。マクロを使用すると、検索して置換操作のような単純なアクションからテンプレート全体の広範な変換まで、テンプレートに対してカスタム処理を実行できるようになります。詳細については、『AWS CloudFormation ユーザーガイド』の「CloudFormation マクロを使用したテンプレートのカスタム処理の実行」を参照してください。

`Fn::Transform` を使用して [`AWS::Include` 変換](transform-aws-include.md) トランスフォームを呼び出すこともできます。これは CloudFormation によってホストされるマクロです。

## 宣言
<a name="intrinsic-function-reference-transform-declaration"></a>

### JSON
<a name="intrinsic-function-reference-transform-syntax.json"></a>

完全関数名の構文:

```
{
    "Fn::Transform": {
        "Name": "macro name",
        "Parameters": {
            "Key": "value"
        }
    }
}
```

短縮形の構文:

```
{
    "Transform": {
        "Name": "macro name",
        "Parameters": {
            "Key": "value"
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-transform-syntax.yaml"></a>

完全関数名の構文:

```
Fn::Transform:
  Name : macro name
  Parameters :
    Key : value
```

短縮形の構文:

```
!Transform
  Name: macro name
  Parameters:
    Key: value
```

## パラメータ
<a name="intrinsic-function-reference-transform-parameters"></a>

`Name`  
処理を実行するマクロの名前。

`Parameters`  
マクロに渡すキーと値のペアとして指定されたリストパラメータ。

## 戻り値
<a name="intrinsic-function-reference-transform-returnvalue"></a>

処理済みスタックテンプレートに含める処理済みテンプレートスニペット。

## 例
<a name="intrinsic-function-reference-transform-examples"></a>

次の例では、`AWS::Include` 変換を呼び出し、テンプレートスニペットを取得する場所を `InputValue` パラメータに渡すように指定します。

### JSON
<a name="intrinsic-function-reference-transform-example-1.json"></a>

```
{
    "Fn::Transform": {
        "Name": "AWS::Include",
        "Parameters": {
            "Location": {
                "Ref": "InputValue"
            }
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-transform-example-1.yaml"></a>

```
Fn::Transform:
  Name: AWS::Include
  Parameters:
    Location: !Ref InputValue
```

## サポートされている関数
<a name="intrinsic-function-reference-transform-supported-functions"></a>

なし。

CloudFormation は、`Fn::Transform` に含まれるすべての組み込み関数呼び出しをリテラル文字列として指定されたマクロに渡します。

# `Ref`
<a name="intrinsic-function-reference-ref"></a>

`Ref` 組み込み関数は、指定されたパラメータ、リソース、別の組み込み関数の値を返します。この関数は、CloudFormation テンプレート内のリソース間に参照を作成するためによく使用されます。

## 宣言
<a name="ref-declaration"></a>

### JSON
<a name="intrinsic-function-reference-ref-syntax.json"></a>

```
{ "Ref" : "logicalName" }
```

```
{ "Ref" : "IntrinsicFunction" }
```

### YAML
<a name="intrinsic-function-reference-ref-syntax.yaml"></a>

完全関数名の構文:

```
Ref: logicalName
```

```
Ref:
   IntrinsicFunction
```

短縮形の構文:

```
!Ref logicalName
```

```
!Ref
   IntrinsicFunction
```

## パラメータ
<a name="ref-parameters"></a>

logicalName  
参照するリソースまたはパラメータの論理名。

IntrinsicFunction  
有効な文字列に解決される組み込み関数。パラメーターまたは識別子のリファレンスを含める必要があり、かつリソースの論理識別子を含めることはできません。

## 戻り値
<a name="ref-return-value"></a>

`Ref` の戻り値は、参照されるエンティティのタイプによって異なります。
+ パラメータの論理名を指定すると、それはパラメータの値を返します。詳細については、「[CloudFormation テンプレート Parameters の構文](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)」を参照してください。
+ リソースの論理名を指定すると、そのリソースを識別するために使用する値が返されます。通常、これはリソースの名前です。ただし、一部のリソースでは、リソースのコンテキストにおいて別の重要な意味を持つ識別子が返されます。例えば、`AWS::EC2::EIP` リソースは IP アドレスを返し、`AWS::EC2::Instance` はインスタンス ID を返します。リソースに対する `Ref` の戻り値の詳細については、「[リソースとプロパティのリファレンス](aws-template-resource-type-ref.md)」でそのリソースのドキュメントを参照してください。
+ 組み込み関数を指定すると、その関数の出力を返します。

## 例
<a name="ref-examples"></a>

### リソース間の参照を作成する
<a name="intrinsic-function-reference-ref-example"></a>

Elastic IP アドレスの次のリソース宣言には、EC2 インスタンスのインスタンス ID が必要です。`Ref` 関数を使用し、テンプレートの他の場所で宣言された `MyEC2Instance` リソースのインスタンス ID を指定します。

#### JSON
<a name="intrinsic-function-reference-ref-example.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-ref-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:

  ...

  MyEIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref MyEC2Instance
```

### リソース識別子をスタック出力として返す
<a name="intrinsic-function-reference-ref-example-2"></a>

次の例では、`Ref` 関数を使用して `MyBucket` の論理名をスタック出力として持つ Amazon S3 バケットの名前を返す方法が示されます。

#### JSON
<a name="intrinsic-function-reference-ref-example-2.json"></a>

```
{
  "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
<a name="intrinsic-function-reference-ref-example-2.yaml"></a>

```
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` 組み込み関数を使用する
<a name="ref-example-intrinsic-functions-multiple-stages"></a>

**注記**  
`AWS::LanguageExtensions` 変換を使用すると、`Ref` を他の組み込み関数と組み合わせて使用できます。サポートされている関数については、「[サポートされている関数](#ref-supported-functions)」を参照してください。

次の例では、`Fn::Sub` 組み込み関数、条件、`Stage` パラメータの入力を使用してリソースの識別子を設定する方法が示されます。`Ref` および `Fn::GetAtt` 関数は、ステージに基づいて適切な値を参照します。`Fn::Sub` は最初に `Fn::GetAtt` と一緒に使用して適切な Amazon SQS キューの ARN を取得し、Amazon CloudWatch アラームのディメンションを設定します。次に、[`Fn::Join`](intrinsic-function-reference-join.md) は `Ref` と一緒に使用し、`AlarmActions` プロパティの SNS トピックの名前を作成します。

#### JSON
<a name="ref-example-intrinsic-functions-multiple-stages.json"></a>

```
{
    "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
<a name="ref-example-intrinsic-functions-multiple-stages.yaml"></a>

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

## サポートされている関数
<a name="ref-supported-functions"></a>

[AWS::LanguageExtensions 変換](transform-aws-languageextensions.md) を使用するとき、`Ref` 関数内で次の関数を使用できます。
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ `Ref`

# ルール関数
<a name="intrinsic-function-reference-rules"></a>

ルール関数は、CloudFormation テンプレートの `Rules` セクションでのみ機能する特殊な関数です。これらの関数は、カスタムロジックを使用してパラメータ値を検証するのに役立ちます。すべての検証は、CloudFormation がリソースを作成または更新する前に行われます。

ルールは、標準のパラメータ制約が不十分な場合に便利です。例えば、SSL が有効になっている場合は、証明書とドメイン名の両方を指定する必要があります。ルールを使用すると、これらの依存関係を確実に満たすことができます。

ルールの条件またはアサーションで、`Fn::Equals`、`Fn::Not`、`Fn::RefAll` などの組み込み関数を使用できます。条件プロパティによって、CloudFormation がアサーションを適用するかどうかが決まります。条件が `true` に評価された場合、スタックの作成または更新時に、CloudFormation はアサーションを評価してパラメータ値が有効かどうか確認します。パラメータ値が有効ではない場合、CloudFormation はスタックを作成または更新しません。条件が `false` に評価される場合、CloudFormation はパラメータ値を確認せず、スタックオペレーションに進みます。

テンプレートでルールを初めて使用する場合は、まず「*AWS CloudFormation ユーザーガイド*」の「[CloudFormation テンプレートの Rules 構文](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/rules-section-structure.html)」トピックを確認することをお勧めします。

**Topics**
+ [`Fn::And`](#fn-and)
+ [`Fn::Contains`](#fn-contains)
+ [`Fn::EachMemberEquals`](#fn-eachmemberequals)
+ [`Fn::EachMemberIn`](#fn-eachmemberin)
+ [`Fn::Equals`](#fn-equals)
+ [`Fn::Not`](#fn-not)
+ [`Fn::Or`](#fn-or)
+ [`Fn::RefAll`](#fn-refall)
+ [`Fn::ValueOf`](#fn-valueof)
+ [`Fn::ValueOfAll`](#fn-valueofall)
+ [サポートされている関数](#supported-rule-functions)
+ [サポートされている属性](#rules-parameter-attributes)

## `Fn::And`
<a name="fn-and"></a>

指定されたすべての条件が `true` に評価された場合は `true` を返します。条件のいずれかが `false` に評価された場合は `false` を返します。`Fn::And` は AND 演算子として機能します。含めることができる条件の最小数は 2 で、最大数は 10 です。

### 宣言
<a name="fn-and-declaration"></a>

```
"Fn::And" : [{condition}, {...}]
```

### パラメータ
<a name="fn-and-parameters"></a>

*condition*  
`true` または `false` に評価されるルール固有の組み込み関数。

### 例
<a name="fn-and-example"></a>

次の例では、参照されるセキュリティグループの名前が `true` と等しい場合、および `sg-mysggroup` パラメータ値が `InstanceType` または `t3.large` の場合に、`t3.small` と評価されます。

```
"Fn::And": [
  {
    "Fn::Equals": [
      "sg-mysggroup",
      {"Ref": "ASecurityGroup"}
    ]
  },
  {
    "Fn::Contains": [
      [
        "t3.large",
        "t3.small"
      ],
      {"Ref": "InstanceType"}
    ]
  }
]
```

## `Fn::Contains`
<a name="fn-contains"></a>

指定された文字列が文字列のリストの少なくとも 1 つの値と一致する場合に、`true` を返します。

### 宣言
<a name="fn-contains-declaration"></a>

```
"Fn::Contains" : [[list_of_strings], string]
```

### パラメータ
<a name="fn-contains-parameters"></a>

*list\$1of\$1strings*  
`"A", "B", "C"` のような文字列のリスト。

*文字列*  
文字列のリストに対して比較する、`"A"` などの文字列。

### 例
<a name="fn-contains-example"></a>

次の関数は、`true` パラメータ値がリスト (`InstanceType` または `t3.large`) に含まれる場合に、`t3.small` と評価されます。

```
"Fn::Contains" : [
  ["t3.large", "t3.small"], {"Ref" : "InstanceType"}
]
```

## `Fn::EachMemberEquals`
<a name="fn-eachmemberequals"></a>

指定された文字列がリストのすべての値と一致した場合に、`true` を返します。

### 宣言
<a name="fn-eachmemberequals-declaration"></a>

```
"Fn::EachMemberEquals" : [[list_of_strings], string]
```

### パラメータ
<a name="fn-eachmemberequals-parameters"></a>

*list\$1of\$1strings*  
`"A", "B", "C"` のような文字列のリスト。

*文字列*  
文字列のリストに対して比較する、`"A"` などの文字列。

### 例
<a name="fn-eachmemberequals-example"></a>

次の関数は、タイプ `AWS::EC2::VPC::Id` のすべてのパラメータの `Department` タグが `IT` という値を持つ場合に `true` を返します。

```
"Fn::EachMemberEquals" : [
  {"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]}, "IT"
]
```

## `Fn::EachMemberIn`
<a name="fn-eachmemberin"></a>

文字列のリストの各メンバーが、文字列の 2 番目のリストの少なくとも 1 つの値に一致する場合に、`true` を返します。

### 宣言
<a name="fn-eachmemberin-declaration"></a>

```
"Fn::EachMemberIn" : [[strings_to_check], [strings_to_match]]
```

### パラメータ
<a name="fn-eachmemberin-parameters"></a>

*strings\$1to\$1check*  
`"A", "B", "C"` のような文字列のリスト。CloudFormation は `strings_to_check` パラメータの各メンバーが `strings_to_match` パラメータにあるかどうか確認します。

*strings\$1to\$1match*  
`"A", "B", "C"` のような文字列のリスト。`strings_to_match` パラメータの各メンバーは、`strings_to_check` パラメータのメンバーに対して比較されます。

### 例
<a name="fn-eachmemberin-example"></a>

次の関数は、有効な仮想プライベートクラウド (VPC) にあるサブネットをユーザーが指定するかどうかを確認します。VPC は、ユーザーがスタックを操作しているアカウントおよびリージョンに存在する必要があります。関数は、`AWS::EC2::Subnet::Id` タイプのすべてのパラメータに適用されます。

```
"Fn::EachMemberIn" : [ 
  {"Fn::ValueOfAll" : ["AWS::EC2::Subnet::Id", "VpcId"]}, {"Fn::RefAll" : "AWS::EC2::VPC::Id"}
]
```

## `Fn::Equals`
<a name="fn-equals"></a>

2 つの値を比較し、同じかどうかを判断します。2 つの値が同じ場合は `true` を返し、同じでない場合は `false` を返します。

### 宣言
<a name="fn-equals-declaration"></a>

```
"Fn::Equals" : ["value_1", "value_2"]
```

### パラメータ
<a name="fn-equals-parameters"></a>

*`value`*  
別の値と比較する任意のタイプの値。

### 例
<a name="fn-equals-example"></a>

次の例では、`true` パラメータの値が と等しい場合に `prod``EnvironmentType` に評価されます。

```
"Fn::Equals" : [{"Ref" : "EnvironmentType"}, "prod"]
```

## `Fn::Not`
<a name="fn-not"></a>

`true` に評価される条件に対しては、`false` を返します。`false` に評価される条件に対しては、`true` を返します。`Fn::Not` は NOT 演算子として機能します。

### 宣言
<a name="fn-not-declaration"></a>

```
"Fn::Not" : [{condition}]
```

### パラメータ
<a name="fn-not-parameters"></a>

*`condition`*  
`true` または `false` に評価されるルール固有の組み込み関数。

### 例
<a name="fn-not-example"></a>

次の例では、`EnvironmentType` パラメータの値が `prod` と等しくない場合に `true` に評価されます。

```
"Fn::Not" : [{"Fn::Equals" : [{"Ref" : "EnvironmentType"}, "prod"]}]
```

## `Fn::Or`
<a name="fn-or"></a>

指定された条件のいずれかが `true` に評価された場合は `true` を返します。すべての条件が `false` に評価された場合は `false` を返します。`Fn::Or` は OR 演算子として機能します。含めることができる条件の最小数は 2 で、最大数は 10 です。

### 宣言
<a name="fn-or-declaration"></a>

```
"Fn::Or" : [{condition}, {...}]
```

### パラメータ
<a name="fn-or-parameters"></a>

*`condition`*  
`true` または `false` に評価されるルール固有の組み込み関数。

### 例
<a name="fn-or-example"></a>

次の例では、参照されるセキュリティグループの名前が `true` と等しい場合、または `sg-mysggroup` パラメータ値が `InstanceType` または `t3.large` の場合に、`t3.small` と評価されます。

```
"Fn::Or" : [
  {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]},
  {"Fn::Contains" : [["t3.large", "t3.small"], {"Ref" : "InstanceType"}]}
]
```

## `Fn::RefAll`
<a name="fn-refall"></a>

指定したパラメータ型のすべての値を返します。

### 宣言
<a name="fn-refall-declaration"></a>

```
"Fn::RefAll" : "parameter_type"
```

### パラメータ
<a name="fn-refall-parameters"></a>

*parameter\$1type*  
AWS や `AWS::EC2::SecurityGroup::Id` などの `AWS::EC2::VPC::Id` 固有のパラメータ型。詳細については、『AWS CloudFormation ユーザーガイド』の「[サポートされている AWS 固有のパラメータタイプ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported)」を参照してください。

### 例
<a name="fn-refall-example"></a>

次の関数は、スタックを作成または更新中のリージョンと AWS アカウント のすべての VPC ID のリストを返します。

```
"Fn::RefAll" : "AWS::EC2::VPC::Id"
```

## `Fn::ValueOf`
<a name="fn-valueof"></a>

特定のパラメータおよび属性の値の属性値またはリストを返します。

### 宣言
<a name="fn-valueof-declaration"></a>

```
"Fn::ValueOf" : [ "parameter_logical_id", "attribute" ]
```

### パラメータ
<a name="fn-valueof-parameters"></a>

*属性*  
値の取得元となる属性の名前。属性の詳細については、「[サポートされている属性](#rules-parameter-attributes)」を参照してください。

*parameter\$1logical\$1id*  
属性値の取得元となるパラメータの名前。パラメータは、テンプレートの [`Parameters`] セクションで宣言する必要があります。

### 例
<a name="fn-valueof-examples"></a>

次の例では、`ElbVpc` パラメータで指定された VPC の `Department` タグの値を返します:

```
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
```

パラメータに複数の値を指定する場合、Fn::ValueOf 関数はリストを返すことができます。例えば、複数のサブネットを指定して、各メンバーが特定のサブネットのアベイラビリティゾーンであるアベイラビリティゾーンのリストを取得できます。

```
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
```

## `Fn::ValueOfAll`
<a name="fn-valueofall"></a>

特定のパラメータ型および属性のすべての属性値のリストを返します。

### 宣言
<a name="fn-valueofall-declaration"></a>

```
"Fn::ValueOfAll" : ["parameter_type", "attribute"]
```

### パラメータ
<a name="fn-valueofall-parameters"></a>

*属性*  
値の取得元となる属性の名前。属性の詳細については、「[サポートされている属性](#rules-parameter-attributes)」を参照してください。

*parameter\$1type*  
AWS や `AWS::EC2::SecurityGroup::Id` などの `AWS::EC2::VPC::Id` 固有のパラメータ型。詳細については、『AWS CloudFormation ユーザーガイド』の「[サポートされている AWS 固有のパラメータタイプ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported)」を参照してください。

### 例
<a name="fn-valueofall-example"></a>

次の例では、`Fn::ValueOfAll` 関数は値のリストを返します。各メンバーは、そのタグを持つ VPC の `Department` タグ値です。

```
"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]
```

## サポートされている関数
<a name="supported-rule-functions"></a>

`Fn::ValueOf` および `Fn::ValueOfAll` 関数内で他の関数を使用することはできません。ただし、他のすべてのルール固有の組み込み関数内では、以下の関数を使用できます。
+ `Ref`
+ その他のルール固有の組み込み関数

## サポートされている属性
<a name="rules-parameter-attributes"></a>

次の一覧に、特定のリソースおよびパラメータ型に対して取得できる属性値を示します。

`AWS::EC2::VPC::Id` パラメータタイプまたは VPC ID  
+ DefaultNetworkAcl
+ DefaultSecurityGroup
+ タグ。*tag\$1key*

`AWS::EC2::Subnet::Id` パラメータタイプまたはサブネット ID  
+ AvailabilityZone
+ タグ。*tag\$1key*
+ VpcId

`AWS::EC2::SecurityGroup::Id` パラメータタイプまたはセキュリティグループ ID  
+ タグ。*tag\$1key*