Rekomendasi untuk menggunakan infrastruktur sebagai kode

Berlaku untuk rekomendasi daftar periksa Azure Well-Architected Framework Operational Excellence ini:

OE:05 Siapkan sumber daya dan konfigurasinya dengan menggunakan pendekatan infrastruktur sebagai kode (IaC) standar. Seperti kode lain, rancang IaC dengan gaya yang konsisten, modularisasi yang sesuai, dan jaminan kualitas. Lebih suka pendekatan deklaratif jika memungkinkan.

Panduan ini menjelaskan rekomendasi untuk menggunakan IaC sebagai standar untuk penyebaran infrastruktur Anda. Menggunakan IaC memungkinkan Anda mengintegrasikan penyebaran dan manajemen infrastruktur ke dalam praktik pengembangan perangkat lunak yang ada. Ini menyediakan metodologi standar yang konsisten untuk pengembangan dan penyebaran untuk semua komponen beban kerja Anda. Mengandalkan penyebaran manual membuat beban kerja Anda berisiko konfigurasi yang tidak konsisten dan desain yang berpotensi tidak aman.

Definisi

Istilah Definisi
Alat deklaratif Kategori alat yang menentukan status akhir penyebaran dan mengandalkan sistem untuk menentukan cara menyebarkan sumber daya agar sesuai dengan status akhir yang ditentukan.
Infrastruktur yang tidak dapat diubah Infrastruktur yang dimaksudkan untuk diganti dengan infrastruktur baru yang menjalankan konfigurasi baru dengan setiap penyebaran. Ini tidak boleh diubah di tempat.
Alat imperatif Kategori alat yang mencantumkan langkah-langkah eksekusi yang menghasilkan status akhir yang diinginkan.
Modul Satu unit abstraksi untuk membagi grup sumber daya untuk menyederhanakan penyebaran yang kompleks.
Infrastruktur yang dapat diubah Infrastruktur yang dimaksudkan untuk diubah di tempat. Penyebaran mengubah konfigurasi infrastruktur daripada menggantinya dengan infrastruktur baru.

Strategi desain utama

Seperti yang dibahas dalam rantai pasokan dan panduan standarisasi alat dan proses , Anda harus memiliki kebijakan ketat untuk menyebarkan perubahan infrastruktur (termasuk perubahan konfigurasi) hanya melalui kode. Anda harus menyebarkan IaC melalui alur integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD). Mengadopsi kebijakan ini memberlakukan konsistensi dalam proses untuk semua penyebaran IaC, meminimalkan risiko penyimpangan konfigurasi di seluruh lingkungan Anda, dan memastikan konsistensi infrastruktur di seluruh lingkungan Anda. Selain itu, Anda harus menstandarkan alat dan proses pengembangan dan penyebaran IaC Anda dalam panduan gaya. Rekomendasi untuk panduan gaya Anda meliputi:

Lebih suka deklaratif daripada alat imperatif. Alat deklaratif dan file terkaitnya adalah pilihan keseluruhan yang lebih baik untuk menyebarkan dan mengelola IaC daripada alat imperatif. Alat deklaratif menggunakan sintaks yang lebih sederhana untuk file definisinya, hanya menentukan status lingkungan yang diinginkan setelah penyebaran selesai. Alat imperatif bergantung pada Anda yang menentukan langkah-langkah yang diperlukan untuk sampai ke status akhir yang diinginkan, sehingga file bisa jauh lebih kompleks daripada file deklaratif. File definisi deklaratif juga membantu mengurangi utang teknis mempertahankan kode imperatif, seperti skrip penyebaran, yang dapat bertambah dari waktu ke waktu.

Gunakan alat asli platform cloud Anda dan alat terbukti industri lainnya yang terintegrasi secara asli ke dalam platform. Platform cloud Anda menyediakan alat untuk membuat penyebaran IaC menjadi mudah dan mudah. Manfaatkan alat-alat ini dan alat pihak ketiga lainnya yang memiliki integrasi asli, seperti Terraform, daripada mengembangkan solusi Anda sendiri. Alat asli didukung oleh platform dan menyertakan fungsionalitas bawaan untuk sebagian besar kebutuhan Anda. Mereka terus diperbarui oleh penyedia platform, membuatnya lebih berguna seiring berkembangnya platform.

Catatan

