Flazzo memiliki fokus utama untuk menambah nilai bisnis Anda.

Blog

Cara mengambil penyimpangan konfigurasi

18339946-thumb.jpg
Blog

Cara mengambil penyimpangan konfigurasi

[ad_1]

Meskipun Terraform memiliki model deklaratif untuk pengelolaan infrastruktur pada platform cloud, itu membuat asumsi skala besar yang langka: bahwa keadaan infrastruktur yang digunakan selalu dikelola secara eksklusif melalui Terraform. Dalam praktiknya, lingkungan berkembang. Di bawah tekanan seperti itu, tim secara manual melakukan perubahan, menerapkan perbaikan panas langsung di konsol cloud dan menggunakan infrastruktur dengan paraleling otomatisasi.

Perubahan ini membuat penyimpangan konfigurasi di luar siklus hidup Terraform. Infrastruktur tetap fungsional tetapi tidak selaras dengan basis kode Terraform, menyebabkan perilaku yang tidak terduga, harapan yang rusak dan kadang -kadang bahkan insiden produksi.

Untuk mengatasi masalah ini, kami memiliki sistem deteksi drift otomatis yang berjalan terus menerus di lingkungan multi-bebas kami (AWS, Azure, GCP). Ini adalah sistem yang mendeteksi dan melaporkan perbedaan antara apa yang disediakan dan apa yang dinyatakan dalam git. Dalam artikel ini, kami menjelaskan cara kerjanya, bagaimana kami mengintegrasikannya ke dalam alur kerja kami dan keputusan yang telah kami ambil untuk memastikan bahwa ia telah berkembang dengan andal.

Memahami penyimpangan konfigurasi

Bagaimana penyimpangan terjadi dalam alur kerja terraform

Drift konfigurasi terjadi ketika infrastruktur dimodifikasi di luar terraform – melalui modifikasi manual, alat eksternal atau perbaikan darurat yang tidak dilampirkan pada kode. Ini bisa terjadi melalui:

  • Perubahan manual di konsol cloud
  • Perbaikan panas tidak diikuti selama insiden
  • Alat dan API lain yang memodifikasi sumber daya
  • Faktor lingkungan seperti penskalaan otomatis atau penandaan bagian ketiga

Terraform tidak mendeteksi modifikasi yang dibuat langsung ke infrastruktur kecuali jika negara secara eksplisit disegarkan, dan bahkan kemudian, modifikasi kecil dapat tanpa disadari. Dia membandingkan kode Terraform dengan negara terakhir yang diketahui, bukan infrastruktur yang sebenarnya, kecuali jika disegarkan. Bahkan jika Anda melakukan ini, perubahan kecil atau dikelola oleh awan dapat tanpa disadari kecuali mereka dibedakan secara memadai.

Profil risiko drift

Meskipun penyimpangan tidak selalu mematahkan infrastruktur dengan cepat, perlahan -lahan menurunkan keandalan. Misalnya, kebijakan IAM yang tidak disimpan dalam kontrol versi dan karena itu dimodifikasi di luar sumber kebenaran umumnya tetap tidak berdokumen. Konfigurasi jaringan dapat membantu mengembalikan jaringan yang hilang sampai Terraform memecahkan masalah dengan perubahan yang kemudian menjadi tanggung jawab jangka panjang ketika Terraform kembali.

Drift memperkenalkan kerapuhan ke dalam lingkungan multi-tim. Semakin kecil perubahan merambat ketidakkonsistenan melalui lingkungan, semakin banyak insinyur kehilangan kepercayaan pada terraform, yang seharusnya menjadi sumber kebenaran.

Desain deteksi drift yang berkembang

Berlabuh ke git, bukan hanya negara terraform

Dalam konsepsi kami, prinsip dasarnya adalah memperlakukan git sebagai sumber kebenaran tentang infrastruktur daripada negara terraform. Kami mengukur penyimpangan dengan memeriksa lingkungan hidup terakhir (dengan terraform-refresh = true) baru terhadap keadaan kode sebagai terlibat dalam kontrol versi.

