Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 menempatkan beban kerja Anda pada risiko konfigurasi yang tidak konsisten dan desain yang mungkin 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 digantikan dengan infrastruktur baru yang berjalan dengan konfigurasi baru pada setiap penyebaran. Ini tidak boleh diubah di tempat. |
| Alat imperatif | Kategori alat yang mencantumkan langkah-langkah eksekusi yang menghasilkan status akhir yang diinginkan. |
| Modul | Unit abstraksi untuk membagi grup sumber daya untuk menyederhanakan penyebaran yang kompleks. |
| Infrastruktur yang dapat diubah | Infrastruktur yang dirancang untuk diubah dalam posisinya. Penyebaran mengubah konfigurasi infrastruktur daripada menggantinya dengan infrastruktur baru. |
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 menstandarisasi alat dan proses pengembangan dan penyebaran IaC Anda dalam panduan standar. 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 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.
Menggunakan alat asli dan standar industri
Gunakan alat asli platform cloud Anda dan alat lain yang terbukti di industri yang terintegrasi secara asli ke dalam platform. Platform cloud Anda menyediakan alat untuk membuat penyebaran IaC menjadi mudah dan sederhana. Manfaatkan alat-alat ini dan alat pihak ketiga lainnya yang memiliki integrasi asli, seperti Terraform, daripada mengembangkan solusi Anda sendiri. Alat bawaan didukung oleh platform dan mencakup fungsionalitas bawaan untuk sebagian besar kebutuhan Anda. Mereka terus diperbarui oleh penyedia platform, membuatnya lebih berguna seiring berkembangnya platform.
Catatan
Berhati-hatilah karena saat penyedia cloud dan pengembang pihak ketiga memperbarui alat dan API mereka, Anda dapat menghadapi risiko masalah yang tidak terduga 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. Pastikan untuk secara sengaja menggunakan versi terakhir yang diketahui baik untuk beban kerja Anda.
AI opportunity: Mengembangkan dan memvalidasi templat IaC berbasis standar, seperti templat Bicep dan Terraform, sering kali memakan waktu dan rawan kesalahan. AI menyederhanakan pembuatan dan validasi templat untuk mempercepat upaya modernisasi Anda. Tinjau semua kode yang dihasilkan AI untuk memenuhi persyaratan akurasi dan kepatuhan.
AI dapat mengurangi risiko penyebaran dengan meninjau templat untuk kesalahan konfigurasi dan memvalidasi kepatuhan dengan kebijakan organisasi. Ini dapat mensimulasikan, memperkirakan, dan meringkas risiko dengan menggunakan instruksi bahasa alami.
Gunakan alat yang tepat untuk tugas
Gunakan alat yang tepat untuk tugas dan jenis infrastruktur tertentu. Beberapa tugas, di luar penyebaran, merupakan bagian dari siklus hidup infrastruktur. Konfigurasi perlu diterapkan dan dikelola, 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 dikontrol dengan ketat oleh platform.
Pikirkan tentang semua tugas dan jenis infrastruktur yang berada dalam cakupan untuk praktik IaC Anda dan standarkan penggunaan alat yang dapat menyelesaikan pekerjaan yang diperlukan dan yang bisa diintegrasikan dengan praktik pengembangan dan manajemen Anda.
Mendukung beberapa lingkungan
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. Parameter abstrak seperti ukuran sumber daya, jumlah, nama, lokasi penyebaran, dan 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 tidak boleh diabstrakkan.
Catatan
Untuk konsistensi, gunakan aset IaC yang sama di berbagai lingkungan sebanyak mungkin. Misalnya, hindari menggunakan file Terraform yang berbeda di lingkungan produksi dan pengujian. Semua lingkungan harus menggunakan satu file yang dapat Anda beradaptasi dengan lingkungan yang berbeda.
Kesempatan AI: Gunakan AI untuk menjaga lingkungan Anda tetap konsisten dan mencegah masalah konfigurasi yang memengaruhi kualitas atau stabilitas. AI dapat meninjau kode aplikasi Anda dalam permintaan pull untuk mengidentifikasi pembaruan IaC yang diperlukan dan merekomendasikan perubahan lebih awal. GitHub Copilot dapat menganalisis kode, dokumen desain, dan persyaratan Anda untuk menyarankan pembaruan, atau memungkinkan pengembang untuk meminta perubahan infrastruktur dalam bahasa alami. Solusi berbasis agen tingkat lanjut dapat menyimpulkan kebutuhan infrastruktur dari kode dan sumber lain dan menghasilkan permintaan pull dengan IaC dan perubahan konfigurasi yang direkomendasikan.
Gunakan keseimbangan yang tepat saat merangkum fungsionalitas
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 bijaksana dalam mengembangkan modul baru. Gunakan modul sumber terbuka yang dipertahankan jika sesuai, dalam, misalnya, skenario nonsensitif.
Langkah-langkah dokumen manual
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 didokumentasikan 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 yatim. 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 menghapus sumber daya secara otomatis. Misalnya, Anda berpindah dari VM ke layanan PaaS untuk fungsi tertentu, dan alat IaC tidak memiliki fungsi logika untuk menghapus sumber daya usang. Sumber daya tersebut dapat menjadi yatim piatu jika tim beban kerja tidak ingat untuk menghapusnya secara manual. Untuk menangani skenario ini, standarkan strategi untuk memindai sumber daya yatim piatu 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.
Pertimbangkan rekomendasi berikut yang berlaku untuk menggunakan IaC untuk beban kerja Anda.
Menggunakan pendekatan berlapis untuk alur IaC
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 mengakibatkan beberapa masalah, seperti dependensi yang rusak. Penggunaan beberapa pipeline yang selaras dengan lapisan yang terdiri dari sumber daya, yang siklus hidup penyebarannya atau faktor seperti fungsionalitasnya 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 pipeline IaC sentuhan sedang dan sentuhan tinggi untuk sumber daya, tergantung pada kompleksitas beban kerja Anda. Menggunakan tumpukan aplikasi berbasis Kubernetes sebagai contoh, satu lapisan dengan interaksi tingkat sedang mungkin terdiri dari kluster, sumber daya penyimpanan, dan layanan basis data. Lapisan sentuhan tinggi akan terdiri dari kontainer aplikasi yang diperbarui sangat sering dalam mode pengiriman berkelanjutan.
Memperlakukan IaC dan kode aplikasi 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, pencabangan, promosi kode, dan kualitas semuanya harus identik. Pertimbangkan juga untuk mengalokasikan 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 menyebarkan infrastruktur secara tidak sengaja sebelum kode aplikasi yang diperlukan, atau sebaliknya.
Menggunakan standar dan sumber daya terpusat
Berkolaborasi dengan tim lain di organisasi Anda untuk standardisasi dan penggunaan ulang. 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 itu memungkinkan secara praktis.
Menerapkan keamanan dalam kode IaC
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 pengembangan.
Menguji aktivitas rutin dan non-rutin. Menguji penyebaran, pembaruan konfigurasi, dan proses pemulihan, termasuk proses pembatalan penyebaran.
Kesempatan AI: Untuk memperkuat postur keamanan Anda dan mempercepat waktu respons, integrasikan AI ke dalam tinjauan keamanan dan proses pemodelan ancaman Anda.
Tingkatkan proses keamanan yang ada dengan menggunakan alat dan fitur AI untuk menyoroti pola pengodean yang tidak aman dan menyarankan alternatif yang aman. AI generatif dapat menganalisis templat IaC dan diagram arsitektur, lalu menghasilkan model ancaman dan mitigasi untuk mendukung pemodelan ancaman berkelanjutan. Memperbarui diagram arsitektur dan templat IaC secara teratur.
Mengadopsi model penyebaran yang 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 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 aman Anda menyatakan bahwa melanjutkan penyebaran ketika muncul masalah yang dapat dimitigasi adalah opsi yang lebih disukai. Dalam hal ini, Anda mungkin akan memperbarui infrastruktur di tempat.
Pertimbangan
Peningkatan spesialisasi: Dalam beberapa kasus, penggunaan bahasa baru dalam tim Anda yang menangani beban kerja memerlukan 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: Basis kode dan pemeliharaan alat 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 GITHub Actions CI/CD.
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.
Tautan terkait
- Apa itu infrastruktur sebagai kode (IaC)?
- Menemukan kesalahan konfigurasi di IaC
- Rekomendasi untuk merancang rantai pasokan pengembangan beban kerja
- Rekomendasi untuk menstandarkan alat dan proses
- Rekomendasi untuk mengamankan siklus hidup pengembangan
- Rekomendasi untuk menggunakan praktik penyebaran yang aman
- Pola Penanda Penerapan
- Templat Azure Resource Manager (templat ARM)
- Bicep
- Azure Pipeline
- Tindakan GitHub
- Terraform
Daftar periksa Keunggulan Operasional
Lihat kumpulan rekomendasi lengkap.