

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

# CloudFormation Resourcessintaks template
<a name="resources-section-structure"></a>

`Resources`Bagian ini adalah bagian tingkat atas yang diperlukan dalam CloudFormation templat. Ini mendeklarasikan AWS sumber daya yang CloudFormation ingin Anda sediakan dan konfigurasikan sebagai bagian dari tumpukan Anda.

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

`Resources`Bagian ini menggunakan sintaks berikut:

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

```
"Resources" : {
    "LogicalResourceName1" : {
        "Type" : "AWS::ServiceName::ResourceType",
        "Properties" : {
            "PropertyName1" : "PropertyValue1",
            ...
        }
    },

    "LogicalResourceName2" : {
        "Type" : "AWS::ServiceName::ResourceType",
        "Properties" : {
            "PropertyName1" : "PropertyValue1",
            ...
        }
    }
}
```

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

```
Resources:
  LogicalResourceName1:
    Type: AWS::ServiceName::ResourceType
    Properties:
      PropertyName1: PropertyValue1
      ...

  LogicalResourceName2:
    Type: AWS::ServiceName::ResourceType
    Properties:
      PropertyName1: PropertyValue1
      ...
```

## Logical ID (juga disebut *nama logis*)
<a name="resources-section-logical-id"></a>

Dalam CloudFormation template, sumber daya diidentifikasi dengan nama sumber daya logisnya. Nama-nama ini harus alfanumerik (A-za-Z0-9) dan unik dalam template. Nama logis digunakan untuk referensi sumber daya dari bagian lain dari template. 

## Tipe sumber daya
<a name="resources-section-resource-type"></a>

Setiap sumber daya harus memiliki `Type` atribut, yang mendefinisikan jenis AWS sumber daya itu. `Type`Atribut memiliki format`AWS::ServiceName::ResourceType`. Misalnya, `Type` atribut untuk bucket Amazon S3 adalah. `AWS::S3::Bucket` 

Untuk daftar lengkap jenis sumber daya yang didukung, lihat [referensi jenis AWS sumber daya dan properti](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html).

## Properti sumber daya
<a name="resources-section-resource-properties"></a>

Properti sumber daya adalah opsi tambahan yang dapat Anda tentukan untuk menentukan detail konfigurasi untuk jenis sumber daya tertentu. Beberapa properti diperlukan, sementara yang lain opsional. Beberapa properti memiliki nilai default, sehingga menentukan properti tersebut adalah opsional.

Untuk detail tentang properti yang didukung untuk setiap jenis sumber daya, lihat topik dalam [referensi tipe AWS sumber daya dan properti](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html).

Nilai properti dapat berupa string literal, daftar string, Boolean, referensi dinamis, referensi parameter, referensi semu, atau nilai yang dikembalikan oleh fungsi. Contoh berikut menunjukkan cara mendeklarasikan jenis nilai properti yang berbeda:

### JSON
<a name="resource-properties-example.json"></a>

```
"Properties" : {
    "String" : "A string value",
    "Number" : 123,
    "LiteralList" : [ "first-value", "second-value" ],
    "Boolean" : true
}
```

### YAML
<a name="resource-properties-example.yaml"></a>

```
Properties:
  String: A string value 
  Number: 123
  LiteralList:
    - first-value
    - second-value
  Boolean: true
```

## ID Fisik
<a name="resources-section-physical-id"></a>

Selain ID logis, sumber daya tertentu juga memiliki ID fisik, yang merupakan nama yang ditetapkan sebenarnya untuk sumber daya tersebut, seperti ID instans EC2 atau nama bucket S3. Gunakan ID fisik untuk mengidentifikasi sumber daya di luar CloudFormation templat, tetapi hanya setelah sumber daya dibuat. Misalnya, anggaplah Anda memberikan sumber daya instans EC2 ID logis `MyEC2Instance`. Saat CloudFormation membuat instance, CloudFormation secara otomatis menghasilkan dan menetapkan ID fisik (seperti`i-1234567890abcdef0`) ke instance. Anda dapat menggunakan ID fisik ini untuk mengidentifikasi instance dan melihat propertinya (seperti nama DNS) dengan menggunakan konsol Amazon EC2. 

Untuk bucket Amazon S3 dan banyak sumber daya lainnya, CloudFormation secara otomatis menghasilkan nama fisik unik untuk sumber daya jika Anda tidak menentukannya secara eksplisit. Nama fisik ini didasarkan pada kombinasi nama CloudFormation tumpukan, nama logis sumber daya yang ditentukan dalam CloudFormation template, dan ID unik. Misalnya, jika Anda memiliki bucket Amazon S3 dengan nama logis `MyBucket` dalam tumpukan bernama`MyStack`, CloudFormation beri nama bucket dengan nama fisik berikut. `MyStack-MyBucket-abcdefghijk1`

