CloudFormation adalah kuat AWS fasilitas yang memungkinkan program penciptaan AWS sumber daya tumpukan, seperti web tier yang application, a high performance computing cluster, atau seluruh aplikasi stack, dengan satu panggilan API. Hal ini sangat kuat. Menggunakan hal ini tentu dianggap baik AWS praktek, terutama ketika itu's dikombinasikan dengan Chef Boneka atau awan-init. Debugging itu mendorong saya untuk wakil.
Produksi contoh: saham mongodb cluster templates tidak't bekerja untuk saya. Saya don't benar-benar tahu mengapa. I'm yakin itu's sesuatu yang sederhana seperti itu hampir selalu. Masalah saya isn't yang saya dapat't tahu apa yang's salah. It's yang dibutuhkan stack antara 20 dan 30 menit untuk gagal, dan kemudian tiga atau empat menit untuk menghapus, asumsi itu menghapus sumber daya dengan baik pada semua.
Apa yang saya hilang? Aku tahu tentang --disable-rollback
bendera dan menggunakannya seperti oksigen. Saya sudah lama belajar untuk membungkus keluar pesan dengan cfn-sinyal
dan membuang mereka seperti ballast dari kapal yang tenggelam. Bagaimana saya bisa membuat template debugging proses lebih cepat, atau aku terjebak selamanya memperhatikan kesalahan-kesalahan saya setengah jam setelah aku membuat mereka?
Gunakan aws cloudformation memvalidasi-template
perintah di AWS CLI alat. Itu hanya memvalidasi apakah anda template valid JSON atau YAML, bukan apakah anda kunci dan nilai-nilai yang benar (misalnya doesn't memeriksa kesalahan ketik di kunci)
Pilihan lain, setahun kemudian, adalah untuk abstrak template ini ke pihak ke-3 perpustakaan, seperti troposfer. Perpustakaan konstruksi JSON muatan untuk anda, dan tidak banyak dari validasi di sepanjang jalan. Ini juga memecahkan "Wow mengelola 1000-line file JSON yakin sedih" masalah.
Bagaimana saya bisa membuat template debugging proses lebih cepat, atau aku terjebak selamanya memperhatikan kesalahan-kesalahan saya setengah jam setelah aku membuat mereka?
Berikut adalah beberapa praktek terbaik saran, dengan fokus khusus pada peningkatan iterasi kecepatan angin dan kompleks CloudFormation-template pembangunan:
AWS telah diuraikan tersebut di sendiri praktek-Praktek Terbaik dokumen, jadi saya tidak't ulangi mereka:
Inti dari langkah ini adalah untuk menangkap jelas sintaks atau kesalahan logis sebelum benar-benar melakukan sebuah Stack pembuatan/pembaharuan.
Sebelum menggunakan setiap individu CloudFormation Sumber daya di kompleks Stack, pastikan anda benar-benar memahami sepenuhnya bahwa Sumber daya's creation/update/menghapus perilaku, termasuk batasan pada penggunaan dan khas startup/teardown kali, dengan menguji perilaku mereka yang lebih kecil, standalone Tumpukan pertama.
AWS::CloudFront::Distribution
sumber daya dapat kadang-kadang mengambil 30-60 menit buat/update/hapus, sementara AWS::EC2::SecurityGroup
update dalam hitungan detik.Ketika melakukan Stack pembuatan/update, kegagalan dalam salah satu Sumber daya akan menyebabkan Stack untuk rollback seluruh set dari perubahan Sumber daya, yang tidak perlu dapat menghancurkan lainnya berhasil diciptakan sumber Daya dan memakan waktu yang sangat lama ketika bangunan yang rumit stack dengan panjang ketergantungan-grafik sumber Daya terkait.
Solusi untuk ini adalah untuk membangun Tumpukan anda secara bertahap lebih kecil Update batch, menambahkan sumber Daya satu (atau beberapa) pada suatu waktu. Dengan cara ini, jika/ketika terjadi kegagalan dalam sumber daya penciptaan/update, rollback doesn't menyebabkan seluruh Stack's sumber daya untuk dihancurkan, hanya mengatur sumber Daya yang berubah dalam Update terbaru.
Pastikan untuk Memantau Kemajuan anda Stack Update dengan melihat stack's peristiwa sementara penciptaan/update dilakukan. Ini akan menjadi titik awal untuk debugging masalah lebih lanjut dengan masing-masing sumber daya.
Apakah anda melihat AWS CloudFormation Template Editor yang termasuk dalam AWS Toolkit untuk Eclipse? Memiliki sintaks, pernyataan penyelesaian, dan penyebaran AWS CloudFormation.
Terlambat ke pesta tapi aku mungkin juga menambahkan bahwa tidak ada salahnya meluangkan sedikit waktu mengkonfigurasi dan belajar editor anda. Aku tahu itu terdengar laughably dasar sebagai jawaban tapi mencoba itu.
Dalam kasus saya, dengan vim, saya tampil jauh lebih baik setelah saya mengambil beberapa waktu menginstal json sintaks plugin, dan juga (akhirnya) memahami teknik lipat untuk menavigasi besar LIH file dengan mudah. Saya sekarang menunjukkan kesalahan ketik (koma di mana mereka seharusnya't dll) dan warna yang menyoroti menghemat banyak waktu jelas memberikan petunjuk visual.
Hal ini mungkin dapat membantu mengurangi kesalahan sintaks, tetapi di-template kesalahan logis yang baik tetap dengan alat-alat lain. Mudah-mudahan suatu hari akan ada "preview" mode on LIH.
The AWS CloudFormation linter memberikan tambahan analisis statis di luar aws cloudformation memvalidasi-template
Ini akan memberitahu anda jenis sumber daya dan jenis misalnya tidak tersedia di daerah tertentu, memvalidasi nilai properti terhadap nilai yang diizinkan, menangkap melingkar sumber daya dependensi, kesalahan sintaks, dan banyak lagi
Selain CLI, salah satu yang paling populer mekanisme untuk mengingat untuk menjalankan linter adalah menginstal plugin editor seperti Kode Visual Studio ekstensi yang berjalan pada setiap file save
Mekanisme lain seperti pre-commit Git kait dijelaskan here
Jika anda berurusan dengan EC2 mesin, maka saya akan merekomendasikan anda untuk login ke EC2 mesin dan ekor boot.file log (/var/log/boot.log in RHEL6/Centos). File ini akan diperbarui dengan semua shell kegiatan (kegiatan seperti: instalasi, men-download file, menyalin file-file dll.).
Juga, gunakan editor seperti http://www.jsoneditoronline.org/ untuk mendapatkan POHON representasi dari JSON anda. Ini membantu anda untuk memeriksa urutan dari JSON elemen.
Dan ketika anda memperbarui file selalu menggunakan alat-alat seperti http://www.git-tower.com/blog/diff-tools-mac atau sebenarnya sistem kontrol versi untuk memastikan bahwa anda tidak sengaja mengubah sesuatu yang mungkin istirahat naskah anda.
Baru-baru ini fitur baru yang ditambahkan ke Cloudformation ini desember lalu adalah penambahan tambahan Jenis Parameter. Ini Jenis baru memungkinkan template anda untuk melakukan yang lebih kuat pengecekan data, dan juga dapat "gagal-fast" ketika menciptakan sumber daya dan bersarang Cloudformation tumpukan. Anda juga memiliki kemampuan untuk memberikan yang lebih baik yang dapat dibaca manusia kustom pesan error ketika tidak valid nilai-nilai yang diwariskan dalam menggunakan baru ConstraintDescription atribut.
Jenis baru yang sangat membantu ketika berhadapan dengan berbagai VPC sumber daya. Anda dapat memastikan bahwa Parameter untuk template anda adalah tipe yang benar, dan yang eksplisit tentang mengharapkan nilai tunggal vs. Daftar.
Misalnya:
"Parameters" : {
"SingleGroup": { "Type": "AWS::EC2::SecurityGroup::Id", ...},
"GroupList": {"Type": "List<AWS::EC2::SecurityGroup::Id>", ...}
}
Anda juga dapat membuat penggunaan CloudFormation Desainer yang tersedia dari amazon di sini: https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1
Hanya paste template anda (JSON) pada "Template" panel, dan kemudian klik pada tick simbol untuk memvalidasi template anda. Setiap kesalahan akan muncul di "Kesalahan" pane.
Semoga ini bisa membantu.
Silakan checkout saya cloudformation validator di https://pypi.org/project/cloudformation-validator/
Ini akan memvalidasi skema dan kemudian memvalidasi lagi daftar aturan, dan memungkinkan untuk aturan adat. Aku juga memungkinkan untuk integrasi yang mudah dengan penggunaan alat.