Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Ikhtisar CloudFormation makro
Ada dua langkah utama untuk memproses templat menggunakan makro: membuat makro itu sendiri, lalu menggunakan makro untuk melakukan pemrosesan pada templat Anda.
Untuk membuat definisi makro, Anda harus membuat yang berikut:
-
Fungsi Lambda untuk melakukan pemrosesan template. Fungsi Lambda ini menerima cuplikan atau seluruh templat, dan parameter tambahan apa pun yang Anda tentukan. Fungsi ini mengembalikan snippet templat yang diproses atau seluruh templat sebagai respons.
-
Sumber daya tipe AWS::CloudFormation::Macro, yang memungkinkan pengguna untuk memanggil fungsi Lambda dari dalam CloudFormation template. Sumber daya ini menentukan fungsi Lambda untuk memanggil makro ini, dan properti opsional tambahan untuk membantu debugging. ARN Untuk membuat sumber daya ini di dalam akun, buat templat yang menyertakan
AWS::CloudFormation::Macro
sumber daya, lalu buat tumpukan atau kumpulan tumpukan dengan izin yang dikelola sendiri dari templat. AWS CloudFormation StackSetssaat ini tidak mendukung pembuatan atau pembaruan kumpulan tumpukan dengan izin yang dikelola layanan dari templat yang mereferensikan makro.
Untuk menggunakan makro, referensikan makro dalam templat Anda:
-
Untuk memproses bagian, atau bagian, dari template, referensi makro dalam
Fn::Transform
fungsi yang terletak relatif terhadap konten template yang ingin Anda ubah. Saat menggunakanFn::Transform
, Anda juga dapat melewati parameter tertentu yang diperlukan. -
Untuk memproses seluruh template, referensikan makro di bagian Transform dari templat.
Selanjutnya, Anda biasanya membuat set perubahan dan kemudian menjalankannya. (Memproses makro dapat menambahkan beberapa sumber daya yang mungkin tidak Anda sadari. Untuk memastikan bahwa Anda mengetahui semua perubahan yang diperkenalkan oleh makro, kami sangat menyarankan agar Anda menggunakan set perubahan.) CloudFormation meneruskan konten template yang ditentukan, bersama dengan parameter tambahan yang ditentukan, ke fungsi Lambda yang ditentukan dalam sumber daya makro. Fungsi Lambda mengembalikan konten template yang diproses, baik itu cuplikan atau seluruh template.
Setelah semua makro dalam template dipanggil, CloudFormation menghasilkan set perubahan yang menyertakan konten template yang diproses. Setelah Anda meninjau set perubahan, jalankan untuk menerapkan perubahan.
Cara membuat tumpukan secara langsung
Untuk membuat atau memperbarui tumpukan menggunakan templat yang mereferensikan makro, Anda biasanya membuat set perubahan, lalu menjalankannya. Set perubahan menjelaskan tindakan yang akan diambil CloudFormation berdasarkan templat yang diproses. Memproses makro dapat menambahkan beberapa sumber daya yang mungkin tidak Anda sadari. Untuk memastikan bahwa Anda mengetahui semua perubahan yang diperkenalkan oleh makro, kami sangat menyarankan Anda menggunakan set perubahan. Setelah Anda meninjau set perubahan, Anda dapat menjalankannya untuk benar-benar menerapkan perubahan.
Sebuah makro dapat menambahkan sumber daya IAM ke templat Anda. Untuk sumber daya ini, CloudFormation mengharuskan Anda untuk mengakui kemampuan mereka. Karena tidak CloudFormation dapat mengetahui sumber daya mana yang ditambahkan sebelum memproses templat, Anda mungkin perlu mengakui IAM kemampuan saat membuat set perubahan, tergantung pada apakah makro yang direferensikan berisi sumber daya. IAM Dengan begitu, ketika Anda menjalankan set perubahan, CloudFormation memiliki kemampuan yang diperlukan untuk membuat IAM sumber daya.
Untuk membuat atau memperbarui tumpukan langsung dari template yang diproses tanpa terlebih dahulu meninjau perubahan yang diusulkan dalam set perubahan, tentukan CAPABILITY_AUTO_EXPAND
kemampuan selama UpdateStack
permintaan CreateStack
atau permintaan. Anda hanya boleh membuat tumpukan langsung dari templat tumpukan yang berisi makro jika Anda tahu apa yang dilakukan pemrosesan makro. Anda tidak dapat menggunakan set perubahan dengan makro set tumpukan; Anda harus memperbarui set tumpukan Anda secara langsung.
Untuk informasi selengkapnya, silakan lihat CreateStack atau UpdateStackdalam AWS CloudFormation APIReferensi.
penting
Jika templat set tumpukan Anda mereferensikan satu atau beberapa makro, Anda harus membuat set tumpukan langsung dari templat yang diproses, tanpa terlebih dahulu meninjau perubahan yang dihasilkan dalam set perubahan. Memproses makro dapat menambahkan beberapa sumber daya yang mungkin tidak Anda sadari. Sebelum Anda membuat atau memperbarui set tumpukan dari templat yang mereferensikan makro secara langsung, pastikan Anda mengetahui apa yang dilakukan pemrosesan makro.
Untuk mengurangi jumlah langkah untuk meluncurkan tumpukan dari template yang mereferensikan makro, Anda dapat menggunakan perintah package
and deploy
AWS CLI . Untuk informasi selengkapnya, silakan lihat Unggah artefak lokal ke bucket S3 dengan AWS CLI dan Buat tumpukan yang mencakup transformasi.
Pertimbangan
Saat bekerja dengan makro, ingatlah catatan dan batasan berikut:
-
Makro hanya didukung di Wilayah AWS tempat Lambda tersedia. Untuk daftar Wilayah di mana Lambda tersedia, lihat AWS Lambda titik akhir dan kuota.
-
Setiap cuplikan template yang diproses harus valid. JSON
-
Setiap snippet templat yang diproses harus lulus pemeriksaan validasi untuk operasi membuat tumpukan, memperbarui tumpukan, membuat set tumpukan, atau memperbarui set tumpukan.
-
CloudFormation menyelesaikan makro terlebih dahulu, dan kemudian memproses template. Template yang dihasilkan harus valid JSON dan tidak boleh melebihi batas ukuran template.
-
Karena urutan CloudFormation proses elemen dalam template, makro tidak dapat menyertakan modul dalam konten template yang diproses yang dikembalikan. CloudFormation Untuk informasi selengkapnya, lihat Urutan evaluasi makro.
-
Saat menggunakan fitur update rollback, CloudFormation gunakan salinan template asli. Itu memutar kembali ke templat asli bahkan jika snippet yang disertakan diubah.
-
Menyertakan makro dalam makro tidak berfungsi karena kami tidak memproses makro secara rekursif.
-
Fungsi intrinsik
Fn::ImportValue
saat ini tidak didukung dalam makro. -
Fungsi intrinsik yang termasuk dalam templat dievaluasi setelah makro apapun. Oleh karena itu, konten template yang diproses yang dikembalikan makro Anda dapat menyertakan panggilan ke fungsi intrinsik, dan mereka dievaluasi seperti biasa.
-
StackSets saat ini tidak mendukung pembuatan atau pembaruan kumpulan tumpukan dengan izin yang dikelola layanan dari templat yang mereferensikan makro. CloudFormation
Cakupan akun makro dan izin
Anda dapat menggunakan makro hanya di akun tempat mereka dibuat sebagai sumber daya. Nama makro harus unik dalam akun tertentu. Namun, Anda dapat membuat fungsionalitas yang sama tersedia di beberapa akun dengan mengaktifkan akses lintas akun pada fungsi Lambda yang mendasarinya, dan kemudian membuat definisi makro yang merujuk fungsi tersebut di beberapa akun. Dalam contoh di bawah ini, tiga akun berisi definisi makro yang masing-masing menunjuk ke fungsi Lambda yang sama.
Untuk membuat definisi makro, pengguna harus memiliki izin untuk membuat tumpukan atau tumpukan yang ditetapkan dalam akun yang ditentukan.
CloudFormation Agar berhasil menjalankan makro yang disertakan dalam template, pengguna harus memiliki Invoke
izin untuk fungsi Lambda yang mendasarinya. Untuk mencegah potensi eskalasi izin, CloudFormation meniru pengguna saat menjalankan makro.
Untuk informasi selengkapnya, lihat Mengelola izin AWS Lambda di Panduan AWS Lambda Pengembang dan Tindakan, sumber daya, dan kunci kondisi AWS Lambda di Referensi Otorisasi Layanan.