

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

# Buat konfigurasi sumber daya yang dapat digunakan kembali yang dapat disertakan di seluruh templat dengan modul CloudFormation
<a name="modules"></a>

*Modul* adalah cara Anda untuk mengemas konfigurasi sumber daya untuk dimasukkan di seluruh tumpukan templat, dengan cara yang transparan, mudah dikelola, dan berulang. Modul dapat merangkum konfigurasi layanan umum dan praktik terbaik sebagai blok bangunan modular yang dapat disesuaikan untuk Anda sertakan dalam templat tumpukan Anda. Modul memungkinkan Anda untuk menyertakan konfigurasi sumber daya yang menggabungkan praktik terbaik, pengetahuan domain ahli, dan pedoman yang diterima (untuk area seperti keamanan, kepatuhan, tata kelola, dan peraturan industri) dalam templat Anda, tanpa harus memiliki pengetahuan mendalam tentang seluk-beluk sumber daya implementasi.

Misalnya, pakar domain dalam jaringan dapat membuat modul yang berisi grup keamanan bawaan dan ingress/egress aturan yang mematuhi pedoman keamanan. Anda kemudian dapat memasukkan modul itu ke dalam template Anda untuk menyediakan infrastruktur jaringan yang aman di tumpukan Anda—tanpa harus menghabiskan waktu mencari tahu cara kerja subnet VPCs, grup keamanan, dan gateway. Dan karena modul berversi, jika pedoman keamanan berubah dari waktu ke waktu, penulis modul dapat membuat versi baru dari modul yang menggabungkan perubahan-perubahan tersebut.

Karakteristik penggunaan modul dalam templat meliputi:
+ **Prediktabilitas** — Modul harus mematuhi skema yang didaftarkan di CloudFormation registri, sehingga Anda tahu sumber daya apa yang dapat diselesaikan setelah Anda memasukkannya ke dalam templat Anda.
+ **Reusability** - Anda dapat menggunakan modul yang sama di beberapa template dan akun.
+ **Keterlacakan** — CloudFormation mempertahankan pengetahuan tentang sumber daya mana dalam tumpukan yang disediakan dari modul, memungkinkan Anda untuk dengan mudah memahami sumber perubahan sumber daya.
+ **Pengelolaan** - Setelah Anda mendaftarkan modul, Anda dapat mengelolanya melalui CloudFormation registri, termasuk pembuatan versi dan akun dan ketersediaan regional.

Sebuah modul dapat berisi:
+ Satu sumber daya atau lebih yang akan ditetapkan dari modul, bersama dengan data yang terkait, seperti output atau kondisi.
+ Semua parameter modul, yang memungkinkan Anda untuk menentukan nilai-nilai kustom setiap kali modul digunakan.

Untuk informasi tentang pengembangan modul, lihat [Mengembangkan modul](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/modules.html) di *Panduan Pengguna CloudFormation CLI*.