Berhati-hatilah karena penyedia cloud dan pengembang pihak ketiga memperbarui alat dan API mereka, Anda dapat menjalankan risiko masalah yang tidak tertandingi saat menggunakan versi terbaru dalam beban kerja Anda. Pastikan Anda menguji versi alat dan API baru secara menyeluruh sebelum mengadopsinya. Demikian juga, hindari menggunakan bendera 'terbaru' saat memanggil alat atau API dalam kode penyebaran Anda. Disengaja untuk memanggil versi baik terbaru yang diketahui untuk beban kerja Anda.

Gunakan alat yang tepat untuk tugas dan jenis infrastruktur tertentu. Beberapa tugas, di luar penyebaran, terlibat dalam siklus hidup infrastruktur. Konfigurasi perlu diterapkan dan dipertahankan, misalnya, dan alat yang Anda gunakan untuk penyebaran skrip, seperti Bicep, mungkin bukan alat terbaik untuk setiap operasi manajemen.

Demikian juga, menerapkan konfigurasi status yang diinginkan (DSC) untuk berbagai jenis infrastruktur mungkin memerlukan alat yang berbeda. Misalnya, ada alat khusus seperti Ansible untuk mengelola DSC untuk VM, sedangkan Flux adalah alat yang baik untuk mengelola DSC pada kluster Kubernetes. Layanan Platform as a service (PaaS) mungkin menyediakan alat yang berbeda untuk manajemen konfigurasi (seperti Azure App Configuration) yang dapat ditangani melalui IaC. Layanan Software as a service (SaaS) mungkin lebih terbatas karena lebih ketat dikontrol oleh platform.

Pikirkan tentang semua tugas dan jenis infrastruktur yang berada dalam cakupan untuk praktik IaC Anda dan standarisasi pada alat yang melakukan pekerjaan yang Anda butuhkan untuk dilakukan dan dapat diintegrasikan ke dalam praktik pengembangan dan manajemen Anda.

Skrip dan templat Anda harus cukup fleksibel untuk dengan mudah menyebarkan berbagai lingkungan. Gunakan parameter, variabel, dan file konfigurasi untuk menyebarkan sekumpulan sumber daya standar yang dapat dimodifikasi untuk menyebarkan lingkungan apa pun di tumpukan promosi kode Anda. Pengaturan abstrak seperti ukuran sumber daya, jumlah, nama, lokasi untuk disebarkan, dan beberapa pengaturan konfigurasi. Namun, berhati-hatilah untuk tidak mengabstraksi terlalu banyak. Ada pengaturan yang dapat diabstraksi dengan parameter atau variabel yang mungkin tidak benar-benar berubah selama siklus hidup beban kerja, atau yang mungkin jarang berubah. Mereka seharusnya tidak diabstraksi.

Catatan

Hindari menggunakan aset IaC yang berbeda untuk lingkungan yang berbeda. Anda tidak boleh memiliki file Terraform yang berbeda untuk lingkungan produksi dan pengujian, misalnya. Semua lingkungan harus menggunakan satu file. Anda dapat memanipulasi file tersebut untuk disebarkan ke lingkungan yang berbeda sesuai kebutuhan.

Menyusun strategi dan menstandarkan penggunaan modul. Seperti parameter dan variabel, modul dapat membuat penyebaran infrastruktur Anda dapat diulang. Namun, berhati-hatilah tentang bagaimana Anda menggunakannya. Strategi abstraksi standar membantu memastikan bahwa modul dibangun untuk memenuhi tujuan tertentu yang disepakati. Gunakan modul untuk merangkum konfigurasi kompleks atau kombinasi sumber daya. Hindari modul jika Anda hanya menggunakan konfigurasi default sumber daya. Selain itu, bersikaplah peradilan dalam mengembangkan modul baru. Gunakan modul sumber terbuka yang dipertahankan jika sesuai, dalam, misalnya, skenario yang tidak sensitif.

Standar dokumen untuk langkah manual. Mungkin ada langkah-langkah yang terkait dengan penyebaran dan pemeliharaan infrastruktur yang khusus untuk lingkungan Anda dan yang memerlukan intervensi manual. Pastikan bahwa langkah-langkah ini diminimalkan sebanyak mungkin dan di dokumentasikan dengan jelas. Dalam panduan gaya dan prosedur operasi standar Anda, standarkan langkah manual untuk memastikan bahwa tugas dilakukan dengan aman dan konsisten.

