

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

# CloudFormation Conditionssintaks template
<a name="conditions-section-structure"></a>

Bagian `Conditions` opsional berisi pernyataan yang menentukan keadaan di mana entitas dibuat atau dikonfigurasi. Misalnya, Anda dapat membuat kondisi dan mengaitkannya dengan sumber daya atau output sehingga CloudFormation menciptakan sumber daya atau output hanya jika kondisi benar. Demikian pula, Anda dapat mengaitkan kondisi dengan properti sehingga CloudFormation menetapkan properti ke nilai tertentu hanya jika kondisi benar. Jika kondisinya salah, CloudFormation tetapkan properti ke nilai alternatif yang Anda tentukan.

Anda dapat menggunakan kondisi saat ingin menggunakan kembali template untuk membuat sumber daya dalam konteks yang berbeda, seperti lingkungan pengujian versus produksi. Misalnya, dalam template Anda, Anda dapat menambahkan parameter `EnvironmentType` input yang menerima salah satu `prod` atau `test` sebagai input. Untuk `prod` lingkungan, Anda mungkin menyertakan instans EC2 dengan kemampuan tertentu, sedangkan untuk `test` lingkungan, Anda mungkin menggunakan kemampuan yang lebih rendah untuk menghemat uang. Definisi kondisi ini memungkinkan Anda untuk menentukan sumber daya mana yang dibuat dan bagaimana mereka dikonfigurasi untuk setiap jenis lingkungan.

## Sintaksis
<a name="conditions-section-structure-syntax"></a>

Bagian `Conditions` terdiri dari nama kunci `Conditions`. Setiap deklarasi kondisi mencakup ID logis dan satu atau lebih fungsi intrinsik. 

### JSON
<a name="conditions-section-structure-syntax.json"></a>

```
"Conditions": {
  "LogicalConditionName1": {
    "Intrinsic function": ...[
  },

  "LogicalConditionName2": {
    "Intrinsic function": ...
  }
}
```

### YAML
<a name="conditions-section-structure-syntax.yaml"></a>

```
Conditions:
  LogicalConditionName1:
    Intrinsic function:
      ...

  LogicalConditionName2:
    Intrinsic function:
      ...
```

## Bagaimana kondisi bekerja
<a name="conditions-section-structure-overview"></a>

Untuk menggunakan kondisi, ikuti langkah-langkah ini:

1. **Tambahkan definisi parameter** - Tentukan input yang akan dievaluasi kondisi Anda di `Parameters` bagian template Anda. Kondisi mengevaluasi benar atau salah berdasarkan nilai parameter masukan ini. Perhatikan bahwa parameter semu tersedia secara otomatis dan tidak memerlukan definisi eksplisit di bagian tersebut. `Parameters` Untuk informasi selengkapnya tentang parameter semu, lihat[Dapatkan AWS nilai menggunakan parameter semu](pseudo-parameter-reference.md).

1. **Tambahkan definisi kondisi** - Tentukan kondisi di `Conditions` bagian menggunakan fungsi intrinsik seperti `Fn::If` atau. `Fn::Equals` Kondisi ini menentukan kapan CloudFormation menciptakan sumber daya terkait. Kondisi dapat didasarkan pada:
   + Nilai parameter masukan atau semu
   + Syarat lainnya
   + Nilai pemetaan

   Namun, Anda tidak dapat mereferensikan sumber daya logis IDs atau atributnya dalam kondisi.

1. **Mengaitkan kondisi dengan sumber daya atau output** — Kondisi referensi dalam sumber daya atau output menggunakan `Condition` kunci dan ID logis kondisi. Secara opsional, gunakan `Fn::If` di bagian lain dari template (seperti nilai properti) untuk menetapkan nilai berdasarkan kondisi. Untuk informasi selengkapnya, lihat [Menggunakan `Condition` kunci](#using-conditions-in-templates).

CloudFormation mengevaluasi kondisi saat membuat atau memperbarui tumpukan. CloudFormation menciptakan entitas yang terkait dengan kondisi sebenarnya dan mengabaikan entitas yang terkait dengan kondisi palsu. CloudFormation juga mengevaluasi kembali kondisi ini selama setiap pembaruan tumpukan sebelum memodifikasi sumber daya apa pun. Entitas yang tetap terkait dengan kondisi sebenarnya diperbarui, sedangkan entitas yang terkait dengan kondisi palsu dihapus.

**penting**  
Selama pembaruan tumpukan, Anda tidak dapat memperbarui syarat dengan sendirinya. Anda hanya dapat memperbarui syarat jika menyertakan perubahan yang menambahkan, mengubah, atau menghapus sumber daya.

## Fungsi intrinsik syarat
<a name="conditions-section-structure-functions"></a>

Anda dapat menggunakan fungsi intrinsik berikut untuk menentukan syarat:
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-and](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-and)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-equals](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-equals)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-foreach.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-foreach.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-not](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-not)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-or](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-or)

