Menguji Infrastruktur sebagai Terraform Code: Analisis pengujian unit dan pengembangan ujung ke ujung dengan menguji perilaku





Untuk calon siswa kursus "Infrastruktur sebagai kode dalam Ansible" dan semua yang tertarik, kami menyiapkan terjemahan materi yang bermanfaat.



Kami juga mengundang Anda untuk mendaftar pelajaran terbuka dengan topik "Mengelola Kubernetes dengan Kubespray" .









Selamat datang kembali! Ini adalah artikel teknis lain dari rangkaian artikel terraform dan kubernetes tentang infrastruktur sebagai kode oleh Contino.



TL; DR

Ukuran perintah tidak masalah. Bagaimanapun, menerapkan analisis konfigurasi infrastruktur terraform yang baik dan pengujian kewarasan ujung ke ujung tidak harus menjadi proses yang panjang dan rumit.



Saya dihadapkan pada tantangan yang menarik: untuk mengeksplorasi, mengembangkan, dan menyajikan kerangka pengujian open source yang sesuai untuk basis kode terraform sebagai bagian dari pipeline rilis infrastruktur. Prinsip "kendali mutu dalam segala hal" jauh dari baru. Tetapi implementasinya bergantung pada kematangan infrastruktur organisasi dan tingkat risiko yang dapat diterima - hingga tahap pencapaian produk jadi [dengan cara apa pun].



Melihat kembali bidang pengujian kode infrastruktur memungkinkan saya untuk menjadi terbiasa dengan kerangka pengujian terbaru dan memperbarui pengetahuan saya.



gambar



Diakui, pada awal perjalanan saya, saya menderita prasangka bahwa mempersiapkan dan menerapkan "kendali mutu kelas perusahaan" semacam itu bisa memakan banyak tenaga.



Lagi pula, Hashicorp Terraform memiliki fungsionalitas yang cukup untuk memvalidasi dan memvalidasi basis kode Anda.



  • Kontrol kualitas kode - terraform fmt -check



    dan terraform validate



    .
  • Pratinjau - terraform plan



    .
  • Konstruksi - TFLOG=debug terraform apply



    untuk verifikasi yang cermat.


Alat analisis kode statis Terraform



Sisir Google telah mengungkapkan daftar yang sangat luas dari alat pengujian terraform yang berpotensi berguna.



Tapi pertama-tama, mari kita lihat daftar persyaratan kami.



  • Memiliki pengujian unit dalam konfigurasi resource terraform dan kemampuan untuk memperluas daftar umum pemeriksaan praktik terbaik * apa pun untuk penyedia cloud tertentu. Selain itu, kami tertarik dengan alat yang mudah digunakan yang dapat Anda mulai dengan segera.


* Kurangnya instans ec2 yang terpapar ke 0.0.0.0/0 dunia - dan seterusnya.



  •  — «» , . , , , EKS.


  • , , — , , . , , .


  • , . , , Go Python. , , , , . , , . , .


Spotlight: Menganalisis dan Membandingkan Alat dan Platform Pengujian Terraform



Semoga daftar berikut ini akan membuat pekerjaan Anda pada analisis infrastruktur-sebagai-kode statis dan kontrol kualitas lebih mudah. Catatan, ini adalah daftar lengkap dari semua alat pengujian terraform relevan yang saya temukan, yang merupakan campuran dari pengujian validitas konfigurasi, kontrol kualitas kode, dan praktik terbaik yang berfokus pada secOps dengan pengujian unit. Daftar ini disajikan di bawah.









Mari kita rangkum. Saya mencoba menemukan pengujian unit standar untuk komponen sumber daya terraform dan serangkaian pengujian khusus yang mengambil konfigurasi sumber daya untuk memvalidasi hasil terraform plan



.



Setelah mempertimbangkan kelebihan dan kekurangan masing-masing platform, saya memilih alat checkov



dan platform dengan nama yang sangat tepat terraform-compliance



 - keduanya ditulis dengan python. Mereka memenuhi semua persyaratan saya yang dijelaskan di atas.



Pipeline rilis infrastruktur sebagai kode terlihat seperti ini secara umum.



Setelah mempelajari platform ini secara menyeluruh, saya pasti merevisi pengalaman saya sendiri dan sampai pada kesimpulan yang relevan berikut ini tentang topik yang sedang dibahas:



  • .
  • , , , .
  • , , , - « » « ».




 — Checkov BridgeCrew



www.checkov.io



Checkov adalah alat analisis kode statis untuk infrastruktur sebagai kode.



Ini memindai infrastruktur cloud yang disediakan dengan Terraform, Cloudformation, Kubernetes, Serverless, atau ARM template dan mengidentifikasi kesalahan konfigurasi untuk keamanan dan kepatuhan.


Ada beberapa pengujian unit default yang dijalankan saat memindai repositori kode terraform yang menunjukkan penyimpangan dari praktik terbaik - misalnya, saat, menurut konfigurasi keamanan Anda, Anda memiliki mesin virtual di port 22 yang terekspos ke dunia (0.0.0.0/0).