Standar dokumen untuk menangani sumber daya tanpa sumber daya. Bergantung pada alat yang Anda gunakan untuk manajemen konfigurasi dan batasannya, mungkin ada kalanya sumber daya tertentu tidak lagi diperlukan oleh beban kerja Anda dan alat IaC Anda tidak dapat secara otomatis menghapus sumber daya. Misalnya, Anda berpindah dari VM ke layanan PaaS untuk beberapa fungsi, dan perkakas IaC tidak memiliki logika untuk menghapus sumber daya yang dihentikan. Sumber daya tersebut dapat menjadi tanpa sumber jika tim beban kerja tidak ingat untuk menghapusnya secara manual. Untuk menangani skenario ini, standarkan strategi untuk memindai sumber daya tanpa sumber daya dan menghapusnya. Anda juga perlu mempertimbangkan cara memastikan bahwa templat Anda sudah diperbarui. Teliti batasan alat IaC Anda untuk memahami apa yang mungkin perlu Anda rencanakan dalam situasi ini.

Strategi IaC lainnya

Pertimbangkan rekomendasi berikut yang berlaku untuk menggunakan IaC untuk beban kerja Anda:

Gunakan pendekatan berlapis untuk menyelaraskan alur IaC Anda dalam tumpukan beban kerja. Memisahkan alur IaC Anda menjadi lapisan membantu Anda mengelola lingkungan yang kompleks. Menyebarkan puluhan atau ratusan sumber daya sebagai paket monolitik tidak efisien dan dapat memperkenalkan beberapa masalah, seperti dependensi yang rusak. Penggunaan beberapa alur yang selaras dengan lapisan yang terdiri dari sumber daya yang siklus hidup atau faktor penyebarannya seperti fungsionalitas yang sangat cocok membuat pengelolaan penyebaran IaC lebih mudah.

Infrastruktur inti seperti sumber daya jaringan jarang membutuhkan perubahan yang lebih kompleks daripada pembaruan konfigurasi, sehingga sumber daya tersebut harus membentuk alur IaC dengan sentuhan rendah . Anda mungkin memiliki satu atau beberapa alur IaC sentuhan sedang dan sentuhan tinggi untuk sumber daya, tergantung pada kompleksitas beban kerja Anda. Menggunakan tumpukan aplikasi berbasis Kubernetes sebagai contoh, satu lapisan sentuhan sedang mungkin terdiri dari kluster, sumber daya penyimpanan, dan layanan database. Lapisan sentuhan tinggi akan terdiri dari kontainer aplikasi yang sangat sering diperbarui dalam mode pengiriman berkelanjutan.

Perlakukan iaC dan kode aplikasi Anda dengan sama. Memperlakukan artefak IaC Anda sama dengan artefak kode aplikasi Anda membantu Anda menerapkan kekakuan yang sama untuk mengelola kode di semua alur. Selain itu, praktik pengembangan dan penyebaran IaC harus mencerminkan praktik aplikasi. Standar untuk kontrol versi, percabangan, promosi kode, dan kualitas semuanya harus identik. Pertimbangkan juga untuk menyusun aset IaC Anda bersama dengan aset kode aplikasi Anda. Melakukannya membantu memastikan bahwa proses yang sama diikuti dengan setiap penyebaran dan membantu Anda menghindari masalah seperti secara tidak sengaja menyebarkan infrastruktur sebelum kode aplikasi yang diperlukan, atau sebaliknya.

Berkolaborasi dengan tim lain di organisasi Anda untuk standardisasi dan penggunaan kembali. Organisasi besar terkadang dapat memiliki beberapa tim yang mengembangkan dan mendukung beban kerja. Kolaborasi di seluruh tim untuk menyetujui standar membantu Anda menggunakan kembali pustaka, templat, dan modul untuk mendapatkan efisiensi dan konsistensi di seluruh lingkungan beban kerja. Demikian juga, alat IaC harus distandarkan di seluruh organisasi sejauh hal itu praktis.