Untuk sumber daya yang mendukung nama kustom, Anda dapat menetapkan nama fisik Anda sendiri untuk membantu Anda mengidentifikasi sumber daya dengan cepat. Misalnya, Anda dapat menamakan bucket S3 yang menyimpan log sebagai `MyPerformanceLogs`. Untuk informasi lebih lanjut, lihat [Jenis nama](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-name.html).

## Referensi sumber daya
<a name="using-cross-resource-references"></a>

Seringkali, Anda perlu mengatur properti pada satu sumber daya berdasarkan nama atau properti sumber daya lain. Misalnya, Anda dapat membuat instans EC2 yang menggunakan grup keamanan EC2, atau CloudFront distribusi yang didukung oleh bucket S3. Semua sumber daya ini dapat dibuat dalam CloudFormation template yang sama. 

CloudFormation menyediakan fungsi intrinsik yang dapat Anda gunakan untuk merujuk ke sumber daya lain dan propertinya. Fungsi-fungsi ini memungkinkan Anda untuk membuat dependensi antara sumber daya dan meneruskan nilai dari satu sumber daya ke sumber daya lainnya.

### Fungsi `Ref`
<a name="resource-properties-ref"></a>

`Ref`Fungsi ini biasanya digunakan untuk mengambil properti identifikasi sumber daya yang didefinisikan dalam CloudFormation template yang sama. Apa yang dikembalikan tergantung pada jenis sumber daya. Untuk sebagian besar sumber daya, ia mengembalikan nama fisik sumber daya. Namun, untuk beberapa jenis sumber daya, mungkin mengembalikan nilai yang berbeda, seperti alamat IP untuk `AWS::EC2::EIP` sumber daya atau Nama Sumber Daya Amazon (ARN) untuk topik Amazon SNS. 

Contoh berikut menunjukkan bagaimana menggunakan `Ref` fungsi dalam properti. Dalam setiap contoh ini, `Ref` fungsi akan mengembalikan nama sebenarnya dari `LogicalResourceName` sumber daya yang dideklarasikan di tempat lain dalam template. Contoh `!Ref` sintaks dalam contoh YAMAL hanyalah cara yang lebih pendek untuk menulis fungsi. `Ref`

#### JSON
<a name="resource-properties-ref-example.json"></a>

```
"Properties" : {
    "PropertyName" : { "Ref" : "LogicalResourceName" }
}
```

#### YAML
<a name="resource-properties-ref-example.yaml"></a>

```
Properties:
  PropertyName1:
    Ref: LogicalResourceName
  PropertyName2: !Ref LogicalResourceName
```

Untuk informasi lebih rinci tentang `Ref` fungsi, lihat [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-ref.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-ref.html). 

### Fungsi `Fn::GetAtt`
<a name="resource-properties-getatt"></a>

`Ref`Fungsi ini membantu jika parameter atau nilai yang dikembalikan untuk sumber daya persis seperti yang Anda inginkan. Namun, Anda mungkin memerlukan atribut lain dari sumber daya. Misalnya, jika Anda ingin membuat CloudFront distribusi dengan asal S3, Anda perlu menentukan lokasi bucket dengan menggunakan alamat gaya DNS. Sejumlah sumber daya memiliki atribut tambahan yang nilainya dapat Anda gunakan di templat Anda. Untuk mendapatkan atribut ini, Anda menggunakan `Fn::GetAtt` fungsi.

Contoh berikut menunjukkan bagaimana menggunakan `GetAtt` fungsi dalam properti. `Fn::GetAtt`Fungsi ini mengambil dua parameter, nama logis sumber daya dan nama atribut yang akan diambil. Contoh `!GetAtt` sintaks dalam contoh YAMAL hanyalah cara yang lebih pendek untuk menulis fungsi. `GetAtt`

#### JSON
<a name="resource-properties-getatt-example.json"></a>

```
"Properties" : {
    "PropertyName" : {
        "Fn::GetAtt" : [ "LogicalResourceName", "AttributeName" ]
    }
}
```

#### YAML
<a name="resource-properties-getatt-example.yaml"></a>

```
Properties:
  PropertyName1:
    Fn::GetAtt:
      - LogicalResourceName
      - AttributeName
  PropertyName2: !GetAtt LogicalResourceName.AttributeName
```

Untuk informasi lebih rinci tentang `GetAtt` fungsi, lihat [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-getatt.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-getatt.html).

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

Contoh berikut menggambarkan cara mendeklarasikan sumber daya dan bagaimana CloudFormation template dapat mereferensikan sumber daya lain yang ditentukan dalam template yang sama dan sumber daya yang ada. AWS 

