Menggunakan modul untuk merangkum dan menggunakan kembali konfigurasi sumber daya - AWS CloudFormation

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

Menggunakan modul untuk merangkum dan menggunakan kembali konfigurasi sumber daya

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, ahli domain dalam jaringan dapat membuat modul yang berisi grup keamanan internal dan aturan masukan/keluar yang mematuhi pedoman keamanan. Anda dapat menyertakan modul tersebut dalam templat untuk menyediakan infrastruktur jaringan yang aman di tumpukan tanpa harus menghabiskan waktu untuk mencari tahu cara kerja VPC, subnet, 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 didaftarkannya di CloudFormation registri, sehingga Anda tahu sumber daya apa yang dapat diselesaikan setelah Anda memasukkannya ke dalam templat Anda.

  • Dapat digunakan kembali: Anda dapat menggunakan modul yang sama di beberapa templat 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 ketersediaan akun dan wilayah.

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 jenis modul, lihat Mengembangkan jenis modul di Panduan Pengguna Antarmuka Baris CloudFormation Perintah.

Menggunakan modul dalam templat

Untuk menggunakan modul, pastikan terdaftar di akun dan wilayah tempat Anda ingin menggunakannya. Untuk informasi selengkapnya, lihat Ekstensi publik dan pribadi. Anda mendaftarkan modul dalam CloudFormation registri sebagai ekstensi pribadi. Kemudian, perlakukan seperti Anda memperlakukan sumber daya individu:

  • Sertakan dalam Resources bagian dari templat Anda.

  • Tentukan properti yang diperlukan untuk modul.

Saat Anda memulai operasi tumpukan, buat template yang CloudFormation diproses yang menyelesaikan modul apa pun yang disertakan ke dalam sumber daya yang sesuai. Gunakan perubahan set untuk melihat sumber daya yang akan ditambahkan atau diperbarui sebelum benar-benar menjalankan operasi tumpukan. Untuk informasi selengkapnya, lihat Memperbarui tumpukan menggunakan set perubahan.

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, ResourceB dan ResourceC, serta modul bersarang,. ModuleChild ModuleChildberisi sumber daya tunggal, 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 Sumber Daya.

Selama operasi tumpukan, CloudFormation menyelesaikan dua modul yang disertakan dalam template tumpukan ke dalam empat sumber daya yang sesuai.

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

Menggunakan parameter untuk menentukan nilai modul

Modul dapat mencakup parameter modul. Sama seperti parameter templat, parameter modul memungkinkan Anda untuk memasukkan nilai-nilai kustom ke modul Anda dari templat (atau modul) yang berisi itu. Modul kemudian dapat menggunakan nilai-nilai ini untuk mengatur properti sumber daya yang dikandungnya.

Anda juga dapat menentukan parameter templat yang pada gilirannya mengatur properti modul, sehingga pengguna dapat memasukkan nilai yang bisa diteruskan ke modul pada saat operasi tumpukan. Untuk informasi selengkapnya tentang mendefinisikan parameter template, lihatParameters.

Demikian juga, jika modul berisi modul bersarang yang mencakup parameter modul, 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

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

Di sini, templat yang berisi My::S3::SampleBucket::MODULE mendefinisikan sebuah parameter templat, BucketName, yang memungkinkan pengguna untuk menentukan nama Bucket S3 selama operasi tumpukan.

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

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 untukPrivate.

  • 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

Parameter modul tidak mendukung penegakan kendala. Untuk informasi selengkapnya, lihat Properti. Untuk melakukan pemeriksaan kendala pada parameter modul, buat parameter template dengan batasan yang diinginkan, lalu referensikan parameter template tersebut dalam parameter modul Anda.

Referensi sumber daya dalam sebuah modul

Sumber daya dalam modul dapat direferensikan dengan nama logis. Nama logis sepenuhnya memenuhi syarat dari sumber daya yang terkandung dalam modul dapat dibangun dengan menggabungkan:

  • Nama logis yang ditentukan untuk modul dalam templat yang memuat (atau modul yang dimuat).

  • Nama logis untuk sumber daya, ditentukan dalam modul.

Nama logis sepenuhnya memenuhi syarat untuk sumber daya dapat ditentukan dengan atau tanpa menggunakan periode sebagai pembatas. Misalnya, kedua nama logis di bawah ini valid, dan setara secara fungsional:

  • ModuleLogicalName.ResourceLogicalName

  • ModuleLogicalNameResourceLogicalName