Terapkan prinsip "keamanan sebagai kode" untuk memastikan bahwa keamanan adalah bagian dari alur penyebaran. Sertakan pemindaian kerentanan dan pengerasan konfigurasi sebagai bagian dari proses pengembangan IaC. Pindai repositori IaC Anda untuk kunci dan rahasia yang terekspos. Salah satu keuntungan menggunakan IaC adalah anggota tim yang berfokus pada keamanan dapat meninjau kode sebelum penyebaran untuk memastikan bahwa konfigurasi yang disetujui untuk dirilis oleh keamanan sebenarnya adalah apa yang disebarkan ke produksi. Untuk panduan terperinci, lihat Rekomendasi untuk mengamankan siklus hidup pengembangan.

Menguji aktivitas rutin dan non-rutin. Uji penyebaran, pembaruan konfigurasi, dan proses pemulihan, termasuk proses deployment-rollback.

Infrastruktur yang dapat diubah vs. tidak dapat diubah

Pilihan antara penyebaran infrastruktur yang dapat diubah versus infrastruktur yang tidak dapat diubah tergantung pada beberapa faktor. Jika beban kerja Anda sangat penting bagi bisnis, sebaiknya gunakan infrastruktur yang tidak dapat diubah. Demikian juga, jika Anda memiliki desain infrastruktur yang matang yang didasarkan pada stempel penyebaran, menggunakan infrastruktur yang tidak dapat diubah dapat masuk akal, karena Anda dapat menyebarkan kode aplikasi dan infrastruktur baru dengan andal. Sebaliknya, menggunakan infrastruktur yang dapat diubah dapat menjadi pilihan yang lebih baik jika praktik penyebaran Anda yang aman menentukan bahwa bergulir ke depan dengan penyebaran ketika masalah penyebaran yang dapat dimitigasi muncul adalah opsi yang disukai. Dalam hal ini, Anda mungkin akan memperbarui infrastruktur di tempat.

Pertimbangan

Peningkatan spesialisasi: Dalam beberapa kasus, memperkenalkan bahasa baru di tim beban kerja Anda dilengkapi dengan kurva pembelajaran, dan penguncian vendor dapat menjadikannya pilihan yang buruk. Melatih anggota tim Anda dan menganalisis alat yang tepat berdasarkan dukungan alat penyedia cloud Anda diperlukan.

Peningkatan upaya pemeliharaan: Pemeliharaan basis kode dan perkakas diperlukan untuk menjaga implementasi IaC Anda tetap terkini dan aman. Lacak utang teknis Anda dengan benar dan menumbuhkan budaya di mana mengurangi utang dihargai.

Peningkatan waktu untuk perubahan konfigurasi: Menyebarkan infrastruktur dengan menggunakan instruksi baris perintah atau langsung dari portal tidak memerlukan waktu pengkodean dan/atau menguji artefak. Minimalkan waktu penyebaran dengan mengikuti praktik yang direkomendasikan seperti tinjauan kode dan praktik jaminan kualitas.

Peningkatan kompleksitas modularisasi: Menggunakan lebih banyak modul dan parameterisasi meningkatkan waktu yang diperlukan untuk men-debug dan mendokumentasikan sistem dan menambahkan lapisan abstraksi. Seimbangkan penggunaan modularisasi untuk mengurangi kompleksitas dan menghindari rekayasa berlebihan.

Fasilitasi Azure

Templat azure Resource Manager (templat ARM) dan Bicep adalah alat asli Azure untuk menyebarkan infrastruktur dengan menggunakan sintaks deklaratif. Templat ARM ditulis dalam JSON, sedangkan Bicep adalah bahasa khusus domain. Keduanya dapat dengan mudah diintegrasikan ke dalam alur Azure atau alur CI/CD GitHub Actions .

Terraform adalah alat IaC deklaratif lain yang didukung penuh di Azure. Ini dapat digunakan untuk menyebarkan dan mengelola infrastruktur, dan dapat diintegrasikan ke dalam alur CI/CD Anda.

Anda dapat menggunakan Microsoft Defender untuk Cloud untuk menemukan kesalahan konfigurasi di IaC.

Contoh

Lihat arsitektur akselerator zona pendaratan Azure Virtual Desktop dan implementasi referensi terkait untuk contoh implementasi Virtual Desktop yang dapat disebarkan melalui file Resource Manager, Bicep, atau Terraform yang disediakan.

Daftar periksa Keunggulan Operasional

Lihat serangkaian rekomendasi lengkap.