**Topics**
+ [Mendeklarasikan sumber daya tunggal dengan nama kustom](#resources-section-structure-examples-single-resource)
+ [Mereferensikan sumber daya lain dengan fungsi `Ref`](#resources-section-structure-examples-ref)
+ [Mereferensikan atribut sumber daya menggunakan fungsi `Fn::GetAtt`](#resources-section-structure-examples-getatt)

### Mendeklarasikan sumber daya tunggal dengan nama kustom
<a name="resources-section-structure-examples-single-resource"></a>

Contoh berikut mendeklarasikan sumber daya tunggal tipe `AWS::S3::Bucket` dengan nama logis. `MyBucket` `BucketName`Properti diatur ke*amzn-s3-demo-bucket*, yang harus diganti dengan nama yang diinginkan untuk bucket S3 Anda.

Jika Anda menggunakan deklarasi sumber daya ini untuk membuat tumpukan, CloudFormation akan membuat bucket Amazon S3 dengan pengaturan default. Untuk sumber daya lain, seperti instans Amazon EC2 atau grup Auto Scaling CloudFormation , memerlukan informasi lebih lanjut.

#### JSON
<a name="resources-section-structure-examples-single-resource.json"></a>

```
{
    "Resources": {
        "MyBucket": {
            "Type": "AWS::S3::Bucket",
            "Properties": {
                "BucketName": "amzn-s3-demo-bucket"
            }
        }
    }
}
```

#### YAML
<a name="resources-section-structure-examples-single-resource.yaml"></a>

```
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: amzn-s3-demo-bucket
```

### Mereferensikan sumber daya lain dengan fungsi `Ref`
<a name="resources-section-structure-examples-ref"></a>

Contoh berikut menunjukkan deklarasi sumber daya yang mendefinisikan instans EC2 dan grup keamanan. `Ec2Instance`Sumber daya mereferensikan `InstanceSecurityGroup` sumber daya sebagai bagian dari `SecurityGroupIds` propertinya menggunakan `Ref` fungsi. Ini juga mencakup grup keamanan yang ada (`sg-12a4c434`) yang tidak dideklarasikan dalam template. Anda menggunakan string literal untuk mereferensikan ke sumber daya AWS yang ada.

#### JSON
<a name="resources-section-structure-examples-ref.json"></a>

```
{
    "Resources": {
        "Ec2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "SecurityGroupIds": [
                    {
                        "Ref": "InstanceSecurityGroup"
                    },
                    "sg-12a4c434"
                ],
                "KeyName": "MyKey",
                "ImageId": "ami-1234567890abcdef0"
            }
        },
        "InstanceSecurityGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "Enable SSH access via port 22",
                "SecurityGroupIngress": [
                    {
                        "IpProtocol": "tcp",
                        "FromPort": 22,
                        "ToPort": 22,
                        "CidrIp": "0.0.0.0/0"
                    }
                ]
            }
        }
    }
}
```

#### YAML
<a name="resources-section-structure-examples-ref.yaml"></a>

```
Resources:
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      SecurityGroupIds:
        - !Ref InstanceSecurityGroup
        - sg-12a4c434
      KeyName: MyKey
      ImageId: ami-1234567890abcdef0
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable SSH access via port 22
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
```

### Mereferensikan atribut sumber daya menggunakan fungsi `Fn::GetAtt`
<a name="resources-section-structure-examples-getatt"></a>

Contoh berikut menunjukkan deklarasi sumber daya yang mendefinisikan sumber daya CloudFront distribusi dan bucket S3. `MyDistribution`Sumber daya menentukan nama DNS `MyBucket` sumber daya menggunakan `Fn::GetAtt` fungsi untuk mendapatkan atribut bucket. `DomainName` Anda akan melihat bahwa `Fn::GetAtt` fungsi tersebut mencantumkan dua parameternya dalam sebuah array. Untuk fungsi yang mengambil beberapa parameter, gunakan array untuk menentukan parameternya.

#### JSON
<a name="resources-section-structure-examples-getatt.json"></a>

```
{
  "Resources": {
    "MyBucket": {
      "Type": "AWS::S3::Bucket"
    },
    "MyDistribution": {
      "Type": "AWS::CloudFront::Distribution",
      "Properties": {
        "DistributionConfig": {
          "Origins": [
            {
              "DomainName": {
                "Fn::GetAtt": [
                  "MyBucket",
                  "DomainName"
                ]
              },
              "Id": "MyS3Origin",
              "S3OriginConfig": {}
            }
          ],
          "Enabled": "true",
          "DefaultCacheBehavior": {
            "TargetOriginId": "MyS3Origin",
            "ForwardedValues": {
              "QueryString": "false"
            },
            "ViewerProtocolPolicy": "allow-all"
          }
        }
      }
    }
  }
}
```

#### YAML
<a name="resources-section-structure-examples-getatt.yaml"></a>

```
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
  MyDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: !GetAtt 
              - MyBucket
              - DomainName
            Id: MyS3Origin
            S3OriginConfig: {}
        Enabled: 'true'
        DefaultCacheBehavior:
          TargetOriginId: MyS3Origin
          ForwardedValues:
            QueryString: 'false'
          ViewerProtocolPolicy: allow-all
```