Dengan cara ini, Anda bisa menggunakannya GetAtt dan Ref fungsi intrinsik untuk mengakses nilai properti pada sumber daya modul.

Dalam contoh berikut, templat mereferensikan properti dalam modul untuk mengatur properti yang sesuai pada sumber daya dalam templat itu sendiri.

Bayangkan jika My::S3::SampleBucket::MODULE modul berisi AWS::S3::Bucket sumber daya dengan nama logis dari S3Bucket. Untuk referensi nama bucket sumber daya ini menggunakan Ref fungsi intrinsik, menggabungkan nama logis yang diberikan modul dalam templat, MyBucket, dengan nama logis dari sumber daya dalam modul, S3Bucket, untuk mendapatkan nama logis yang memenuhi syarat dari sumber daya: baik MyBucket.S3Bucket atau MyBucketS3Bucket.

Nama-nama logis dari sumber daya yang dimuat dalam modul ditentukan dalam skema modul. Anda dapat mengakses Amazon dengan cara berikut:

  • Menemukan modul di CloudFormation registri. Tab Skema menampilkan skema modul.

  • Menggunakan DescribeTypeoperasi untuk mengembalikan detail modul, yang mencakup skema.

// 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": { "Fn::GetAtt": [ "MyBucket", "S3Bucket.Arn" ] } } } }
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

Pertimbangan saat menggunakan modul

  • 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.

  • 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 lebih lanjut tentang output, lihatOutputs.

  • Parameter yang ditentukan dalam modul tidak disebarkan ke parameter pada tingkat templat.

    Namun, Anda dapat membuat parameter tingkat templat yang mereferensikan parameter tingkat modul. Untuk informasi selengkapnya, lihat Menggunakan parameter untuk menentukan nilai modul.

Pendaftaran dan versioning modul

Anda mendaftar dan mengelola modul di akun dan wilayah Anda menggunakan CloudFormation registri. Untuk informasi selengkapnya, lihat Mengelola ekstensi dengan CloudFormation registri.

Anda dapat mendaftarkan beberapa versi dari modul yang sama di akun dan wilayah tertentu. Perhatikan pertimbangan berikut:

  • Modul harus terdaftar di akun dan wilayah tempat Anda ingin menggunakannya.

  • Selama operasi tumpukan, CloudFormation gunakan versi modul apa pun yang saat ini terdaftar sebagai versi default di akun dan wilayah tempat operasi tumpukan sedang dilakukan. Ini termasuk modul yang bersarang di modul lain.

    Oleh karena itu, perhatikan bahwa jika Anda memiliki modul yang sama dengan versi yang berbeda sebagai versi default di akun atau wilayah yang berbeda, menggunakan templat yang sama dapat mengakibatkan hasil yang berbeda.

    Untuk informasi selengkapnya, lihat Menentukan versi ekstensi pribadi untuk digunakan menggunakan AWS CLI.

  • Selama operasi tumpukan, CloudFormation gunakan versi sumber daya apa pun yang saat ini terdaftar sebagai versi default di akun 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 termasuk modul dalam templat tumpukan untuk digunakan dengan set tumpukan, Anda harus memastikan bahwa versi modul yang sama ditetapkan sebagai versi default di semua akun dan wilayah di mana Anda berencana untuk men-deploy contoh tumpukan Anda. Ini termasuk untuk modul yang bersarang di modul lain. Untuk informasi selengkapnya tentang set tumpukan, lihatBekerja dengan AWS CloudFormation StackSets.

Untuk informasi selengkapnya tentang mendaftarkan versi baru modul, atau mengubah versi default modul, lihatMengelola ekstensi dengan CloudFormation registri.

Mengaktifkan modul publik untuk digunakan di akun Anda

Agar berhasil mengaktifkan modul publik di akun dan wilayah Anda, hal berikut harus benar untuk setiap ekstensi publik pihak ketiga (sumber daya atau modul) yang disertakan dalam modul:

  • Ekstensi harus sudah diaktifkan di akun dan wilayah Anda.

    Jika ekstensi dalam modul menggunakan alias nama jenis, ekstensi harus terdaftar di akun dan wilayah Anda menggunakan alias nama jenis yang sama. Untuk informasi selengkapnya, lihat Menentukan alias untuk mereferensikan ke ekstensi.

  • Versi ekstensi yang saat ini diaktifkan harus merupakan salah satu versi utama yang didukung dari ekstensi yang ditentukan dalam modul. Untuk informasi selengkapnya, lihat Persyaratan modul untuk menerbitkan modul publik di Panduan Pengguna CloudFormation CLI.

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