**Topics**
+ [Pertimbangan saat menggunakan modul](#module-considerations)
+ [Memahami pembuatan versi modul](module-versioning.md)
+ [Gunakan modul dari registri CloudFormation pribadi](modules-using.md)
+ [Gunakan parameter untuk menentukan nilai modul](module-using-params.md)
+ [Sumber daya modul referensi dalam CloudFormation templat](module-ref-resources.md)

## Pertimbangan saat menggunakan modul
<a name="module-considerations"></a>
+ Tidak ada biaya tambahan untuk menggunakan modul. Anda hanya membayar untuk sumber daya yang diselesaikan modul tersebut di tumpukan Anda.
+ CloudFormation kuota, seperti jumlah maksimum sumber daya yang diizinkan dalam tumpukan, atau ukuran maksimum badan templat, berlaku untuk templat yang diproses apakah sumber daya yang disertakan dalam templat itu berasal dari modul atau tidak. Untuk informasi selengkapnya, lihat [Memahami CloudFormation kuota](cloudformation-limits.md).
+ Tag yang Anda tentukan di tingkat tumpukan ditugaskan ke sumber daya individu yang berasal dari modul.
+ Skrip pembantu yang ditentukan pada tingkat modul tidak menyebar ke sumber daya individu yang terkandung dalam modul saat CloudFormation memproses template.
+ Output yang ditentukan dalam modul disebarkan ke output pada tingkat templat.

  Setiap output akan diberikan ID logis yang merupakan rangkaian dari nama logis modul dan nama output seperti yang didefinisikan dalam modul. Untuk informasi selengkapnya, lihat [Dapatkan output yang diekspor dari tumpukan yang diterapkan CloudFormation](using-cfn-stack-exports.md).
+ Parameter yang ditentukan dalam modul tidak disebarkan ke parameter pada tingkat templat.

  Namun, Anda dapat membuat parameter tingkat templat yang mereferensikan parameter tingkat modul. Lihat informasi yang lebih lengkap di [Gunakan parameter untuk menentukan nilai modul](module-using-params.md).

# Memahami pembuatan versi modul
<a name="module-versioning"></a>

 CloudFormation Registri bertindak sebagai repositori tempat Anda dapat mendaftar dan mengelola modul untuk digunakan di dalam Akun AWS dan Wilayah Anda. Anda dapat mendaftarkan modul dari berbagai sumber, termasuk AWS, penerbit pihak ketiga, dan ekstensi kustom Anda sendiri, dalam akun dan Wilayah Anda. Untuk informasi selengkapnya, lihat [Mengelola ekstensi dengan CloudFormation registri](registry.md).

Modul dapat memiliki versi yang berbeda, sehingga Anda dapat menentukan versi modul yang ingin Anda gunakan. Kemampuan pembuatan versi ini sangat berguna ketika Anda perlu memperbarui atau memodifikasi modul tanpa merusak tumpukan yang ada yang bergantung padanya.

Ingatlah pertimbangan berikut saat menggunakan beberapa versi modul:
+ Selama operasi tumpukan, CloudFormation gunakan versi modul apa pun yang saat ini terdaftar sebagai versi default di Akun AWS dan Wilayah tempat operasi tumpukan sedang dilakukan. Ini termasuk modul yang bersarang di modul lain.

  Oleh karena itu, ketahuilah bahwa jika Anda memiliki versi berbeda dari modul yang sama yang terdaftar sebagai versi default di akun atau Wilayah yang berbeda, menggunakan templat yang sama dapat menghasilkan hasil yang berbeda.
+ Selama operasi tumpukan, CloudFormation gunakan versi sumber daya apa pun yang saat ini terdaftar sebagai versi default di Akun AWS dan Wilayah tempat operasi tumpukan sedang dilakukan. Ini termasuk sumber daya yang dihasilkan dengan menyertakan modul.
+ Mengubah versi default dari modul tidak memulai setiap operasi pembaruan tumpukan. Namun, lain kali Anda melakukan operasi tumpukan dengan template apa pun yang berisi modul itu, seperti pembaruan tumpukan, CloudFormation akan menggunakan versi default baru dalam operasi.

  Satu pengecualian untuk ini adalah melakukan pembaruan tumpukan dengan **menggunakan templat sebelumnya** yang sudah ditentukan, seperti yang dijelaskan di bawah ini.
+ Untuk operasi pembaruan tumpukan, jika Anda menentukan opsi **gunakan templat sebelumnya**, CloudFormation gunakan templat yang diproses sebelumnya untuk pembaruan tumpukan, dan tidak memproses ulang modul untuk perubahan apa pun yang mungkin Anda buat.
+ Untuk menjamin hasil yang seragam, jika Anda menyertakan modul dalam template tumpukan untuk digunakan dengan kumpulan tumpukan, Anda harus memastikan bahwa versi modul yang sama ditetapkan sebagai versi default di semua akun dan Wilayah tempat Anda berencana untuk menerapkan instance tumpukan Anda. Ini termasuk untuk modul yang bersarang di modul lain. Untuk informasi selengkapnya, lihat [Mengelola tumpukan di seluruh akun dan Wilayah dengan StackSets](what-is-cfnstacksets.md).

## Persyaratan untuk mengaktifkan modul publik pihak ketiga
<a name="requirements-for-modules"></a>

Agar berhasil mengaktifkan modul publik pihak ketiga di akun dan Wilayah Anda, berikut ini harus benar untuk setiap ekstensi publik pihak ketiga (sumber daya atau modul) yang disertakan dalam modul:
+ **Aktivasi ekstensi** — Ekstensi harus diaktifkan di akun dan Wilayah tempat Anda ingin menggunakannya. Untuk informasi selengkapnya, lihat [Gunakan ekstensi publik pihak ketiga dari CloudFormation registri](registry-public.md).
+ **Pendaftaran alias** - Jika ekstensi dalam modul menggunakan alias nama tipe, ekstensi harus terdaftar di akun Anda dan Wilayah menggunakan nama jenis alias yang sama. Untuk informasi selengkapnya, lihat [Gunakan alias untuk merujuk ke ekstensi](registry-public.md#registry-public-enable-alias).
+ **Kompatibilitas versi** — Versi ekstensi yang saat ini diaktifkan harus menjadi salah satu versi utama yang didukung dari ekstensi yang ditentukan dalam modul.

Jika Anda tidak memiliki ekstensi publik pihak ketiga yang benar dan versi ekstensi diaktifkan, CloudFormation akan gagal operasi dengan kesalahan daftar ekstensi dan versi yang perlu diaktifkan sebelum modul dapat berhasil diaktifkan.

# Gunakan modul dari registri CloudFormation pribadi
<a name="modules-using"></a>

Topik ini menjelaskan cara menggunakan modul dalam CloudFormation template. Pikirkan modul sebagai bundel sumber daya yang telah dibuat sebelumnya yang dapat Anda tambahkan ke templat Anda.

Untuk menggunakan modul, langkah-langkahnya adalah sebagai berikut:
+ **Daftarkan modul** — Anda mendaftarkan modul dalam CloudFormation registri sebagai ekstensi pribadi. Pastikan itu terdaftar di Akun AWS dan Wilayah tempat Anda bekerja. Untuk informasi selengkapnya, lihat [CloudFormation konsep registri](registry-concepts.md).
+ **Sertakan dalam template Anda** - Tambahkan modul ke [Resources](resources-section-structure.md) bagian CloudFormation template Anda, seperti yang Anda lakukan dengan sumber daya lainnya. Anda juga harus menyediakan properti yang diperlukan untuk modul.
+ **Buat atau perbarui tumpukan** — Saat Anda memulai operasi tumpukan, buat templat yang CloudFormation diproses yang menyelesaikan modul apa pun yang disertakan ke dalam sumber daya yang sesuai. 
+ **Pratinjau perubahan** — Sebelum membuat perubahan, Anda dapat menggunakan set perubahan untuk melihat sumber daya apa yang akan ditambahkan atau diubah. Untuk informasi selengkapnya, lihat [Perbarui CloudFormation tumpukan menggunakan set perubahan](using-cfn-updating-stacks-changesets.md).

Perhatikan contoh berikut: Anda memiliki templat yang berisi sumber daya dan modul. Template berisi satu sumber daya individu`ResourceA`,, serta modul,`ModuleParent`. Modul itu berisi dua sumber daya`ResourceC`, `ResourceB` dan, serta modul bersarang,`ModuleChild`. `ModuleChild`berisi satu sumber daya,`ResourceD`. Jika Anda membuat tumpukan dari template ini, CloudFormation proses template dan menyelesaikan modul ke sumber daya yang sesuai. Tumpukan yang dihasilkan memiliki empat sumber daya: `ResourceA``ResourceB`,,`ResourceC`, dan`ResourceD`.

![\[Selama operasi tumpukan, CloudFormation menyelesaikan dua modul yang disertakan dalam template tumpukan ke dalam empat sumber daya yang sesuai.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/modules-resource-inclusion.png)


CloudFormation melacak sumber daya mana dalam tumpukan yang dibuat dari modul. Anda dapat melihat informasi ini di **Peristiwa**, **Sumber Daya**, dantab **Drifts** untuk tumpukan tertentu, dan itu juga termasuk dalam perubahan set pratinjau.

Modul dibedakan dari sumber daya dalam template karena mereka mematuhi empat bagian konvensi penamaan berikut, sebagai kebalikan dari konvensi tiga bagian khas yang digunakan oleh sumber daya:

```
organization::service::use-case::MODULE
```

# Gunakan parameter untuk menentukan nilai modul
<a name="module-using-params"></a>

Di CloudFormation, Anda dapat menggunakan parameter template untuk menyesuaikan tumpukan Anda dengan memberikan nilai input selama pembuatan atau pembaruan tumpukan. Parameter ini memungkinkan Anda untuk mengubah aspek-aspek tertentu dari tumpukan berdasarkan kebutuhan Anda. Untuk informasi selengkapnya tentang mendefinisikan parameter template, lihat[CloudFormation Parameterssintaks template](parameters-section-structure.md).

Demikian pula, modul juga dapat memiliki parameter. Parameter modul ini memungkinkan Anda untuk memasukkan nilai kustom ke modul dari template (atau modul lain) yang menggunakannya. Modul kemudian dapat menggunakan nilai-nilai kustom ini untuk menetapkan nilai properti untuk sumber daya yang dikandungnya.

Anda juga dapat menentukan parameter template yang mengatur properti modul, sehingga Anda dapat memasukkan nilai yang diteruskan ke modul pada saat operasi tumpukan. 

Jika modul berisi modul bersarang yang memiliki parameter modulnya sendiri, Anda dapat:
+ Menentukan nilai untuk parameter modul bersarang ini langsung di modul induk.
+ Mendefinisikan parameter modul yang sesuai dalam modul induk yang memungkinkan parameter modul bersarang untuk ditetapkan oleh templat (atau modul) di mana modul induk berada.

## Menggunakan parameter templat untuk menentukan nilai parameter modul
<a name="module-using-params-example-1"></a>

Contoh berikut menunjukkan cara menentukan parameter templat yang lulus nilai modul.

Template ini berisi `My::S3::SampleBucket::MODULE` mendefinisikan parameter template,`BucketName`, yang memungkinkan pengguna untuk menentukan nama bucket S3 selama operasi stack.

```
# Template containing My::S3::SampleBucket::MODULE
Parameters:
  BucketName:
    Description: Name for your sample bucket
    Type: String
Resources:
  MyBucket:
    Type: 'My::S3::SampleBucket::MODULE'
    Properties:
      BucketName: !Ref BucketName
```

## Menentukan properti pada sumber daya dalam modul anak dari modul induk
<a name="module-using-params-example-2"></a>

Contoh berikut menggambarkan cara menentukan nilai parameter dalam modul yang bersarang di modul lain.

Modul pertama ini, `My::S3::SampleBucketPrivate::MODULE`, akan menjadi modul anak. Ini mendefinisikan dua parameter: `BucketName` dan `AccessControl`. Nilai-nilai yang ditentukan untuk parameter ini digunakan untuk menentukan `BucketName` dan `AccessControl` properti `AWS::S3::Bucket` sumber daya yang dimuat modul. Berikut adalah fragmen templat untuk `My::S3::SampleBucketPrivate::MODULE`.

```
# My::S3::SampleBucketPrivate::MODULE
AWSTemplateFormatVersion: 2010-09-09
Description: A sample S3 Bucket with Versioning and DeletionPolicy.
Parameters:
  BucketName:
    Description: Name for the bucket
    Type: String
  AccessControl:
    Description: AccessControl for the bucket
    Type: String
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref BucketName
      AccessControl: !Ref AccessControl
      DeletionPolicy: Retain
      VersioningConfiguration:
        Status: Enabled
```

Selanjutnya, modul sebelumnya bersarang dalam modul induk, `My::S3::SampleBucket::MODULE`. Modul induk, `My::S3::SampleBucket::MODULE`, menetapkan parameter modul anak dengan cara berikut:
+ Ini menetapkan `AccessControl` parameter `My::S3::SampleBucketPrivate::MODULE` untuk`Private`.
+ Untuk `BucketName`, ia mendefinisikan parameter modul, yang akan memungkinkan nama bucket untuk ditentukan dalam templat (atau modul) yang berisi `My::S3::SampleBucket::MODULE`.

```
# My::S3::SampleBucket::MODULE
AWSTemplateFormatVersion: 2010-09-09
Description: A sample S3 Bucket. With Private AccessControl.
Parameters:
  BucketName:
    Description: Name for your sample bucket
    Type: String
Resources:
  MyBucket:
    Type: 'My::S3::SampleBucketPrivate::MODULE'
    Properties:
      BucketName: !Ref BucketName
      AccessControl: Private
```

## Menentukan kendala untuk parameter modul
<a name="modules-using-parameters-constraints"></a>

Parameter modul tidak mendukung penegakan kendala. Untuk melakukan pemeriksaan kendala pada parameter modul, buat parameter template dengan batasan yang diinginkan. Kemudian, referensikan parameter template itu di parameter modul Anda. Untuk informasi selengkapnya tentang mendefinisikan parameter template, lihat[CloudFormation Parameterssintaks template](parameters-section-structure.md).

# Sumber daya modul referensi dalam CloudFormation templat
<a name="module-ref-resources"></a>

Dalam CloudFormation template, Anda sering perlu mengatur properti pada satu sumber daya berdasarkan nama atau properti sumber daya lain. Untuk informasi selengkapnya, lihat [Referensi sumber daya](resources-section-structure.md#using-cross-resource-references).

Untuk mereferensikan sumber daya yang terkandung dalam modul dalam CloudFormation template Anda, Anda harus menggabungkan dua nama logis:
+ Nama logis yang Anda berikan ke modul itu sendiri ketika Anda memasukkannya ke dalam template Anda.
+ Nama logis dari sumber daya tertentu dalam modul itu.

Anda dapat menggabungkan dua nama logis ini dengan atau tanpa menggunakan titik (.) di antara keduanya. Misalnya, jika nama logis modul adalah `MyModule` dan nama logis sumber daya adalah`MyBucket`, Anda dapat merujuk ke sumber daya itu sebagai salah satu `MyModule.MyBucket` atau`MyModuleMyBucket`.

Untuk menemukan nama logis sumber daya di dalam modul, Anda dapat berkonsultasi dengan skema modul, yang tersedia di CloudFormation registri atau dengan menggunakan [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html)operasi. Skema ini mencantumkan semua sumber daya dan nama logisnya yang merupakan bagian dari modul.

Setelah Anda memiliki nama logis lengkap, Anda dapat menggunakan CloudFormation fungsi seperti `GetAtt` dan `Ref` untuk mengakses nilai properti pada sumber daya modul. 

Misalnya, Anda memiliki `My::S3::SampleBucket::MODULE` modul yang berisi `AWS::S3::Bucket` sumber daya dengan nama logis`S3Bucket`. Untuk merujuk ke nama bucket ini menggunakan `Ref` fungsi, Anda menggabungkan nama modul dalam template (`MyBucket`) Anda dengan nama logis sumber daya dalam modul (`S3Bucket`). Nama logis lengkapnya adalah salah satu `MyBucket.S3Bucket` atau`MyBucketS3Bucket`.

**Contoh Templat**  
Contoh template berikut membuat bucket S3 menggunakan `My::S3::SampleBucket::MODULE` modul. Itu juga membuat antrian Amazon SQS dan mengatur namanya menjadi sama dengan nama bucket dari modul. Selain itu, template menampilkan Amazon Resource Name (ARN) dari bucket S3 yang dibuat.

```
# Template that uses My::S3::SampleBucket::MODULE
Parameters:
  BucketName:
    Description: Name for your sample bucket
    Type: String
Resources:
  MyBucket:
    Type: My::S3::SampleBucket::MODULE
    Properties:
      BucketName: !Ref BucketName
  exampleQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: !Ref MyBucket.S3Bucket
Outputs:
  BucketArn:
    Value: !GetAtt MyBucket.S3Bucket.Arn
```