

Ini adalah *Panduan Referensi CloudFormation Template* baru. Harap perbarui bookmark dan tautan Anda. Untuk bantuan memulai CloudFormation, lihat [Panduan AWS CloudFormation Pengguna](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Referensi fungsi intrinsik
<a name="intrinsic-function-reference"></a>

CloudFormation menyediakan beberapa fungsi bawaan yang membantu Anda mengelola tumpukan Anda. Gunakan fungsi intrinsik dalam templat Anda untuk menetapkan nilai properti yang tidak tersedia sampai waktu aktif.

**catatan**  
Anda dapat menggunakan fungsi intrinsik hanya di bagian tertentu dari template. Saat ini, Anda dapat menggunakan fungsi intrinsik di properti sumber daya, output, atribut metadata, dan memperbarui atribut kebijakan. Anda juga dapat menggunakan fungsi intrinsik untuk membuat sumber daya tumpukan secara kondisional.

**Topics**
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::Cidr`](intrinsic-function-reference-cidr.md)
+ [Fungsi syarat](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)
+ [Fungsi aturan](intrinsic-function-reference-rules.md)

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

Fungsi intrinsik `Fn::Base64` mengembalikan representasi Base64 dari string input. Fungsi ini biasanya digunakan untuk meneruskan data yang dikodekan ke EC2 instance Amazon melalui properti. `UserData`

## Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

```
!Base64 valueToEncode
```

**catatan**  
Jika Anda menggunakan formulir pendek dan segera menyertakan fungsi lain dalam `valueToEncode` parameter, gunakan nama fungsi lengkap untuk setidaknya satu fungsi. Sebagai contoh, sintaks berikut ini tidak valid:  

```
!Base64 !Sub string
!Base64 !Ref logical_ID
```
Sebaliknya, gunakan nama fungsi penuh untuk setidaknya salah satu fungsi, seperti yang ditunjukkan dalam contoh berikut:  

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

Fn::Base64:
  !Sub string
```

## Parameter
<a name="w2aac24c12b7"></a>

valueToEncode  
Nilai string yang ingin dikonversi ke Base64.

## Nilai kembali:
<a name="w2aac24c12b9"></a>

String asli, dalam representasi Base64.

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

## Fungsi yang didukung
<a name="w2aac24c12c13"></a>

Anda dapat menggunakan fungsi yang mengembalikan string di dalam `Fn::Base64` fungsi.

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

Fungsi intrinsik `Fn::Cidr` mengembalikan susunan blok alamat CIDR. Jumlah blok CIDR yang dikembalikan tergantung pada parameter `count`.

## Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

```
Fn::Cidr: 
  - iPBlock
  - count
  - cidrBits
```

Sintaks untuk bentuk pendek:

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

## Parameter
<a name="intrinsic-function-reference-cidr-parameters"></a>

iPBlock  <a name="ipBlock"></a>
Blok alamat CIDR yang ditentukan pengguna untuk dibagi menjadi blok CIDR yang lebih kecil.

count  <a name="count"></a>
Jumlah CIDRs untuk menghasilkan. Kisaran valid adalah antara 1 hingga 256.

cidrBits  <a name="cidrBits"></a>
Jumlah bit subnet untuk CIDR. Sebagai contoh, menentukan nilai “8" untuk parameter ini akan membuat CIDR dengan mask “/24".  
Bit subnet adalah kebalikan dari subnet mask. Untuk menghitung bit host yang diperlukan untuk bit subnet tertentu, kurangi bit subnet dari 32 untuk IPv4 atau 128 untuk. IPv6

## Nilai yang dikembalikan
<a name="intrinsic-function-reference-cidr-return-values"></a>

Susunan blok alamat CIDR.

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

### Penggunaan dasar
<a name="intrinsic-function-reference-cidr-example1"></a>

Contoh ini membuat 6 CIDRs dengan subnet mask “/27" di dalam dari CIDR dengan topeng “/24".

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

### Membuat VPC yang IPv6 diaktifkan
<a name="intrinsic-function-reference-cidr-example2"></a>

Contoh template ini membuat subnet IPv6 diaktifkan.

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

## Fungsi yang didukung
<a name="intrinsic-function-reference-cidr-functions"></a>

Anda dapat menggunakan fungsi berikut di fungsi `Fn::Cidr`:
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

# Fungsi syarat
<a name="intrinsic-function-reference-conditions"></a>

Anda dapat menggunakan fungsi intrinsik, seperti `Fn::If` atau`Fn::Equals`, untuk membuat dan mengkonfigurasi sumber daya tumpukan berdasarkan logika bersyarat. Kondisi ini mengevaluasi selama pembuatan tumpukan atau pembaruan. Setelah Anda menentukan semua kondisi Anda, Anda dapat mengaitkannya dengan sumber daya atau properti sumber daya di `Resources` dan `Outputs` bagian template.

Untuk skenario lanjutan, Anda dapat menggabungkan kondisi menggunakan `Fn::And` atau `Fn::Or` fungsi, atau gunakan `Fn::Not` untuk meniadakan nilai kondisi. Anda juga dapat membuat kondisi sarang untuk membuat logika kondisional yang lebih kompleks.

Jika Anda baru menggunakan kondisi di template Anda, kami sarankan Anda terlebih dahulu meninjau topik [sintaks Ketentuan CloudFormation template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) di *Panduan AWS CloudFormation Pengguna*.

**catatan**  
Anda harus menentukan semua kondisi di `Conditions` bagian templat, kecuali untuk `Fn::If` kondisi. Anda dapat menggunakan `Fn::If` kondisi dalam `Metadata` atribut, `UpdatePolicy` atribut, dan nilai properti di `Outputs` bagian `Resources` dan.

**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)
+ [Fungsi yang didukung](#w2aac24c20c25)
+ [Templat sampel](#conditions-sample-templates)

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

Menghasilkan `true` jika semua syarat yang ditentukan bernilai true, atau menghasilkan `false` jika salah satu syarat bernilai false. `Fn::And` bertindak sebagai operator AND. Jumlah minimum syarat yang dapat Anda sertakan adalah 2, dan maksimum adalah 10.

### Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

```
!And [condition]
```

### Parameter
<a name="w2aac24c20c13b7"></a>

condition  <a name="fn-and-condition"></a>
Suatu syarat yang bernilai `true` atau `false`.

### `Fn::And`contoh penggunaan
<a name="w2aac24c20c13b9"></a>

`MyAndCondition` berikut ini bernilai true jika nama grup keamanan yang direferensikan sama dengan `sg-mysggroup` dan jika `SomeOtherCondition` bernilai 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>

Membandingkan apakah dua nilai sama. Menghasilkan `true` jika dua nilai tersebut sama atau `false` jika tidak.

### Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

### Parameter
<a name="w2aac24c20c15b7"></a>

value  
Nilai string yang ingin Anda bandingkan.

### `Fn::Equals`contoh penggunaan
<a name="w2aac24c20c15b9"></a>

Syarat `IsProduction` berikut bernilai true jika nilai untuk parameter `EnvironmentType` adalah sama dengan `prod`:

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

Mengembalikan satu nilai jika syarat yang ditentukan bernilai `true` dan nilai lain jika syarat yang ditentukan bernilai `false`. Saat ini, CloudFormation mendukung fungsi `Fn::If` intrinsik dalam `Metadata` atribut, `UpdatePolicy` atribut, dan nilai properti di `Resources` bagian dan `Outputs` bagian template. Anda dapat menggunakan pseudo parameter `AWS::NoValue` sebagai nilai kembali untuk menghapus properti yang sesuai.

### Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

### Parameter
<a name="w2aac24c20c19b7"></a>

condition\$1name  <a name="condition_name"></a>
Sebuah referensi untuk syarat di bagian Syarat. Gunakan nama syarat untuk mereferensikannya.

value\$1if\$1true  <a name="value_if_true"></a>
Nilai yang akan dikembalikan jika syarat yang ditentukan bernilai true.

value\$1if\$1false  <a name="value_if_false"></a>
Nilai yang akan dikembalikan jika syarat yang ditentukan bernilai `false`.

### `Fn::If`contoh penggunaan
<a name="w2aac24c20c19b9"></a>

**Topics**
+ [Memilih sumber daya secara kondisional](#w2aac24c20c19b9b5)
+ [Output bersyarat](#w2aac24c20c19b9b7)
+ [Nilai array bersyarat](#w2aac24c20c19b9b9)
+ [Properti bersyarat dan nilai properti](#w2aac24c20c19b9c11)
+ [Kebijakan pembaruan bersyarat](#w2aac24c20c19b9c13)

#### Memilih sumber daya secara kondisional
<a name="w2aac24c20c19b9b5"></a>

Contoh berikut menggunakan `Fn::If` fungsi dalam definisi EC2 sumber daya Amazon untuk menentukan sumber daya grup keamanan mana yang akan dikaitkan dengan instance. Jika `CreateNewSecurityGroup` kondisi dievaluasi ke true, CloudFormation gunakan nilai referensi `NewSecurityGroup` (grup keamanan yang dibuat di tempat lain dalam template) untuk menentukan properti. `SecurityGroupIds` Jika `CreateNewSecurityGroup` salah, CloudFormation gunakan nilai referensi `ExistingSecurityGroupId` (parameter yang mereferensikan grup keamanan yang ada).

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

#### Output bersyarat
<a name="w2aac24c20c19b9b7"></a>

Di `Output` bagian templat, Anda dapat menggunakan `Fn::If` fungsi untuk mengeluarkan informasi secara kondisional. Dalam cuplikan berikut, jika `CreateNewSecurityGroup` kondisi dievaluasi ke true, CloudFormation output ID grup keamanan sumber daya. `NewSecurityGroup` Jika kondisinya salah, CloudFormation output ID grup keamanan `ExistingSecurityGroup` sumber daya.

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

#### Nilai array bersyarat
<a name="w2aac24c20c19b9b9"></a>

Contoh berikut menggunakan `Fn::If` untuk memberikan nilai array yang berbeda secara kondisional berdasarkan kondisi. Jika `MoreThan2AZs` kondisi dievaluasi menjadi benar, ia menggunakan tiga subnet publik. Jika tidak, ia hanya menggunakan dua subnet publik.

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

#### Properti bersyarat dan nilai properti
<a name="w2aac24c20c19b9c11"></a>

Contoh berikut menggunakan parameter `AWS::NoValue` pseudo dalam suatu `Fn::If` fungsi. Kondisi ini menggunakan snapshot untuk instans Amazon RDS DB hanya jika ID snapshot disediakan. Jika `UseDBSnapshot` kondisi dievaluasi ke true, CloudFormation menggunakan nilai `DBSnapshotName` parameter untuk `DBSnapshotIdentifier` properti. Jika syarat bernilai salah, CloudFormation menghapus properti `DBSnapshotIdentifier`.

Ini juga menggunakan `Fn::If` fungsi di `AllocatedStorage` properti instans Amazon RDS DB. Jika `IsProduction` kondisi dievaluasi ke true, ukuran penyimpanan diatur ke`100`. Jika tidak, itu diatur ke`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"]
```

#### Kebijakan pembaruan bersyarat
<a name="w2aac24c20c19b9c13"></a>

Cuplikan berikut menyediakan kebijakan pembaruan Auto Scaling hanya jika kondisi dievaluasi `RollingUpdates` ke true. Jika kondisi dievaluasi menjadi false, CloudFormation hapus kebijakan `AutoScalingRollingUpdate` pemutakhiran.

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

Menghasilkan `true` untuk syarat yang bernilai `false` atau menghasilkan `false` untuk syarat yang bernilai `true`. `Fn::Not` bertindak sebagai operator NOT.

### Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

```
!Not [condition]
```

### Parameter
<a name="w2aac24c20c21b7"></a>

condition  <a name="condition"></a>
Suatu syarat seperti `Fn::Equals` yang bernilai `true` atau `false`.

### `Fn::Not`contoh penggunaan
<a name="w2aac24c20c21b9"></a>

Syarat `EnvCondition` berikut bernilai true jika nilai untuk parameter `EnvironmentType` tidak sama dengan `prod`:

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

Menghasilkan `true` jika semua syarat yang ditentukan bernilai true, atau menghasilkan `false` jika semua syarat bernilai false. `Fn::Or` bertindak sebagai operator OR. Jumlah minimum syarat yang dapat Anda sertakan adalah 2, dan maksimum adalah 10.

### Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

### Parameter
<a name="w2aac24c20c23b7"></a>

condition  
Suatu syarat yang bernilai `true` atau `false`.

### `Fn::Or`contoh penggunaan
<a name="w2aac24c20c23b9"></a>

`MyOrCondition` berikut ini bernilai true jika nama grup keamanan yang direferensikan sama dengan `sg-mysggroup` atau jika `SomeOtherCondition` bernilai 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]
```

## Fungsi yang didukung
<a name="w2aac24c20c25"></a>

Anda dapat menggunakan fungsi berikut di syarat `Fn::If`:
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

Anda dapat menggunakan fungsi-fungsi berikut di semua fungsi syarat lainnya, seperti `Fn::Equals` dan `Fn::Or`:
+ `Fn::FindInMap`
+ `Ref`
+ Fungsi syarat lainnya

## Templat sampel
<a name="conditions-sample-templates"></a>

### Membuat sumber daya secara kondisional untuk tumpukan produksi, pengembangan, atau tes
<a name="w2aac24c20c27b3"></a>

Dalam beberapa kasus, Anda mungkin ingin membuat tumpukan yang mirip tetapi dengan tweak kecil. Misalnya, Anda mungkin memiliki templat yang Anda gunakan untuk aplikasi produksi. Anda ingin membuat tumpukan produksi yang sama agar Anda dapat menggunakannya untuk pengembangan atau pengujian. Namun, untuk pengembangan dan pengujian, Anda mungkin tidak memerlukan semua kapasitas tambahan yang disertakan dalam tumpukan tingkat produksi. Sebaliknya, Anda dapat menggunakan parameter input jenis lingkungan guna membuat sumber daya tumpukan secara kondisional yang khusus untuk produksi, pengembangan, atau pengujian, seperti yang ditunjukkan dalam contoh berikut:

Anda dapat menentukan `prod`, `dev`, atau `test` untuk parameter `EnvType`. Untuk setiap jenis lingkungan, templat menentukan jenis instans yang berbeda. Jenis instans dapat berkisar dari instans besar yang dioptimalkan dengan komputasi hingga instans kecil untuk tujuan umum. Untuk menentukan jenis instance secara kondisional, template mendefinisikan dua kondisi di `Conditions` bagian template:`CreateProdResources`, yang mengevaluasi ke true jika nilai `EnvType` parameter sama dengan `prod` dan`CreateDevResources`, yang mengevaluasi ke true jika nilai parameter sama dengan. `dev`

Di properti `InstanceType`, templat menyimpan dua fungsi intrinsik `Fn::If` untuk menentukan jenis instans yang akan digunakan. Jika syarat `CreateProdResources` true, jenis instans adalah `c5.xlarge`. Jika syarat salah, syarat `CreateDevResources` dievaluasi. Jika syarat `CreateDevResources` true, jenis instans adalah `t3.medium` atau `t3.small`.

Selain jenis instans, lingkungan produksi membuat dan melampirkan EC2 volume Amazon ke instance. Sumber daya `MountPoint` dan `NewVolume` yang terkait dengan syarat `CreateProdResources` sehingga sumber daya dibuat hanya jika syarat bernilai true.

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

**catatan**  
Untuk contoh penggunaan kondisi yang lebih kompleks untuk membuat sumber daya, lihat [`Condition`atribut](aws-attribute-condition.md) topiknya.

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

Fungsi intrinsik `Fn::FindInMap` mengembalikan nilai yang sesuai dengan kunci dalam peta dua tingkat yang dideklarasikan di bagian. `Mappings`

## Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

**catatan**  
Anda tidak dapat me-nest dua instans dari dua fungsi dalam bentuk singkat.

## Parameter
<a name="w2aac24c25b7"></a>

MapName  <a name="MapName"></a>
Nama logis dari pemetaan dinyatakan di bagian Pemetaan yang berisi kunci dan nilai.

TopLevelKey  <a name="TopLevelKey"></a>
Nama kunci tingkat atas. Nilainya adalah daftar pasangan nilai kunci.

SecondLevelKey  <a name="SecondLevelKey"></a>
Nama kunci tingkat kedua, yang diatur ke salah satu kunci dari daftar yang ditetapkan untuk `TopLevelKey`.

## Nilai yang dikembalikan
<a name="w2aac24c25b9"></a>

Nilai yang ditetapkan untuk`SecondLevelKey`.

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

Contoh berikut menunjukkan cara menggunakan fungsi `Fn::FindInMap`.

**Topics**
+ [Gunakan Fn::FindInMap dengan nilai khusus wilayah](#intrinsic-function-reference-findinmap-region-example)
+ [Gunakan Fn::FindInMap untuk konfigurasi khusus lingkungan](#intrinsic-function-reference-findinmap-environment-example)

### Gunakan Fn::FindInMap dengan nilai khusus wilayah
<a name="intrinsic-function-reference-findinmap-region-example"></a>

Contoh berikut menunjukkan cara menggunakan `Fn::FindInMap` dalam template yang mencakup dua pemetaan: `AWSInstanceType2Arch` dan. `AWSRegionArch2AMI` Ini juga mencakup `InstanceType` parameter yang memungkinkan Anda memilih antara `t3.micro` dan`t4g.nano`. Defaultnya adalah`t3.micro`, tetapi ini dapat diganti selama pembuatan tumpukan. 

`Fn::FindInMap`pertama-tama menentukan arsitektur (`HVM64`atau`ARM64`) berdasarkan jenis instance yang dipilih, dan kemudian mencari ID AMI yang benar untuk arsitektur tersebut saat ini Wilayah AWS. 

**catatan**  
AMI yang IDs ditunjukkan dalam contoh ini adalah placeholder untuk tujuan demonstrasi. Jika memungkinkan, pertimbangkan untuk menggunakan referensi dinamis ke AWS Systems Manager parameter sebagai alternatif untuk `Mappings` bagian tersebut. Untuk menghindari memperbarui semua template Anda dengan ID baru setiap kali AMI yang ingin Anda gunakan berubah, gunakan AWS Systems Manager parameter untuk mengambil ID AMI terbaru saat tumpukan dibuat atau diperbarui. Versi terbaru yang umum digunakan juga AMIs tersedia sebagai parameter publik di Systems Manager. Untuk informasi selengkapnya, lihat [Mendapatkan nilai yang disimpan di layanan lain menggunakan referensi dinamis](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
```

### Gunakan Fn::FindInMap untuk konfigurasi khusus lingkungan
<a name="intrinsic-function-reference-findinmap-environment-example"></a>

Contoh berikut menunjukkan bagaimana menggunakan `Fn::FindInMap` untuk template dengan `Mappings` bagian yang berisi peta tunggal,`SecurityGroups`. Ini juga berisi `EnvironmentType` parameter yang memungkinkan Anda menentukan apakah lingkungan tersebut `Dev` atau`Prod`. Defaultnya `Dev` tetapi dapat diganti selama pembuatan tumpukan.

`Fn::FindInMap`mengembalikan yang sesuai `SecurityGroupIds` berdasarkan `EnvironmentType` parameter. `Fn::Split`kemudian membagi string grup keamanan yang dipisahkan koma IDs ke dalam daftar, yang merupakan format yang diharapkan untuk. [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)

Jika Anda menerapkan tumpukan ini dengan `EnvironmentType` set to`Dev`, `SecurityGroupIds` for `EC2Instance` akan menjadi`sg-12345678`. Jika Anda mengatur `EnvironmentType` ke`Prod`, itu akan menggunakan `sg-abcdef01` dan`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 ]
```

## Fungsi yang didukung
<a name="w2aac24c25c13"></a>

Anda dapat menggunakan fungsi berikut di fungsi `Fn::FindInMap`:
+ `Fn::FindInMap`
+ `Ref`

## Sumber daya terkait
<a name="w2aac24c25c15"></a>

Untuk menggunakan fungsi intrinsik lainnya atau nilai default dalam suatu `Fn::FindInMap` fungsi, Anda harus mendeklarasikan `AWS::LanguageExtensions` transformasi dalam template Anda. Untuk informasi selengkapnya, lihat [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md).

Topik terkait ini dapat membantu saat Anda mengembangkan templat yang menggunakan `Fn::FindInMap` fungsi tersebut.
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [CloudFormationMappingssintaks template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html) di *AWS CloudFormation Panduan Pengguna*

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

Fungsi `Fn::ForEach` intrinsik mengambil koleksi dan fragmen, dan menerapkan item dalam koleksi ke pengidentifikasi di fragmen yang disediakan. `Fn::ForEach`dapat berisi fungsi intrinsik lainnya, termasuk `Fn::ForEach` dirinya sendiri, dan digunakan dalam bagian`Conditions`,`Outputs`, dan `Resources` (termasuk properti sumber daya). Ini tidak dapat digunakan di salah satu bagian berikut, `AWSTemplateFormatVersion``Description`,`Metadata`,`Transform`,`Parameters`, `Mappings``Rules`, atau `Hooks` bagian.

Jika Anda menggunakan fungsi `Fn::ForEach` intrinsik dalam template Anda, Anda juga harus menggunakan. [Tansformasi `AWS::LanguageExtensions`](transform-aws-languageextensions.md)

Menggunakan fungsi `Fn::ForEach` intrinsik tidak mengubah kuota, yang berlaku untuk template yang dihasilkan. Kuota mencakup ukuran maksimum template dan jumlah maksimum sumber daya dalam template. Untuk informasi selengkapnya, lihat [Memahami CloudFormation kuota](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html) di *Panduan AWS CloudFormation Pengguna*.

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

## Parameter
<a name="intrinsic-function-reference-foreach-parameters"></a>

*Loop nama logis*  
ID logis untuk loop. Nama harus unik dalam template dan tidak dapat bertentangan dengan nilai ID logis di `Resources` bagian template. Nama ini tidak ada dalam output yang diubah. Ini digunakan untuk referensi internal dalam CloudFormation template itu sendiri.

*Pengidentifikasi*  
Pengidentifikasi untuk placeholder yang diganti dalam parameter dan`OutputKey`. `OutputValue` Semua contoh `${Identifier}` atau `&{Identifier}` dalam `OutputValue` parameter `OutputKey` dan akan diganti dengan nilai dari `Collection` parameter.

*Koleksi*  
Kumpulan nilai untuk diulang. Ini bisa berupa array dalam parameter ini, atau bisa juga [`Ref`](intrinsic-function-reference-ref.md) ke a`CommaDelimitedList`. Saat menggunakan`&{Identifier}`, karakter non-alfanumerik dapat diteruskan di file. `Collection`

*Kunci keluaran*  
Kunci dalam template yang diubah. `${Identifier}`atau `&{Identifier}` harus dimasukkan dalam `OutputKey` parameter. Misalnya, jika `Fn::ForEach` digunakan di `Resources` bagian template, ini adalah ID logis dari setiap sumber daya.  
`&{}`Sintaks memungkinkan karakter non-alfanumerik dalam `Collection` untuk digunakan dalam parameter. `OutputKey` Untuk contoh ini, lihat[Melewati karakter non-alfanumerik dalam for `Collection` `Fn::ForEach`](intrinsic-function-reference-foreach-example-resource.md#intrinsic-function-reference-foreach-example-non-alphanumeric).

*Nilai keluaran*  
Nilai yang direplikasi dalam template yang diubah untuk setiap item dalam `Collection` parameter. Misalnya, jika `Fn::ForEach` digunakan di `Resources` bagian template, ini adalah fragmen template yang diulang untuk mengonfigurasi setiap sumber daya.

## Nilai yang dikembalikan
<a name="intrinsic-function-reference-foreach-return-value"></a>

Objek yang diperluas yang berisi fragmen objek diulang sekali untuk setiap item dalam koleksi, di mana pengidentifikasi dalam fragmen diganti dengan item dari koleksi.

## Fungsi yang didukung
<a name="intrinsic-function-reference-foreach-nested-functions"></a>

Anda dapat menggunakan fungsi-fungsi berikut di dalamnya`Fn::ForEach`.
+ Fungsi kondisi:
  + [`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)

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

Anda dapat menemukan contoh untuk`Conditions`,`Outputs`, dan `Resources` bagian di[Contoh](intrinsic-function-reference-foreach-examples.md).

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

**Topics**
+ [Contoh `Fn::ForEach` di `Resources` bagian](intrinsic-function-reference-foreach-example-resource.md)
+ [Contoh `Fn::ForEach` di `Outputs` bagian](intrinsic-function-reference-foreach-example-outputs.md)
+ [Contoh `Fn::ForEach` di `Conditions` bagian](intrinsic-function-reference-foreach-example-conditions.md)

# Contoh `Fn::ForEach` di `Resources` bagian
<a name="intrinsic-function-reference-foreach-example-resource"></a>

Contoh-contoh ini menunjukkan penggunaan fungsi `Fn::ForEach` intrinsik di bagian tersebut. `Resources` Untuk informasi selengkapnya tentang bagian ini, lihat [Sumber daya](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html) di *Panduan AWS CloudFormation Pengguna*.

**Topics**
+ [Replikasi sumber daya Amazon SNS](#intrinsic-function-reference-foreach-example-replicate-resource)
+ [Mereplikasi sumber daya Amazon DynamoDB](#intrinsic-function-reference-foreach-example-replicate-ddb-resource)
+ [Replikasi beberapa sumber daya](#intrinsic-function-reference-foreach-example-replicate-multiple-resources)
+ [Replikasi beberapa sumber daya menggunakan loop bersarang `Fn::ForEach`](#intrinsic-function-reference-foreach-example-nested-loop-resources)
+ [Referensi properti yang direplikasi untuk sumber daya Amazon EC2](#intrinsic-function-reference-foreach-example-reference-replicated-resource)
+ [Mereplikasi properti untuk sumber daya Amazon EC2](#intrinsic-function-reference-foreach-example-replicate-resource-properties)
+ [Melewati karakter non-alfanumerik dalam for `Collection` `Fn::ForEach`](#intrinsic-function-reference-foreach-example-non-alphanumeric)

## Replikasi sumber daya Amazon SNS
<a name="intrinsic-function-reference-foreach-example-replicate-resource"></a>

Contoh cuplikan ini mengembalikan daftar empat topik Amazon SNS, dengan ID logis yang sesuai dengan item dalam koleksi `Success` (`Failure`,,,) `Timeout``Unknown`, dengan `TopicName` pencocokan `FifoTopic` dan disetel ke. `true`

**catatan**  
Untuk template yang perlu bekerja dengan FIFO dan topik standar, Anda dapat menggunakan `DisplayName` properti alih-alih. `TopicName` Hal ini memungkinkan CloudFormation untuk secara otomatis menghasilkan nama topik dengan `.fifo` akhiran yang sesuai kapan`FifoTopic`. `true` Cukup ganti `TopicName` dengan `DisplayName: !Ref TopicName` di `Properties` bagian.

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

Template yang diubah akan setara dengan template berikut:

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

## Mereplikasi sumber daya Amazon DynamoDB
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource"></a>

Contoh cuplikan ini menciptakan empat [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-dynamodb-table.html)sumber daya dengan nama seperti`Points`,`Score`, dll.

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

Template yang diubah akan setara dengan template berikut:

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

## Replikasi beberapa sumber daya
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources"></a>

Contoh ini membuat beberapa instance [AWS::EC2::NatGateway](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-natgateway.html)dan [AWS: :EC2: :EIP](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-eip.html) menggunakan konvensi penamaan. `"{ResourceType}${Identifier}"` Anda dapat mendeklarasikan beberapa jenis sumber daya di bawah satu `Fn::ForEach` loop untuk memanfaatkan pengenal tunggal.

Nilai unik untuk setiap elemen dalam koleksi didefinisikan dalam `Mappings` bagian, di mana fungsi [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md) intrinsik digunakan untuk referensi nilai yang sesuai. Jika `Fn::FindInMap` tidak dapat menemukan pengenal yang sesuai, `Condition` properti tidak akan disetel untuk menyelesaikannya. `!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
```

Template yang diubah akan setara dengan template berikut:

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

## Replikasi beberapa sumber daya menggunakan loop bersarang `Fn::ForEach`
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources"></a>

Contoh ini menggunakan `Fn::ForEach` loop bersarang untuk memetakan tiga sumber daya ([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), dan [AWS::EC2::SubnetNetworkAclAssociation](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-subnetnetworkaclassociation.html)) satu sama lain.

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

Template yang diubah akan setara dengan template berikut:

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

## Referensi properti yang direplikasi untuk sumber daya Amazon EC2
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource"></a>

Contoh ini menggunakan fungsi `Fn::ForEach` intrinsik untuk referensi sumber daya yang direplikasi [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]
```

Template yang diubah akan setara dengan template berikut:

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

## Mereplikasi properti untuk sumber daya Amazon EC2
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties"></a>

Contoh ini menggunakan fungsi `Fn::ForEach` intrinsik untuk mengulang beberapa properti seperti`ImageId`,`InstanceType`, dan `AvailabilityZone` ke sumber daya. [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'}
```

Template yang diubah akan setara dengan template berikut:

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

## Melewati karakter non-alfanumerik dalam for `Collection` `Fn::ForEach`
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric"></a>

Contoh ini menggunakan `&{}` sintaks, yang memungkinkan karakter non-alfanumerik (`.`dan`/`) di alamat IP yang akan diteruskan dalam file. `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
```

Template yang diubah akan setara dengan template berikut:

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

# Contoh `Fn::ForEach` di `Outputs` bagian
<a name="intrinsic-function-reference-foreach-example-outputs"></a>

Contoh-contoh ini menunjukkan penggunaan fungsi `Fn::ForEach` intrinsik di bagian tersebut. `Outputs` Untuk informasi selengkapnya tentang bagian ini, lihat [Output](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html) di *Panduan AWS CloudFormation Pengguna*.

**Topics**
+ [Referensi sumber daya yang direplikasi `AWS::S3::Bucket`](#intrinsic-function-reference-foreach-example-replicate-outputs)
+ [Referensi sumber daya yang direplikasi `AWS::EC2::Instance`](#intrinsic-function-reference-foreach-example-replicate-conditions)

## Referensi sumber daya yang direplikasi `AWS::S3::Bucket`
<a name="intrinsic-function-reference-foreach-example-replicate-outputs"></a>

Contoh ini menggunakan `Fn::ForEach` loop bersarang di `Outputs` bagian untuk mengurangi panjang template.

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

Template yang diubah akan setara dengan template berikut:

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

## Referensi sumber daya yang direplikasi `AWS::EC2::Instance`
<a name="intrinsic-function-reference-foreach-example-replicate-conditions"></a>

Contoh ini mereferensikan sumber daya yang direplikasi di `Resources` bagian menggunakan logika IDs yang dihasilkan. 

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

Template yang diubah akan setara dengan template berikut:

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

# Contoh `Fn::ForEach` di `Conditions` bagian
<a name="intrinsic-function-reference-foreach-example-conditions"></a>

Contoh-contoh ini menunjukkan penggunaan fungsi `Fn::ForEach` intrinsik di bagian tersebut. `Conditions` Untuk informasi selengkapnya tentang bagian ini, lihat [Ketentuan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) di *Panduan AWS CloudFormation Pengguna*.

**penting**  
`Conditions`harus menjadi properti kedua yang terdaftar, atau yang lebih baru. Pembuatan tumpukan akan gagal jika `Conditions` merupakan properti pertama yang terdaftar dalam parameter fragmen template. `Fn::ForEach`

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

`Conditions`harus ditambahkan sebagai kunci kedua, atau yang lebih baru, agar pembuatan tumpukan berhasil: 

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

**Topics**
+ [Replikasi satu kondisi](#intrinsic-function-reference-foreach-example-replicated-single-condition)

## Replikasi satu kondisi
<a name="intrinsic-function-reference-foreach-example-replicated-single-condition"></a>

Contoh ini menggunakan fungsi `Fn::ForEach` intrinsik di `Conditions` bagian untuk mereplikasi beberapa kondisi serupa dengan properti yang berbeda.

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

Template yang diubah akan setara dengan template berikut:

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

Fungsi intrinsik `Fn::GetAtt` mengembalikan nilai atribut dari sumber daya di dalam templat. 

## Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

```
!GetAtt logicalNameOfResource.attributeName
```

## Parameter
<a name="getatt-parameters"></a>

`logicalNameOfResource`  
Nama logis (juga disebut *ID logis*) dari sumber daya yang berisi atribut yang Anda inginkan.

`attributeName`  
Nama atribut sumber daya spesifik yang nilainya Anda inginkan. Lihat halaman referensi sumber daya untuk detail tentang atribut yang tersedia untuk jenis sumber daya tersebut.

## Nilai yang dikembalikan
<a name="intrinsic-function-reference-getatt-return"></a>

Nilai atribut. Untuk informasi tentang nilai `GetAtt` pengembalian sumber daya, lihat dokumentasi untuk sumber daya di[Referensi sumber daya dan properti](aws-template-resource-type-ref.md).

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

### Mengembalikan nilai atribut
<a name="intrinsic-function-reference-getatt-example"></a>

Contoh berikut mengembalikan string yang berisi nama DNS penyeimbang beban dengan nama logis. `myELB`

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

#### Kembalikan beberapa nilai atribut
<a name="intrinsic-function-reference-getatt-example2"></a>

Contoh berikut mengembalikan `SourceSecurityGroup.OwnerAlias` dan `SourceSecurityGroup.GroupName` penyeimbang beban dengan nama `myELB` logis.

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

#### Gunakan `Fn::GetAtt` fungsi `Fn::Sub` dalam
<a name="intrinsic-function-reference-getatt-foreach"></a>

**catatan**  
Ketika Anda menggunakan `AWS::LanguageExtensions` transformasi, Anda dapat menggunakan `Fn::GetAtt` dalam kombinasi dengan fungsi intrinsik lainnya. Untuk fungsi yang didukung, lihat[Fungsi yang didukung](#getatt-supported-functions).

Contoh berikut menunjukkan cara menggunakan `Fn::GetAtt` dengan[`Fn::Sub`](intrinsic-function-reference-sub.md), bersamaan dengan, di `Outputs` bagian template untuk mengurangi panjang template dan verbositas. [`Fn::ForEach`](intrinsic-function-reference-foreach.md) Penggunaan `Fn::Sub` inside `Fn::GetAtt` memungkinkan template berisi satu fungsi intrinsik yang dapat mereferensikan bucket yang berbeda pada setiap iterasi panggilan. `Fn::ForEach` 

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

## Fungsi yang didukung
<a name="getatt-supported-functions"></a>

Saat Anda menggunakan [AWS::LanguageExtensionstransformasi](transform-aws-languageextensions.md), Anda dapat menggunakan fungsi-fungsi berikut dalam `Fn::GetAtt` fungsi tersebut. Ini benar dengan nama sumber daya `Fn::GetAtt` logis atau nama `Fn::GetAtt` atribut.
+ [`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)

Ketika `AWS::LanguageExtensions` transformasi tidak digunakan:
+ Nama `Fn::GetAtt` atribut hanya dapat menggunakan [`Ref`](intrinsic-function-reference-ref.md) fungsi.
+ Nama sumber daya `Fn::GetAtt` logis tidak dapat menggunakan fungsi. Anda harus menentukan string yang merupakan ID logis sumber daya. 

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

Fungsi intrinsik `Fn::GetAZs` mengembalikan array yang mencantumkan Availability Zones untuk Wilayah tertentu dalam urutan abjad. Karena pelanggan memiliki akses ke berbagai Availability Zone, fungsi intrinsik `Fn::GetAZs` memungkinkan penulis templat untuk menulis templat yang beradaptasi terhadap akses pengguna pemanggilan. Dengan begitu Anda tidak perlu membuat hard-code daftar lengkap Availability Zones untuk Wilayah tertentu.

**penting**  
`Fn::GetAZs`Fungsi hanya mengembalikan Availability Zones yang memiliki subnet default kecuali tidak ada Availability Zones yang memiliki subnet default; dalam hal ini, semua Availability Zones dikembalikan.  
Demikian pula dengan respons dari `describe-availability-zones` AWS CLI perintah, urutan hasil dari `Fn::GetAZs` fungsi tidak dijamin dan dapat berubah saat Availability Zone baru ditambahkan.

Izin IAM

Izin yang Anda perlukan untuk menggunakan `Fn::GetAZs` fungsi bergantung pada platform tempat Anda meluncurkan instans Amazon EC2. Untuk kedua platform, Anda memerlukan izin ke Amazon `DescribeAvailabilityZones` EC2 `DescribeAccountAttributes` dan tindakan. Untuk EC2-VPC, Anda juga memerlukan izin untuk tindakan Amazon EC2. `DescribeSubnets`

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

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

```
{ "Fn::GetAZs" : "region" }
```

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

Sintaks untuk nama fungsi penuh:

```
Fn::GetAZs: region
```

Sintaks untuk bentuk pendek:

```
!GetAZs region
```

## Parameter
<a name="intrinsic-function-reference-getazs-parameters"></a>

region  <a name="region"></a>
Nama Wilayah yang ingin Anda dapatkan Availability Zones.  
Anda dapat menggunakan parameter `AWS::Region` semu untuk menentukan Wilayah tempat tumpukan dibuat. Penentuan string kosong setara dengan penentuan `AWS::Region`.

## Nilai yang dikembalikan
<a name="intrinsic-function-reference-getazs-return-value"></a>

Daftar Availability Zone untuk Wilayah tersebut.

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

### Mengevaluasi Wilayah
<a name="intrinsic-function-reference-getazs-examples-evaluate-region"></a>

Untuk contoh ini, CloudFormation evaluasi `Fn::GetAZs` ke array berikut—dengan asumsi bahwa pengguna telah membuat tumpukan di Wilayah: `us-east-1`

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

 

### Menentukan Availability Zone subnet
<a name="intrinsic-function-reference-getazs-examples-subnet-az"></a>

Contoh berikut menggunakan `Fn::GetAZs` untuk menentukan Availability Zone subnet:

#### 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: ""
```

 

### Fungsi ber-nest dengan YAML bentuk singkat
<a name="intrinsic-function-reference-getazs-examples-nested-functions"></a>

Contoh berikut menunjukkan pola yang valid untuk menggunakan fungsi intrinsik ber-nest menggunakan YAML bentuk singkat. Anda tidak dapat meng-nest fungsi bentuk singkat secara berturut-turut, sehingga pola seperti `!GetAZs !Ref` menjadi tidak valid.

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

## Fungsi yang didukung
<a name="intrinsic-function-reference-getazs-supported-functions"></a>

Anda dapat menggunakan fungsi `Ref` di fungsi `Fn::GetAZs`.

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

Fungsi intrinsik `Fn::ImportValue` mengembalikan nilai output yang diekspor oleh tumpukan lain. Anda biasanya menggunakan fungsi ini untuk membuat referensi lintas-tumpukan. *Untuk informasi selengkapnya, lihat [Panduan: Mengacu ke output sumber daya di CloudFormation tumpukan lain di](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html) Panduan Pengguna.AWS CloudFormation *

Dalam contoh cuplikan templat berikut, Tumpukan A mengekspor nilai-nilai grup keamanan VPC dan Tumpukan B mengimpornya.

**catatan**  
Pembatasan berikut berlaku untuk referensi cross-stack:  
Untuk masing-masing Akun AWS, `Export` nama harus unik dalam suatu Wilayah.
Anda tidak dapat membuat referensi cross-stack di seluruh Wilayah. Anda dapat menggunakan fungsi intrinsik `Fn::ImportValue` untuk mengimpor hanya nilai yang telah diekspor dalam Wilayah yang sama.
Untuk output, nilai `Name` properti tidak `Export` dapat digunakan `Ref` atau `GetAtt` fungsi yang bergantung pada sumber daya.  
Demikian pula, `ImportValue` fungsi tidak dapat menyertakan `Ref` atau `GetAtt` fungsi yang bergantung pada sumber daya.
Setelah tumpukan lain mengimpor nilai output, Anda tidak dapat menghapus tumpukan yang mengekspor nilai output atau memodifikasi nilai output yang diekspor. Semua impor harus dihapus sebelum Anda dapat menghapus tumpukan ekspor atau mengubah nilai output.

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

Ekspor Tumpukan 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>

Ekspor Tumpukan 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>

Impor Tumpukan 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>

Impor Tumpukan 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'
```

## Pernyataan
<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>

Anda dapat menggunakan nama fungsi penuh:

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

Sebagai alternatif, Anda dapat menggunakan bentuk pendek:

```
!ImportValue sharedValueToImport
```

**penting**  
Anda tidak dapat menggunakan bentuk pendek `!ImportValue` ketika berisi bentuk pendek`!Sub`.   

```
# do not use
!ImportValue
  !Sub '${NetworkStack}-SubnetID'
```
Sebaliknya, Anda harus menggunakan nama fungsi lengkap, misalnya:  

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

## Parameter
<a name="w2aac24c43c13"></a>

sharedValueToImpor  
Nilai output stack yang ingin Anda impor.

## Nilai yang dikembalikan
<a name="w2aac24c43c15"></a>

Nilai output stack.

## Contoh
<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"
```

## Fungsi yang didukung
<a name="w2aac24c43c19"></a>

Anda dapat menggunakan fungsi berikut di fungsi `Fn::ImportValue`. Nilai dari fungsi-fungsi ini tidak dapat bergantung pada sumber daya.
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

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

Fungsi intrinsik `Fn::Join` menambahkan serangkaian nilai ke nilai tunggal, yang dipisahkan oleh pembatas yang ditentukan. Jika pembatas adalah string kosong, rangkaian nilai digabungkan tanpa pembatas.

## Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

## Parameter
<a name="intrinsic-function-reference-join-parameters"></a>

pembatas  
Nilai yang Anda inginkan untuk terjadi antara fragmen. Pembatas akan terjadi antara fragmen saja. Ini tidak akan mengakhiri nilai akhir.

ListOfValues  
Daftar nilai yang Anda inginkan digabungkan.

## Nilai yang dikembalikan
<a name="intrinsic-function-reference-join-returnvalues"></a>

String gabungan.

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

### Bergabung dengan array string sederhana
<a name="intrinsic-function-reference-join-example1"></a>

Contoh berikut mengembalikan: `"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 ] ]
```

### Bergabung menggunakan fungsi ref dengan parameter
<a name="intrinsic-function-reference-join-example2"></a>

Contoh berikut menggunakan `Fn::Join` untuk membangun nilai string. Ini menggunakan fungsi `Ref` dengan parameter `AWS::Partition` dan parameter semu `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
```

**catatan**  
Juga lihat fungsi [`Fn::Sub`](intrinsic-function-reference-sub.md) untuk fungsi yang serupa.

## Fungsi yang didukung
<a name="intrinsic-function-reference-join-supportedfunctions"></a>

Untuk pembatas `Fn::Join`, Anda tidak dapat menggunakan fungsi apa pun. Anda harus menentukan nilai string.

Untuk daftar `Fn::Join` dari nilai, Anda dapat menggunakan fungsi berikut:
+ `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>

Fungsi intrinsik `Fn::Length` mengembalikan jumlah elemen dalam array atau fungsi intrinsik yang mengembalikan array.

**penting**  
Anda harus menggunakan [Tansformasi `AWS::LanguageExtensions`](transform-aws-languageextensions.md) untuk menggunakan fungsi `Fn::Length` intrinsik.

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

## Parameter
<a name="length-parameters"></a>

`IntrinsicFunction`  
Fungsi intrinsik yang mengembalikan array yang Anda ingin mengembalikan sejumlah elemen dari.

`Array`  
Array Anda ingin mengembalikan jumlah elemen dari.

## Nilai yang dikembalikan
<a name="intrinsic-function-reference-length-return"></a>

Jumlah elemen dalam fungsi intrinsik yang mengembalikan array atau dalam array diteruskan ke fungsi intrinsik. 

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

### Mengembalikan jumlah elemen dalam fungsi intrinsik yang mengembalikan array
<a name="intrinsic-function-reference-length-example-subsection"></a>

Contoh cuplikan ini mengembalikan jumlah elemen dalam fungsi intrinsik yang mengembalikan array. Fungsi mengembalikan 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"]
#...
```

### Kembalikan jumlah elemen dalam fungsi intrinsik Ref yang mengacu pada tipe parameter daftar
<a name="intrinsic-function-reference-length-example2"></a>

Contoh cuplikan ini mengembalikan jumlah elemen dalam fungsi `Ref` intrinsik yang mengacu pada jenis parameter daftar. Jika parameter dengan nama `ListParameter` adalah daftar dengan 3 elemen, fungsi mengembalikan 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
#...
```

### Mengembalikan jumlah elemen dalam array
<a name="intrinsic-function-reference-length-example3"></a>

Contoh cuplikan ini mengembalikan jumlah elemen dalam array diteruskan ke fungsi intrinsik. Fungsi mengembalikan 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
#...
```

## Fungsi yang didukung
<a name="length-supported-functions"></a>

Anda dapat menggunakan fungsi-fungsi berikut dalam fungsi `Fn::Length` intrinsik atau array:
+ `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>

Fungsi intrinsik `Fn::Select` mengembalikan objek tunggal dari daftar objek berdasarkan indeks.

**penting**  
`Fn::Select` tidak memeriksa nilai null atau apakah indeks berada di luar batas susunan. Kedua kondisi akan menghasilkan kesalahan tumpukan, sehingga Anda harus yakin bahwa indeks yang Anda pilih valid, dan daftar berisi nilai non-null.

## Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

## Parameter
<a name="w2aac24c58b9"></a>

indeks  
Indeks objek untuk mengambil. Ini harus berupa nilai dari nol ke N-1, di mana N mewakili jumlah elemen dalam susunan.

listOfObjects  
Daftar objek untuk memilih. Daftar ini tidak boleh null, juga tidak boleh memiliki entri null.

## Nilai yang dikembalikan
<a name="w2aac24c58c11"></a>

Objek yang dipilih.

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

### Contoh basic
<a name="w2aac24c58c13b3"></a>

Contoh berikut mengembalikan: `"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" ] ]
```

 

### Jenis parameter daftar yang dibatasi koma
<a name="w2aac24c58c13b5"></a>

Anda dapat menggunakan `Fn::Select` untuk memilih objek dari parameter `CommaDelimitedList`. Anda mungkin menggunakan parameter `CommaDelimitedList` untuk menggabungkan nilai parameter terkait, yang mengurangi jumlah total parameter di templat Anda. Misalnya, parameter berikut menentukan daftar yang dibatasi koma dari tiga blok 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"
```

Untuk menentukan salah satu dari tiga blok CIDR, gunakan `Fn::Select` di bagian Sumber Daya dari templat yang sama, seperti yang ditunjukkan dalam sampel cuplikan berikut:

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

 

### Fungsi ber-nest dengan YAML bentuk singkat
<a name="w2aac24c58c13b7"></a>

Contoh berikut menunjukkan pola yang valid untuk menggunakan fungsi intrinsik ber-nest dengan bentuk singkat `!Select`. Anda tidak dapat me-nest fungsi bentuk singkat secara berturut-turut, sehingga pola seperti `!GetAZs !Ref` adalah tidak valid.

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

## Fungsi yang didukung
<a name="w2aac24c58c15"></a>

Untuk nilai indeks `Fn::Select`, Anda dapat menggunakan fungsi `Ref` dan `Fn::FindInMap`.

Untuk daftar `Fn::Select` dari objek, Anda dapat menggunakan fungsi berikut:
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Split`
+ `Ref`

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

Untuk membagi string ke dalam daftar nilai string sehingga Anda dapat memilih elemen dari daftar string yang dihasilkan, gunakan fungsi intrinsik `Fn::Split`. Tentukan lokasi pembagian dengan pembatas, seperti `,` (koma). Setelah Anda membagi string, gunakan fungsi [`Fn::Select`](intrinsic-function-reference-select.md) untuk memilih elemen tertentu.

Misalnya, jika string subnet yang dibatasi koma IDs diimpor ke template tumpukan Anda, Anda dapat membagi string pada setiap koma. Dari daftar subnet IDs, gunakan fungsi `Fn::Select` intrinsik untuk menentukan ID subnet untuk sumber daya.

## Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

## Parameter
<a name="w2aac24c62b9"></a>

Anda harus menentukan kedua parameter.

pembatas  
Nilai string yang menentukan di mana string sumber dibagi.

string sumber  
Nilai string yang ingin Anda bagi.

## Nilai yang dikembalikan
<a name="w2aac24c62c11"></a>

Daftar nilai string.

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

Contoh berikut menunjukkan perilaku dari fungsi `Fn::Split`.

### Daftar sederhana
<a name="w2aac24c62c13b5"></a>

Contoh berikut membagi string pada setiap bar vertikal (`|`). Fungsi mengembalikan `["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" ]
```

 

### Daftar dengan nilai string kosong
<a name="w2aac24c62c13b7"></a>

Jika Anda membagi string dengan pembatas berturut-turut, daftar yang dihasilkan akan mencakup string kosong. Contoh berikut menunjukkan cara string dengan dua pembatas berturut-turut dan pembatas yang ditambahkan dibagi. Fungsi mengembalikan `["a", "", "c", ""]`.

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

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

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

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

 

### Membagi nilai output yang diimpor
<a name="w2aac24c62c13b9"></a>

Contoh berikut membagi nilai output yang diimpor, dan kemudian memilih elemen ketiga dari daftar subnet yang dihasilkan IDs, seperti yang ditentukan oleh fungsi. `Fn::Select`

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

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

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

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

## Fungsi yang didukung
<a name="w2aac24c62c15"></a>

Untuk pembatas `Fn::Split`, Anda tidak dapat menggunakan fungsi apa pun. Anda harus menentukan nilai string.

Untuk daftar `Fn::Split` dari nilai, Anda dapat menggunakan fungsi berikut:
+ `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>

Fungsi instrinsik `Fn::Sub` menggantikan variabel dalam string input dengan nilai-nilai yang Anda tentukan. Dalam templat Anda, Anda dapat menggunakan fungsi ini untuk membuat perintah atau output yang menyertakan nilai-nilai yang tidak tersedia sampai Anda membuat atau memperbarui tumpukan.

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

Bagian berikut menunjukkan sintaks fungsi ini.

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

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

Jika Anda hanya mengganti parameter templat, logika sumber daya IDs, atau atribut sumber daya dalam `String` parameter, jangan tentukan peta variabel.

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

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

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

Jika Anda hanya mengganti parameter templat, logika sumber daya IDs, atau atribut sumber daya dalam `String` parameter, jangan tentukan peta variabel.

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

```
!Sub String
```

## Parameter
<a name="w2aac24c66b7"></a>

`String`  
String dengan variabel yang CloudFormation menggantikan nilai terkait saat runtime. Tulis variabel sebagai `${MyVarName}`. Variabel dapat berupa nama parameter template, logika sumber daya IDs, atribut sumber daya, atau variabel dalam peta nilai-kunci. Jika Anda hanya menentukan nama parameter template, logika sumber daya IDs, dan atribut sumber daya, jangan tentukan peta nilai kunci.  
Jika Anda menentukan nama parameter template atau sumber daya logis IDs, seperti`${InstanceTypeParameter}`, CloudFormation mengembalikan nilai yang sama seperti jika Anda menggunakan fungsi `Ref` intrinsik. Jika Anda menentukan atribut sumber daya, seperti`${MyInstance.PublicIp}`, CloudFormation mengembalikan nilai yang sama seperti jika Anda menggunakan fungsi `Fn::GetAtt` intrinsik.  
Untuk menulis tanda dolar dan kurawal kurawal (`${}`) secara harfiah, tambahkan tanda seru (`!`) setelah penjepit keriting terbuka, seperti. `${!Literal}` CloudFormation menyelesaikan teks ini sebagai. `${Literal}`  
Jika Anda menggunakan template peluncuran, tambahkan garis miring terbalik `\` sebelum tanda dolar, seperti, jika tidak`\${!Literal}`, literal akan diselesaikan sebagai string kosong.

`VarName`  
Nama variabel yang Anda sertakan dalam parameter `String`.

`VarValue`  
Nilai yang CloudFormation menggantikan nama variabel terkait saat runtime.

## Nilai yang dikembalikan
<a name="w2aac24c66b9"></a>

CloudFormation mengembalikan string asli, menggantikan nilai-nilai untuk semua variabel.

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

Contoh berikut menunjukkan cara menggunakan fungsi `Fn::Sub`.

### Gunakan `Fn::Sub` tanpa peta nilai kunci
<a name="w2aac24c66c11b5"></a>

Dalam contoh sederhana ini, deskripsi `InstanceSecurityGroup` sumber daya dibuat secara dinamis dengan parameter `AWS::StackName` semu. Misalnya, jika nama tumpukan adalah "VPC-EC2-ALB-Stack“, deskripsi yang dihasilkan adalah"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}"
```

### Gunakan `Fn::Sub` dengan peta nilai kunci
<a name="w2aac24c66c11b7"></a>

Dalam contoh ini, nama `WWWBucket` sumber daya dibuat secara dinamis dengan peta nilai kunci. `Fn::Sub`Fungsi menggantikan `${Domain}` string input `www.${Domain}` dengan nilai dari `Ref` fungsi yang mereferensikan `RootDomainName` parameter yang didefinisikan dalam template tumpukan yang sama. Misalnya, jika nama domain root adalah "mydomain.com“, nama yang dihasilkan untuk sumber daya ini adalah"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
```

### Gunakan beberapa variabel untuk membangun ARNs
<a name="w2aac24c66c11b9"></a>

Contoh berikut menggunakan `Fn::Sub` parameter `AWS::AccountId` semu `AWS::Region` dan ID logis `vpc` sumber daya untuk membuat Amazon Resource Name (ARN) untuk VPC.

#### 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}'
```

### Lulus nilai parameter dalam skrip data pengguna
<a name="w2aac24c66c11c11"></a>

Contoh berikut digunakan `Fn::Sub` untuk mengganti parameter `AWS::StackName` dan `AWS::Region` pseudo untuk nama tumpukan aktual dan Wilayah saat runtime.

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

Agar mudah dibaca, contoh JSON menggunakan fungsi `Fn::Join` untuk memisahkan setiap perintah, bukannya menentukan seluruh skrip data pengguna dalam nilai string tunggal.

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

Contoh YAML menggunakan blok literal untuk menentukan skrip data pengguna.

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

### Tentukan nilai bersyarat menggunakan pemetaan
<a name="w2aac24c66c11c13"></a>

Dalam contoh ini, nama `myLogGroup` sumber daya dibuat secara dinamis dengan mengganti `log_group_name` variabel dengan nilai yang dihasilkan dari fungsi. `Fn::FindInMap`

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

## Fungsi yang didukung
<a name="intrinsic-function-reference-sub-supported-functions"></a>

Untuk parameter `String`, Anda tidak dapat menggunakan fungsi apapun. Anda harus menentukan nilai string.

Untuk parameter `VarName` dan `VarValue`, Anda dapat menggunakan fungsi berikut:
+ [`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>

Fungsi `Fn::ToJsonString` intrinsik mengkonversi objek atau array ke string JSON yang sesuai.

**penting**  
Anda harus menggunakan [Tansformasi `AWS::LanguageExtensions`](transform-aws-languageextensions.md) untuk menggunakan fungsi `Fn::ToJsonString` intrinsik.

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

## Parameter
<a name="tojsonstring-parameters"></a>

`Object`  
Objek yang ingin Anda konversi ke string JSON.

`Array`  
Array yang ingin Anda konversi ke string JSON.

## Nilai yang dikembalikan
<a name="intrinsic-function-reference-tojsonstring-return"></a>

Objek atau array dikonversi ke string JSON. 

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

### Mengkonversi objek ke string JSON
<a name="intrinsic-function-reference-tojsonstring-example-subsection"></a>

Contoh cuplikan ini mengkonversi objek diteruskan ke fungsi intrinsik ke string 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
#...
```

Dalam kedua contoh ini, jika `Ref` to `ParameterName` menyelesaikan`resolvedValue`, fungsi menyelesaikan string JSON berikut:

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

### Mengkonversi array ke string JSON
<a name="intrinsic-function-reference-tojsonstring-example2"></a>

Contoh cuplikan ini mengubah array diteruskan ke fungsi intrinsik ke string 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
#...
```

Dalam kedua contoh ini, jika `Ref` to `ParameterName` menyelesaikan`resolvedValue`, fungsi menyelesaikan ke JSON String berikut:

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

## Fungsi yang didukung
<a name="tojsonstring-supported-functions"></a>

Anda dapat menggunakan fungsi-fungsi berikut dalam fungsi `Fn::ToJsonString` intrinsik atau array:
+ `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>

Fungsi intrinsik `Fn::Transform` menentukan makro untuk melakukan pemrosesan kustom pada bagian dari templat tumpukan. Makro memungkinkan Anda untuk melakukan pemrosesan kustom pada template, dari tindakan sederhana seperti find-and-replace operasi hingga transformasi ekstensif dari seluruh template. Untuk informasi selengkapnya, lihat [Menggunakan CloudFormation makro untuk melakukan pemrosesan kustom pada templat](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) di *Panduan AWS CloudFormation Pengguna*.

Anda juga dapat menggunakan `Fn::Transform` untuk memanggil [Tansformasi `AWS::Include`](transform-aws-include.md) transformasi, yang merupakan makro yang dihosting oleh CloudFormation.

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

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

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

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

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

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

## Parameter
<a name="intrinsic-function-reference-transform-parameters"></a>

`Name`  
Nama makro yang ingin Anda lakukan pemrosesan.

`Parameters`  
Daftar parameter, ditetapkan sebagai pasangan kunci-nilai, untuk dilewatkan ke makro.

## Nilai yang dikembalikan
<a name="intrinsic-function-reference-transform-returnvalue"></a>

Cuplikan templat yang diproses untuk dimasukkan dalam templat tumpukan yang diproses.

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

Contoh berikut memanggil `AWS::Include` transformasi, menentukan bahwa lokasi untuk mengambil cuplikan template dari diteruskan dalam parameter. `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
```

## Fungsi yang didukung
<a name="intrinsic-function-reference-transform-supported-functions"></a>

Tidak ada.

CloudFormation meneruskan panggilan fungsi intrinsik apa pun yang disertakan `Fn::Transform` ke makro yang ditentukan sebagai string literal.

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

Fungsi intrinsik `Ref` mengembalikan nilai parameter tertentu, sumber daya, atau fungsi intrinsik lainnya. Fungsi ini biasanya digunakan untuk membuat referensi antar sumber daya dalam CloudFormation template. 

## Pernyataan
<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>

Sintaks untuk nama fungsi penuh:

```
Ref: logicalName
```

```
Ref:
   IntrinsicFunction
```

Sintaks untuk bentuk pendek:

```
!Ref logicalName
```

```
!Ref
   IntrinsicFunction
```

## Parameter
<a name="ref-parameters"></a>

logicalName  
Nama logis dari sumber daya atau parameter yang ingin Anda referensikan.

IntrinsicFunction  
Fungsi intrinsik yang menyelesaikan string yang valid. Ini harus berisi referensi ke parameter atau pengidentifikasi, dan tidak boleh berisi pengidentifikasi logis sumber daya.

## Nilai yang dikembalikan
<a name="ref-return-value"></a>

Nilai pengembalian `Ref` tergantung pada jenis entitas yang direferensikan:
+ Ketika Anda menentukan nama logis parameter, ia mengembalikan nilai dari parameter. Untuk informasi selengkapnya, lihat [Parameterssintaks CloudFormation template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html).
+ Saat Anda menentukan nama logis sumber daya, ia mengembalikan nilai yang Anda gunakan untuk mengidentifikasi sumber daya tersebut. Biasanya, itulah nama sumber daya. Namun, untuk beberapa sumber daya, pengidentifikasi dikembalikan yang memiliki makna signifikan lainnya dalam konteks sumber daya. Misalnya, `AWS::EC2::EIP` sumber daya mengembalikan alamat IP, dan `AWS::EC2::Instance` mengembalikan ID instance. Untuk informasi selengkapnya tentang nilai `Ref` pengembalian sumber daya, lihat dokumentasi untuk sumber daya tersebut di[Referensi sumber daya dan properti](aws-template-resource-type-ref.md).
+ Ketika Anda menentukan fungsi intrinsik, ia mengembalikan output dari fungsi itu.

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

### Buat referensi antar sumber daya
<a name="intrinsic-function-reference-ref-example"></a>

Deklarasi sumber daya berikut untuk alamat IP Elastis membutuhkan ID instance dari instans EC2. Ini menggunakan `Ref` fungsi untuk menentukan ID instance dari `MyEC2Instance` sumber daya yang dideklarasikan di tempat lain dalam template.

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

### Kembalikan pengenal sumber daya sebagai output tumpukan
<a name="intrinsic-function-reference-ref-example-2"></a>

Contoh berikut menunjukkan cara menggunakan `Ref` fungsi untuk mengembalikan nama bucket Amazon S3 dengan nama logis `MyBucket` sebagai output tumpukan. 

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

### Gunakan fungsi `Fn::Join` intrinsik di dalam fungsi `Ref`
<a name="ref-example-intrinsic-functions-multiple-stages"></a>

**catatan**  
Ketika Anda menggunakan `AWS::LanguageExtensions` transformasi, Anda dapat menggunakan `Ref` dalam kombinasi dengan fungsi intrinsik lainnya. Untuk fungsi yang didukung, lihat[Fungsi yang didukung](#ref-supported-functions).

Contoh berikut menunjukkan cara mengatur pengidentifikasi sumber daya menggunakan fungsi `Fn::Sub` intrinsik, kondisi, dan input untuk parameter. `Stage` `Fn::GetAtt`Fungsi `Ref` dan kemudian mereferensikan nilai yang sesuai, berdasarkan panggung. `Fn::Sub`pertama kali digunakan `Fn::GetAtt` untuk mendapatkan ARN dari antrian Amazon SQS yang sesuai untuk mengatur dimensi alarm Amazon. CloudWatch Selanjutnya, [`Fn::Join`](intrinsic-function-reference-join.md) digunakan dengan `Ref` untuk membuat nama topik SNS untuk `AlarmActions` properti. 

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

## Fungsi yang didukung
<a name="ref-supported-functions"></a>

Saat Anda menggunakan [AWS::LanguageExtensionstransformasi](transform-aws-languageextensions.md), Anda dapat menggunakan fungsi-fungsi berikut dalam `Ref` fungsi tersebut.
+ [`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`

# Fungsi aturan
<a name="intrinsic-function-reference-rules"></a>

Fungsi aturan adalah fungsi khusus yang hanya berfungsi di `Rules` bagian CloudFormation templat. Fungsi-fungsi ini membantu Anda memvalidasi nilai parameter menggunakan logika kustom. Semua validasi terjadi sebelum CloudFormation membuat atau memperbarui sumber daya apa pun.

Aturan berguna ketika batasan parameter standar tidak mencukupi. Misalnya, ketika SSL diaktifkan, sertifikat dan nama domain harus disediakan. Aturan dapat memastikan bahwa dependensi ini terpenuhi.

Dalam syarat atau pernyataan aturan, Anda dapat menggunakan fungsi intrinsik, seperti `Fn::Equals`, `Fn::Not`, dan `Fn::RefAll`. Properti kondisi menentukan apakah CloudFormation berlaku pernyataan. Jika kondisi mengevaluasi`true`, CloudFormation mengevaluasi pernyataan untuk memverifikasi apakah nilai parameter valid ketika tumpukan dibuat atau diperbarui. Jika nilai parameter tidak valid, CloudFormation tidak membuat atau memperbarui tumpukan. Jika kondisi dievaluasi`false`, CloudFormation tidak memeriksa nilai parameter dan melanjutkan operasi tumpukan.

Jika Anda baru menggunakan aturan di template Anda, kami sarankan Anda terlebih dahulu meninjau topik [Rulessintaks CloudFormation template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/rules-section-structure.html) di *Panduan AWS CloudFormation Pengguna*.

**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)
+ [Fungsi yang didukung](#supported-rule-functions)
+ [Atribut yang didukung](#rules-parameter-attributes)

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

Menghasilkan `true` jika semua syarat yang ditentukan mengevaluasi ke `true`; menghasilkan `false` jika salah satu syarat mengevaluasi ke `false`. `Fn::And` bertindak sebagai operator AND. Jumlah minimum syarat yang dapat Anda sertakan adalah dua, dan maksimum adalah sepuluh.

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

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

### Parameter
<a name="fn-and-parameters"></a>

*syarat*  
Fungsi intrinsik khusus aturan yang mengevaluasi ke `true` atau `false`.

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

Contoh berikut mengevaluasi ke `true` jika nama grup keamanan yang direferensikan sama dengan `sg-mysggroup` dan jika nilai parameter `InstanceType` adalah `t3.large` atau `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>

Menghasilkan `true` jika string yang ditentukan cocok dengan setidaknya satu nilai dalam daftar string.

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

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

### Parameter
<a name="fn-contains-parameters"></a>

*list\$1of\$1strings*  
Daftar string, seperti `"A", "B", "C"`.

*string*  
Sebuah string, seperti `"A"`, yang ingin Anda bandingkan terhadap daftar string.

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

Fungsi berikut mengevaluasi ke `true` jika nilai parameter `InstanceType` yang terdapat dalam daftar (`t3.large` atau `t3.small`):

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

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

Menghasilkan `true` jika string yang ditentukan cocok dengan semua nilai dalam daftar.

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

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

### Parameter
<a name="fn-eachmemberequals-parameters"></a>

*list\$1of\$1strings*  
Daftar string, seperti `"A", "B", "C"`.

*string*  
Sebuah string, seperti `"A"`, yang ingin Anda bandingkan terhadap daftar string.

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

Fungsi berikut mengembalikan `true` jika `Department` tag untuk semua parameter tipe `AWS::EC2::VPC::Id` memiliki nilai`IT`:

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

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

Menghasilkan `true` jika setiap anggota dalam daftar string cocok dengan setidaknya satu nilai dalam daftar string kedua.

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

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

### Parameter
<a name="fn-eachmemberin-parameters"></a>

*strings\$1to\$1check*  
Daftar string, seperti`"A", "B", "C"`. CloudFormation memeriksa apakah setiap anggota dalam `strings_to_check` parameter ada dalam `strings_to_match` parameter.

*strings\$1to\$1match*  
Daftar string, seperti `"A", "B", "C"`. Setiap anggota di parameter `strings_to_match` dibandingkan terhadap anggota parameter `strings_to_check`.

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

Fungsi berikut memeriksa apakah pengguna menentukan subnet yang di Virtual Private Cloud (VPC) yang valid. VPC harus ada di akun dan Wilayah tempat pengguna bekerja dengan tumpukan. Fungsi ini berlaku untuk semua parameter tipe `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>

Membandingkan dua nilai untuk menentukan apakah mereka sama. Menghasilkan `true` jika dua nilai sama dan `false` jika tidak.

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

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

### Parameter
<a name="fn-equals-parameters"></a>

*`value`*  
Nilai dari jenis apa pun yang ingin Anda bandingkan dengan nilai lain.

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

Contoh berikut mengevaluasi ke `true` jika nilai untuk parameter `EnvironmentType` adalah sama dengan `prod`:

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

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

Menghasilkan `true` untuk syarat yang mengevaluasi ke `false`, dan menghasilkan `false` untuk syarat yang mengevaluasi ke `true`. `Fn::Not` bertindak sebagai operator NOT.

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

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

### Parameter
<a name="fn-not-parameters"></a>

*`condition`*  
Fungsi intrinsik khusus aturan yang mengevaluasi ke `true` atau `false`.

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

Contoh berikut mengevaluasi ke `true` jika nilai untuk parameter `EnvironmentType` tidak sama dengan `prod`:

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

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

Menghasilkan `true` jika salah satu dari syarat yang ditentukan mengevaluasi ke `true`; menghasilkan `false` jika semua syarat mengevaluasi ke `false`. `Fn::Or` bertindak sebagai operator OR. Jumlah minimum syarat yang dapat Anda sertakan adalah dua, dan maksimum adalah sepuluh.

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

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

### Parameter
<a name="fn-or-parameters"></a>

*`condition`*  
Fungsi intrinsik khusus aturan yang mengevaluasi ke `true` atau `false`.

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

Contoh berikut mengevaluasi ke `true` jika nama grup keamanan yang direferensikan sama dengan `sg-mysggroup` atau jika nilai parameter `InstanceType` adalah `t3.large` atau `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>

Menghasilkan semua nilai untuk tipe parameter tertentu.

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

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

### Parameter
<a name="fn-refall-parameters"></a>

*parameter\$1type*  
Jenis parameter AWS-spesifik, seperti `AWS::EC2::SecurityGroup::Id` atau`AWS::EC2::VPC::Id`. Untuk informasi selengkapnya, lihat [Jenis parameter AWS khusus yang didukung](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) di *Panduan AWS CloudFormation Pengguna*.

### Contoh
<a name="fn-refall-example"></a>

Fungsi berikut mengembalikan daftar semua VPC IDs untuk Wilayah dan Akun AWS di mana tumpukan sedang dibuat atau diperbarui:

```
"Fn::RefAll" : "AWS::EC2::VPC::Id"
```

## `Fn::ValueOf`
<a name="fn-valueof"></a>

Menghasilkan nilai atribut atau daftar nilai untuk parameter dan atribut tertentu.

### Pernyataan
<a name="fn-valueof-declaration"></a>

```
"Fn::ValueOf" : [ "parameter_logical_id", "attribute" ]
```

### Parameter
<a name="fn-valueof-parameters"></a>

*atribut*  
Nama atribut untuk mengambil nilai dari. Untuk informasi selengkapnya tentang perubahan atribut, lihat [Atribut yang didukung](#rules-parameter-attributes).

*parameter\$1logical\$1id*  
Nama parameter untuk mengambil nilai atribut dari. Parameter harus dideklarasikan di bagian `Parameters` dari templat.

### Contoh
<a name="fn-valueof-examples"></a>

Contoh berikut menghasilkan nilai dari tanda `Department` untuk VPC yang ditentukan oleh parameter `ElbVpc`:

```
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
```

Jika Anda menentukan beberapa nilai untuk parameter, ValueOf fungsi Fn:: dapat mengembalikan daftar. Misalnya, Anda dapat menentukan beberapa subnet dan mendapatkan daftar Availability Zone di mana setiap anggota adalah Availability Zone dari subnet tertentu:

```
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
```

## `Fn::ValueOfAll`
<a name="fn-valueofall"></a>

Menghasilkan daftar semua nilai atribut untuk tipe parameter dan atribut tertentu.

### Pernyataan
<a name="fn-valueofall-declaration"></a>

```
"Fn::ValueOfAll" : ["parameter_type", "attribute"]
```

### Parameter
<a name="fn-valueofall-parameters"></a>

*atribut*  
Nama dari atribut yang ingin Anda ambil nilainya. Untuk informasi selengkapnya tentang perubahan atribut, lihat [Atribut yang didukung](#rules-parameter-attributes).

*parameter\$1type*  
Jenis parameter AWS-spesifik, seperti `AWS::EC2::SecurityGroup::Id` atau`AWS::EC2::VPC::Id`. Untuk informasi selengkapnya, lihat [Jenis parameter AWS khusus yang didukung](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) di *Panduan AWS CloudFormation Pengguna*.

### Contoh
<a name="fn-valueofall-example"></a>

Dalam contoh berikut, `Fn::ValueOfAll` fungsi mengembalikan daftar nilai, di mana setiap anggota adalah nilai `Department` tag untuk VPCs dengan tag itu:

```
"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]
```

## Fungsi yang didukung
<a name="supported-rule-functions"></a>

Anda tidak dapat menggunakan fungsi lain dalam fungsi `Fn::ValueOf` dan `Fn::ValueOfAll`. Namun, Anda dapat menggunakan fungsi berikut dalam semua fungsi intrinsik khusus aturan lainnya:
+ `Ref`
+ Fungsi intrinsik khusus aturan lainnya

## Atribut yang didukung
<a name="rules-parameter-attributes"></a>

Daftar berikut ini menjelaskan nilai atribut yang dapat Anda ambil untuk sumber daya dan tipe parameter tertentu:

Jenis `AWS::EC2::VPC::Id` parameter atau VPC IDs.  
+ DefaultNetworkAcl
+ DefaultSecurityGroup
+ Tag. *tag\$1key*

Jenis `AWS::EC2::Subnet::Id` parameter atau subnet IDs,  
+ AvailabilityZone
+ Tag. *tag\$1key*
+ VpcId

Jenis `AWS::EC2::SecurityGroup::Id` parameter atau grup keamanan IDs.  
+ Tag. *tag\$1key*