Semua tes dapat ditemukan di tautan GitHub ini.



Sangat mudah untuk memulai dengan platform ini.



  • Pasang biner.
  • Inisialisasi direktori terraform dengan terraform init.
  • Jalankan chechov di direktori ini.


Semua pengujian unit yang dijalankan secara default dapat dicantumkan di baris perintah. Selain itu, saat checkov dijalankan, platform akan secara default mengembalikan semua pengujian unit yang lulus dan gagal. Sangat nyaman, mudah digunakan. Metode lanjutan Terraform telah diuji, tetapi tidak semua. Ini adalah perbedaan yang mendasar.



Chechov dengan senang hati akan mengevaluasi HANYA kode Anda terraform



. Platform dapat langsung bekerja setelahnya terraform init



. Dia tidak peduli dengan Anda terraform plan



 - dengan semua kelebihan dan kekurangannya. Platform melakukan apa yang dinyatakan, yaitu "analisis kode statis". Waspadai konsekuensi yang mungkin terjadi, serta pertimbangan apa pun terkait logika untuk resource Anda.



gambar



gambar



checkov .



Jika Anda siap melakukan pengembangan Python mendalam, Anda dapat menulis pengujian unit tambahan. Bahasa pengembangan platform adalah salah satu persyaratan saya, karena terkadang saya harus menganalisis basis kode pengujian untuk memperkirakan seberapa sulit [jika perlu] membuat metode tambahan semacam itu. Momen ini, ditambah dengan masalah layanan untuk grup secara keseluruhan, menjadi faktor utama dalam memilih platform ini daripada platform alternatif yang memungkinkan Anda mendapatkan hasil yang sama.



Singkatnya, platform checkov sangat bagus di bidang analisis kode statis. Khususnya jika saya perlu memasukkan subnet IP yang awalnya ditentukan ke daftar putih. Tetapi opsi ini tidak cocok untuk pengujian e2e yang membutuhkan platform pengujian terpisah.



Di sisi lain, sebagai solusi, saya dapat mereplikasi pengujian unit dan kode keras pengaturan subnet / IP saya. Lalu bagaimana jika saya memiliki banyak contoh dan proyek - lewati tes ini, bahkan jika Anda membutuhkannya? Mungkin. Atau mungkin tidak.



Di sinilah platform pengujian kedua berperan - terraform-compliance



.



Kepatuhan terraform



terraform-compliance.com



Terraform-compliance  adalah kerangka kerja pengujian ringan yang dirancang untuk keamanan dan audit kepatuhan dalam terraform untuk memastikan infrastruktur Anda diuji negatifnya seperti kode.


Latar Belakang



Sekali lagi, pengujian perilaku pengembangan ujung ke ujung (BDD) baru-baru ini mulai digunakan sebagai kerangka pengujian, menyoroti kebutuhan untuk kerangka pengujian universal. Tapi ini bukan satu-satunya keuntungan. Kesederhanaan.



Nyatanya, menurut saya BDD kurang mendapat perhatian. Anda mungkin pernah mendengar tentang Test Driven Development (TDD), yang mengakar dalam, terutama di lingkungan pengembangan perangkat lunak. Tetapi di sinilah platform seperti BDD mempermudah pembuatan logika tambahan, menawarkan pengelola infrastruktur rata-rata cara yang lebih sederhana, ringkas, dan berulang untuk mengembangkan pengujian kustom ujung ke ujung tanpa pengetahuan mendalam tentang bahasa pemrograman khusus dan baru.



Dan meskipun kode dapat mendeskripsikan, pada kenyataannya, segala sesuatu di dunia, pada akhirnya semuanya tergantung pada pengelolaan, kemampuan untuk memahami kompleksitas kode (yang mungkin memerlukan persiapan dokumentasi yang ekstensif), belum lagi dukungan dan pemeliharaan.  Baca lebih lanjut tentang BDD di sini.



Cucumber.io  bukan hanya sebuah bahasa, ini adalah sistem yang menyederhanakan pekerjaan pengujian dengan mengambil pendekatan WYSIWYG untuk menguji desain, pemahaman, dan pemeliharaan. Contoh-contoh ini ditentukan sebelum pengembangan dan digunakan sebagai kriteria penerimaan.



Mereka adalah bagian dari definisi.



Menguji dengan Terraform-Compliance



Setiap platform ditinjau manfaatnya, dengan studi mendalam tentang di mana fitur dan nuansanya dapat digunakan dengan baik. Ke depan, saya dapat mengatakan bahwa kedua platform dapat digunakan.



Berikut adalah contoh pengujian yang dikembangkan menggunakan platform terraform-compliance



BDD. Ini memungkinkan Anda untuk melakukan pengujian ujung ke ujung yang cukup kompleks.



Platform terraform-compliance



menggunakan output terraform plan



... Akibatnya, memungkinkan "rencana" rilis lengkap untuk dibentuk dan diuji secara menyeluruh. Misalnya, kontrol bahwa pasangan kunci enkripsi yang benar [untuk penyedia cloud Anda] digunakan untuk akun, lingkungan, dan sebagainya. Anda memiliki banyak kebebasan berkreasi, dan yang terpenting, platform ini sangat mudah digunakan.