Di setiap modul, kami telah menambahkan karya di bawah ini, yang berfungsi pada jadwal reguler dan didasarkan pada setiap PR. Bekerja:

  • Ini menyegarkan kondisi terraform pemasok.
  • Mengeksekusi rencana terhadap kode di git sha saat ini
  • Bandingkan output dengan rencana yang diharapkan (komitmen atau garis dasar sebelumnya

Modul dilaporkan jika ada perbedaan dan bahwa tidak ada perubahan kode yang sesuai ditemukan.

Arsitektur Sistem Deteksi Drift Terraform

Dukungan multi-cloud

Karena infrastruktur kami didistribusikan AWS, GCP dan AzurePelari modular membantu kami melakukan kontrol drift oleh pemasok cloud. Di setiap lingkungan, detektor drift terprogram dijalankan dalam konteks membaca terbatas, yang mencegah modifikasi yang tidak disengaja dan memungkinkannya berjalan dalam produksi.

Rincian hash, validasi ID, horoding dan diff. Data ini muncul dan dikumpulkan melalui Slack Alerts dan Grafana Dashboards.

Mengintegrasikan deteksi ke dalam aliran kerja pengembang

Integrasi permintaan menggambar

Surfing drift langsung selama siklus pengembangan. Kami juga memeriksa apakah modul yang sesuai melayang ketika permintaan traksi yang hanya memodifikasi kode infrastruktur terbuka.

Jika penyimpangan terjadi, kami memberi anotasi PR dengan rencana terperinci berbeda dan peringatan. Ini memungkinkan pengembang untuk memeriksa apakah penyimpangan jinak atau harus direkonsiliasi. Misalnya, jika aturan kelompok keselamatan telah diubah secara manual, diff menunjukkan apa yang telah diubah sebelum PR menghapusnya.

Penghapusan non-problublicms yang diketahui

Penyimpangan apa pun tidak dapat dieksploitasi. Pemasok cloud menambah atau sering memodifikasi metadata (misalnya, beacon, last_updated, self_link dan dinamis) untuk membuat aplikasi lebih dinamis. Ini tidak memerlukan koreksi.

Untuk memperbaiki ini, kami telah memperkenalkan aturan penghapusan yang dapat dikonfigurasi dengan modul. Dengan aturan -aturan ini, pekerjaan deteksi drift hanya memberikan perbedaan yang dapat digunakan, cukup untuk membuat pekerjaan deteksi drift yang dapat berkonsentrasi oleh tim.

Tingkatkan sinyal dan tanggung jawab

Manusia diff-by

Dalam iterasi sebelumnya, sistem ini hanya akan menerbitkan surat kabar “drift terdeteksi”. Lansiran ini tidak berguna. Kami juga telah melakukan perbaikan pada rantai alat yang menyajikan perbedaan yang dapat dibaca oleh manusia antara kode dan konfigurasi langsung, yang dikelompokkan berdasarkan jenis sumber daya dan atribut untuk keperluan keterbacaan.

Ini memungkinkan pengembang dan SRES untuk memperlakukan kegagalan acak mereka tanpa harus menjalankan rencana secara lokal atau manual menelusuri konsol cloud.

Prioritas penuaan dan penyimpangan

Kami juga mengikuti usia drift (perubahan yang telah bertahan melalui beberapa siklus kontrol tanpa resolusi). Penyimpanan dalam database pengembangan tiga hari sudah benar. Penyimpangan lebih dari 15 menit berorientasi di depan umum ke kebijakan IAM tidak.

Dengan model penuaan ini, kita dapat merosot peringatan dengan cara yang tepat tanpa tim yang luar biasa selama penyortiran.

Pelajaran produksi

Mulailah dengan modul kritis

Oleh karena itu kami mulai dengan mendorong deteksi hanya pada modul yang terkait dengan lingkungan produksi dan sumber daya yang peka terhadap keamanan seperti IAM, VPCdan jalan setapak berorientasi eksternal. Ketika penyimpangan terjadi, nafas sumber daya ini adalah yang terburuk.

Karena penyebaran telah progresif, kami telah membangun kepercayaan diri sambil menunjukkan nilai lebih awal tanpa memperlambat pengiriman atau memperkenalkan gesekan yang tidak perlu.

Deteksi sebelum menegakkan

Pada awalnya, kami tidak menerapkan pintu keras untuk penyimpangan. Tujuannya adalah kesadaran. Setelah tim memiliki visibilitas, mereka proaktif untuk membantu menyimpan dan mengkodifikasi perubahan manual.

Saat ini, modul kami yang paling kritis cenderung memecah pemeriksaan PR jika ada penyimpangan yang diketahui. Beberapa melaporkan tetapi tidak memblokir penyebaran. Ini memungkinkan perbaikan sementara tanpa menolak konsistensi jangka panjang.

Frekuensi drift dan resolusi waktu berdasarkan lingkungan

Kesimpulan

Penggunaan alat infrastruktur sebagai kode seperti Terraform adalah dasar yang solid untuk mengelola sumber daya cloud; Namun, tanpa deteksi penyimpangan, mereka beroperasi dengan kepercayaan buta. Ini bukan lingkungan di dunia nyata, jadi modifikasi manual, pengecualian yang tidak dikelola dan perbaikan hotten akan selalu ada di bidang dunia nyata. Caranya adalah menangkapnya lebih awal, sebelum terjadi dalam kerusakan atau regresi.

Kami telah menggabungkan terraform, riwayat git, CI otomatis dan laporan terstruktur untuk membangun sistem yang mendeteksi ketika infrastruktur tidak konsisten dengan kode. Ini tidak aktif semua risiko, tetapi siap untuk loop umpan balik yang diperlukan untuk mempertahankan konsistensi skala besar.

Untuk operasi apa pun di lingkungan multi-cloud yang bekerja pada beberapa tim, pendekatan ini bukan opsional. Pada dasarnya, ini adalah perbedaan antara konfigurasi sebagai dokumentasi dan konfigurasi sebagai kenyataan.

[ad_2]