**catatan**  
`Fn::If` hanya didukung dalam atribut metadata, atribut kebijakan pembaruan, dan nilai properti di bagian `Resources` dan bagian `Outputs` dari templat.

## Menggunakan `Condition` kunci
<a name="using-conditions-in-templates"></a>

Setelah kondisi ditentukan, Anda dapat menerapkannya di beberapa tempat di template, seperti `Resources` dan`Outputs`, menggunakan `Condition` kunci. `Condition`Kunci mereferensikan nama logis suatu kondisi dan mengembalikan hasil evaluasi dari kondisi yang ditentukan.

**Topics**
+ [Mengaitkan kondisi dengan sumber daya](#associate-conditions-with-resources)
+ [Kaitkan kondisi dengan output](#associate-conditions-with-outputs)
+ [Kondisi referensi dalam kondisi lain](#reference-conditions-in-other-conditions)
+ [Mengembalikan nilai properti secara kondisional menggunakan `Fn::If`](#conditional-return-property-values-using-fn-if)

### Mengaitkan kondisi dengan sumber daya
<a name="associate-conditions-with-resources"></a>

Untuk membuat sumber daya secara kondisional, tambahkan `Condition` kunci dan ID logis dari kondisi sebagai atribut ke sumber daya. CloudFormation menciptakan sumber daya hanya ketika kondisi dievaluasi ke true.

#### JSON
<a name="associate-conditions-with-resources.json"></a>

```
"NewVolume" : {
  "Type" : "AWS::EC2::Volume",
  "Condition" : "IsProduction",
  "Properties" : {
     "Size" : "100",
     "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]}
  }
}
```

#### YAML
<a name="associate-conditions-with-resources.yaml"></a>

```
NewVolume:
  Type: AWS::EC2::Volume
  Condition: IsProduction
  Properties:
    Size: 100
    AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
```

### Kaitkan kondisi dengan output
<a name="associate-conditions-with-outputs"></a>

Anda juga dapat mengaitkan kondisi dengan output. CloudFormation menciptakan output hanya ketika kondisi terkait mengevaluasi ke true.

#### JSON
<a name="associate-conditions-with-outputs.json"></a>

```
"Outputs" : {
  "VolumeId" : {
    "Condition" : "IsProduction",
    "Value" : { "Ref" : "NewVolume" }
  }
}
```

#### YAML
<a name="associate-conditions-with-outputs.yaml"></a>

```
Outputs:
  VolumeId:
    Condition: IsProduction
    Value: !Ref NewVolume
```

### Kondisi referensi dalam kondisi lain
<a name="reference-conditions-in-other-conditions"></a>

Saat menentukan kondisi di `Conditions` bagian ini, Anda dapat mereferensikan kondisi lain menggunakan `Condition` kunci. Ini memungkinkan Anda untuk membuat logika kondisional yang lebih kompleks dengan menggabungkan beberapa kondisi.

Dalam contoh berikut, `IsProdAndFeatureEnabled` kondisi mengevaluasi menjadi benar hanya jika `IsProduction` dan `IsFeatureEnabled` kondisi dievaluasi menjadi benar.

#### JSON
<a name="reference-conditions-in-other-conditions.json"></a>

```
"Conditions": {
  "IsProduction" : {"Fn::Equals" : [{"Ref" : "Environment"}, "prod"]},
  "IsFeatureEnabled" : { "Fn::Equals" : [{"Ref" : "FeatureFlag"}, "enabled"]},
  "IsProdAndFeatureEnabled" : {
    "Fn::And" : [
      {"Condition" : "IsProduction"},
      {"Condition" : "IsFeatureEnabled"}
    ]
  }
}
```

#### YAML
<a name="reference-conditions-in-other-conditions.yaml"></a>

```
Conditions:
  IsProduction:
    !Equals [!Ref Environment, "prod"]
  IsFeatureEnabled:
    !Equals [!Ref FeatureFlag, "enabled"]
  IsProdAndFeatureEnabled: !And
    - !Condition IsProduction
    - !Condition IsFeatureEnabled
```

### Mengembalikan nilai properti secara kondisional menggunakan `Fn::If`
<a name="conditional-return-property-values-using-fn-if"></a>

Untuk kontrol yang lebih terperinci, Anda dapat menggunakan fungsi `Fn::If` intrinsik untuk mengembalikan salah satu dari dua nilai properti secara kondisional dalam sumber daya atau output. Fungsi ini mengevaluasi kondisi dan mengembalikan satu nilai jika kondisi benar dan nilai lain jika kondisi palsu.

#### Nilai properti bersyarat
<a name="using-fn-if-for-conditional-values"></a>

Contoh berikut menunjukkan pengaturan jenis instans EC2 berdasarkan kondisi lingkungan. Jika `IsProduction` kondisi dievaluasi ke true, tipe instance disetel ke`c5.xlarge`. Jika tidak, itu diatur ke`t3.small`.

##### JSON
<a name="using-fn-if-for-conditional-values.json"></a>

```
"Properties" : {
  "InstanceType" : {
    "Fn::If" : [
      "IsProduction",
      "c5.xlarge",
      "t3.small"
    ]
  }
}
```

##### YAML
<a name="using-fn-if-for-conditional-values.yaml"></a>

```
Properties:
  InstanceType: !If
    - IsProduction
    - c5.xlarge
    - t3.small
```

#### Penghapusan properti bersyarat
<a name="using-fn-if-with-novalue"></a>

Anda juga dapat menggunakan parameter `AWS::NoValue` semu sebagai nilai kembali untuk menghapus properti yang sesuai ketika kondisi salah.

##### JSON
<a name="using-fn-if-with-novalue.json"></a>

```
"DBSnapshotIdentifier" : {
  "Fn::If" : [
    "UseDBSnapshot",
    {"Ref" : "DBSnapshotName"},
    {"Ref" : "AWS::NoValue"}
  ]
}
```

##### YAML
<a name="using-fn-if-with-novalue.yaml"></a>

```
DBSnapshotIdentifier: !If
  - UseDBSnapshot
  - !Ref DBSnapshotName
  - !Ref "AWS::NoValue"
```

## Contoh
<a name="conditions-section-structure-examples"></a>

**Topics**
+ [Pembuatan sumber daya berbasis lingkungan](#environment-based-resource-creation)
+ [Penyediaan sumber daya multi-kondisi](#multi-condition-resource-provisioning)

### Pembuatan sumber daya berbasis lingkungan
<a name="environment-based-resource-creation"></a>

Contoh berikut ini menyediakan instans EC2, dan secara kondisional membuat dan melampirkan volume EBS baru hanya jika tipe lingkungannya. `prod` Jika lingkungannya`test`, mereka hanya membuat instans EC2 tanpa volume tambahan.

#### JSON
<a name="conditions-section-example-resource-creation.json"></a>

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

#### YAML
<a name="conditions-section-example-resource-creation.yaml"></a>

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

### Penyediaan sumber daya multi-kondisi
<a name="multi-condition-resource-provisioning"></a>

Contoh berikut membuat bucket S3 secara kondisional jika nama bucket disediakan, dan lampirkan kebijakan bucket hanya jika lingkungan disetel ke. `prod` Jika tidak ada nama bucket yang diberikan atau lingkungannya`test`, tidak ada sumber daya yang dibuat.

#### JSON
<a name="conditions-section-example-multi-condition.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Parameters": {
        "EnvType": {
            "Type": "String",
            "AllowedValues": [
                "prod",
                "test"
            ]
        },
        "BucketName": {
            "Default": "",
            "Type": "String"
        }
    },
    "Conditions": {
        "IsProduction": {
            "Fn::Equals": [
                {
                    "Ref": "EnvType"
                },
                "prod"
            ]
        },
        "CreateBucket": {
            "Fn::Not": [
                {
                    "Fn::Equals": [
                        {
                            "Ref": "BucketName"
                        },
                        ""
                    ]
                }
            ]
        },
        "CreateBucketPolicy": {
            "Fn::And": [
                {
                    "Condition": "IsProduction"
                },
                {
                    "Condition": "CreateBucket"
                }
            ]
        }
    },
    "Resources": {
        "Bucket": {
            "Type": "AWS::S3::Bucket",
            "Condition": "CreateBucket",
            "Properties": {
                "BucketName": {
                    "Ref": "BucketName"
                }
            }
        },
        "Policy": {
            "Type": "AWS::S3::BucketPolicy",
            "Condition": "CreateBucketPolicy",
            "Properties": {
                "Bucket": {
                    "Ref": "Bucket"
                },
                "PolicyDocument": { ... }
            }
        }
    }
}
```

#### YAML
<a name="conditions-section-example-multi-condition.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EnvType:
    Type: String
    AllowedValues:
      - prod
      - test
  BucketName:
    Default: ''
    Type: String
Conditions:
  IsProduction: !Equals
    - !Ref EnvType
    - prod
  CreateBucket: !Not
    - !Equals
      - !Ref BucketName
      - ''
  CreateBucketPolicy: !And
    - !Condition IsProduction
    - !Condition CreateBucket
Resources:
  Bucket:
    Type: AWS::S3::Bucket
    Condition: CreateBucket
    Properties:
      BucketName: !Ref BucketName
  Policy:
    Type: AWS::S3::BucketPolicy
    Condition: CreateBucketPolicy
    Properties:
      Bucket: !Ref Bucket
      PolicyDocument: ...
```

Dalam contoh ini, `CreateBucketPolicy` kondisi menunjukkan bagaimana mereferensikan kondisi lain menggunakan `Condition` kunci. Kebijakan dibuat hanya ketika kedua `IsProduction` dan `CreateBucket` kondisi dievaluasi menjadi benar.

**catatan**  
Untuk contoh penggunaan kondisi yang lebih kompleks, lihat topik [Conditionatribut](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-condition.html) di *Panduan Referensi CloudFormation Template*.