Lihat saja langkah-langkah dan contoh di bawah ini.



  • Langkah 1. Inisialisasi direktori terraform: # terraform init
  • Langkah 2. Anda dapat dengan cepat membuat paket terraform dengan perintah berikut: #terraform plan -out = plan.out
  • Langkah 3. Tuliskan beberapa tes. Ini masalah sederhana - sudah ada folder dengan contoh. Mari kita telusuri contoh pengujian saya sendiri di bawah ini, yang ditulis berdasarkan keluaran paket terraform saya.


Ini adalah potongan dari terraform



 konfigurasi plan - terraform yang membuat EKS dengan grup peluncuran yang ditentukan. Mari kita pastikan kode kita terraform



tidak menggunakan infrastruktur instancetype



, tetapi menggunakan "disetujui" a1.xlarge



atau a1.2xlarge



.



Sekarang saya sengaja akan mengubahnya menjadi t2.small



untuk mensimulasikan kegagalan pengujian.



Mari tulis tes untuk memastikan bahwa persyaratan ini berhasil divalidasi.



  • Langkah 4. Mari membuat terraform-compliance



    dewan mengevaluasi menggunakan skenario pengujian:#terraform-compliance -p plan.out -f ./<test-cases-folder>







Menjalankan tes



Contoh Lulus dan Hasil Gagal



gambar



Jika kode framework Terraform kita menggunakan yang benar instancetype



, maka semua hasil akan berwarna hijau SUKSES.



Jika kode infrastruktur Terraform kita melanggar persyaratan karena tidak benar instancetype



, maka hasilnya akan GAGAL merah.



Mari kita tulis lebih banyak tes lagi.



gambar



Beberapa tes sederhana yang diambil dari direktori contoh:



gambar



Jika salah satu gagal, pengguna akan melihat "nilai_tual" yang diambil dan ditampilkan untuk bantuan dan tujuan debugging.



Hasil tes



Setelah semua tes dijalankan, ringkasan praktis dari semua tes yang lulus dan gagal ditampilkan, yang juga mencakup tes yang terlewat. Saya menyukainya karena memungkinkan saya untuk menulis daftar panjang tes yang ketat, serta memberikan informasi yang jelas di akhir tes mana yang gagal dan kapan. Selain itu, jika gagal, beberapa pengujian dapat dilewati dengan tag @warning



, seperti yang ditunjukkan pada contoh di bawah ini.

habrastorage.org/getpro/habr/upload_files/c22/910/cb9/c22910cb95fb4ccc7555d44 E5E5E5b5436b



Hasil



Tanpa ragu, ini adalah kesempatan bagus untuk melihat kembali beberapa kerangka kerja validasi dan pengujian superior yang tersedia untuk kode sebagai kerangka kerja Terraform.



Saya menikmati melihat kedua platform ini dan sangat terkejut dengan kemudahan integrasi checkov serta validasi luar biasa e2e terraform plan



dan opsi pengujian khusus yang ditawarkannya terraform-compliance



.



Yang terakhir mengingatkan saya pada perilaku berperilaku, kerangka pengujian kubernetes BDD e2e kubernetes hebat lainnya yang pernah saya gunakan sebelumnya.



Kerangka kerja pengujian yang seluruhnya ditulis dengan Python memudahkan untuk berbagi pengetahuan Python di seluruh platform dan mengurangi jumlah kekuatan otak yang dibutuhkan untuk memelihara dan mengembangkan pengujian di masa depan.



Jika Anda perlu memeriksa konfigurasi Anda terhadap praktik terbaik saat Anda tidak memerlukan paket terraform, maka checkov mungkin yang tepat untuk Anda. Jika tidak, jawabannya mungkin platform terraform-compliance



yang memiliki serangkaian fitur validasi yang lebih kaya terraform plan



. Yang terbaik dari semuanya, menjadi platform BDD terraform-compliance



sangat mudah dipelajari.



Pengujian unit diutamakan. Mudah sekali. Platform Checkov Bridgecrewio memungkinkan pemeriksaan kepatuhan praktik terbaik di luar kotak.



Sebenarnya tidak ada alasan yang sah untuk melewatkan salah satu uji kendali mutu ini, berapa pun ukuran grup Anda. Terutama mengingat biaya tenaga kerja yang tidak signifikan yang perlu diterapkan untuk menerapkannya (lihat contoh di artikel).



PS Contino memiliki cukup banyak proyek fantastis. Jika Anda ingin mengerjakan proyek infrastruktur ultra-modern atau mencari tugas serius - hubungi kami! Kami merekrut staf dan mencari orang-orang cerdas di semua tingkatan. Di Contino, kami bangga dapat mengembangkan proyek transformasi cloud yang canggih untuk perusahaan menengah dan perusahaan besar.

«Infrastructure as a code in Ansible».



« Kubernetes Kubespray».





All Articles