REL08-BP04 Melakukan deployment dengan menggunakan infrastruktur yang tidak bisa diubah - Pilar Keandalan

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

REL08-BP04 Melakukan deployment dengan menggunakan infrastruktur yang tidak bisa diubah

Infrastruktur tetap adalah model yang menuntut bahwa tidak ada pembaruan, patch keamanan, atau perubahan konfigurasi yang terjadi di tempat pada beban kerja produksi. Saat perubahan diperlukan, arsitektur dibangun ke infrastruktur baru dan di-deploy ke dalam lingkungan produksi.

Ikuti strategi penerapan infrastruktur tetap untuk meningkatkan keandalan, konsistensi, dan keterulangan (reproducibility) dalam deployment beban kerja Anda.

Hasil yang diinginkan: Dengan infrastruktur yang tidak dapat diubah, tidak ada modifikasi di tempat yang diizinkan untuk menjalankan sumber daya infrastruktur dalam sebuah beban kerja. Sebaliknya, ketika ada sebuah perubahan yang diperlukan, kumpulan sumber daya infrastruktur baru yang sudah diperbarui, yang berisi semua perubahan yang diperlukan, di-deploy secara paralel dengan sumber daya Anda yang ada. Deployment ini divalidasi secara otomatis, dan jika berhasil, lalu lintas akan dialihkan secara bertahap ke kumpulan sumber daya baru.

Strategi deployment ini berlaku di antaranya untuk pembaruan perangkat lunak, patch keamanan, perubahan infrastruktur, pembaruan konfigurasi, dan pembaruan aplikasi.

Anti-pola umum:

  • Menerapkan perubahan di tempat untuk menjalankan sumber daya infrastruktur.

Manfaat menjalankan praktik terbaik ini:

  • Peningkatan konsistensi di seluruh lingkungan: Karena tidak ada perbedaan dalam sumber daya infrastruktur di seluruh lingkungan, maka konsistensi ditingkatkan dan pengujian disederhanakan.

  • Mengurangi penyimpangan konfigurasi: Dengan mengganti sumber daya infrastruktur dengan konfigurasi yang diketahui dan dikontrol versi, infrastruktur tersebut diatur ke status yang diketahui, diuji, dan tepercaya, menghindari penyimpangan konfigurasi.

  • Deployment atom yang andal: Deployment berhasil diselesaikan atau tidak ada yang berubah, meningkatkan konsistensi dan keandalan dalam proses deployment.

  • Deployment disederhanakan: Deployment disederhanakan karena tidak memerlukan pembaruan dukungan. Pembaruan hanyalah berupa deployment baru.

  • Deployment yang lebih aman dengan proses rollback dan pemulihan yang cepat: Deployment lebih aman karena versi sebelumnya yang digunakan tidak diubah. Anda dapat melakukan rollback jika ada kesalahan yang terdeteksi.

  • Postur keamanan yang ditingkatkan: Dengan tidak mengizinkan perubahan infrastruktur, mekanisme akses jarak jauh (seperti SSH) dapat Anda nonaktifkan. Hal ini akan mengurangi vektor serangan, sehingga meningkatkan postur keamanan organisasi.

Tingkat risiko yang terjadi jika praktik terbaik ini tidak diterapkan: Sedang

Panduan implementasi

Otomatisasi

Saat menentukan strategi deployment infrastruktur yang tidak dapat diubah, Anda sebaiknya menggunakan otomatisasi sebanyak mungkin untuk meningkatkan reproduksibilitas dan meminimalkan potensi kesalahan manusia. Untuk detail selengkapnya, silakan lihat REL08-BP05 Melakukan deployment perubahan dengan otomatisasi dan Melakukan otomatisasi deployment secara aman dan otonom.

Dengan Infrastruktur sebagai Kode (IaC), langkah-langkah penyediaan infrastruktur, orkestrasi, dan deployment ditentukan dengan cara terprogram, deskriptif, dan deklaratif dan disimpan dalam sistem kontrol sumber. Memanfaatkan infrastruktur sebagai kode akan makin memudahkan otomatisasi deployment infrastruktur dan membantu Anda mewujudkan ketetapan (immutability) infrastruktur.

Pola deployment

Ketika ada perubahan dalam beban kerja yang diperlukan, strategi deployment tetap mengharuskan deployment sumber daya infrastruktur yang baru, termasuk semua perubahan yang diperlukan. Kumpulan sumber daya baru ini harus mengikuti pola rollout yang meminimalkan dampak terhadap pengguna. Ada dua strategi utama untuk deployment ini:

Deployment canary: Praktik ini mengarahkan sejumlah kecil pelanggan kepada versi baru, yang biasanya dijalankan di sebuah instans layanan tunggal (canary). Lalu, Anda meneliti secara mendalam setiap perubahan perilaku atau kesalahan yang dihasilkan. Anda dapat menghapus lalu lintas dari canary jika menemui masalah-masalah kritis dan mengembalikan pengguna ke versi sebelumnya. Jika deployment berhasil, Anda dapat melanjutkan melakukan deployment pada kecepatan yang diinginkan, sambil memantau perubahan kesalahan, hingga Anda di-deploy sepenuhnya. AWS CodeDeploy dapat dikonfigurasi dengan konfigurasi deployment yang akan mengaktifkan deployment canary.

Deployment blue/green: Deployment yang bersifat serupa dengan deployment canary, kecuali armada penuh aplikasi di-deploy secara paralel. Anda mengubah deployment Anda di dua tumpukan (blue and green). Sekali lagi, Anda mengirimkan lalu lintas ke versi yang baru, dan kembali ke versi lama jika Anda melihat ada masalah yang terjadi dengan deployment. Biasanya semua lalu lintas dialihkan sekaligus, tetapi Anda juga dapat menggunakan sebagian lalu lintas ke setiap versi untuk meningkatkan adopsi versi baru menggunakan kemampuan perutean DNS tertimbang dari Amazon Route 53. AWS CodeDeploy dan AWS Elastic Beanstalk dapat dikonfigurasikan dengan konfigurasi deployment yang memungkinkan deployment blue/green.

Diagram yang menampilkan deployment blue/green dengan AWS Elastic Beanstalk dan Amazon Route 53

Gambar 8: Deployment blue/green dengan AWS Elastic Beanstalk dan Amazon Route 53

Deteksi penyimpangan

Penyimpangan didefinisikan sebagai setiap perubahan yang menyebabkan sumber daya infrastruktur memiliki status atau konfigurasi yang berbeda dengan apa yang diharapkan. Setiap jenis perubahan konfigurasi yang tidak terkelola bertentangan dengan gagasan infrastruktur tetap dan tidak bisa diubah (immutable), dan harus dideteksi dan diperbaiki agar infrastruktur tetap berhasil diimplementasikan.

Langkah-langkah implementasi

  • Larang modifikasi di tempat pada sumber daya infrastruktur yang sedang berjalan.

    • Anda dapat menggunakan AWS Identity and Access Management (IAM) untuk menentukan siapa atau apa yang dapat mengakses layanan dan sumber daya yang ada di AWS, mengelola izin terperinci secara terpusat, dan menganalisis akses untuk menyempurnakan izin di seluruh AWS.

  • Lakukan otomatisasi terhadap deployment sumber daya infrastruktur untuk meningkatkan reproduksibilitas dan meminimalkan terjadinya potensi kesalahan manusia.

    • Seperti yang dijelaskan dalam Pengantar DevOps di laporan resmi AWS, otomatisasi adalah sebuah landasan dengan layanan AWS dan didukung secara internal di semua layanan, fitur, dan penawaran.

    • Melakukan prebaking terhadap Amazon Machine Image (AMI) Anda dapat mempercepat waktu peluncurannya. EC2 Image Builder adalah sebuah layanan AWS terkelola penuh yang dapat membantu Anda mengotomatiskan pembuatan, pemeliharaan, validasi, berbagi, dan deployment AMI kustom Linux atau Windows yang aman dan terbaru.

    • Beberapa layanan yang mendukung otomatisasi adalah:

      • AWS Elastic Beanstalk adalah sebuah layanan untuk melakukan deployment dan menskalakan aplikasi web dan layanan yang dikembangkan dengan Java, NET, PHP, Node.js, Python, Ruby, Go, dan Docker pada server-server yang sudah dikenal seperti Apache, NGINX, Passenger, dan IIS.

      • AWS Proton membantu tim platform untuk menghubungkan dan mengoordinasikan semua alat yang berbeda yang dibutuhkan tim pengembangan Anda untuk melakukan penyediaan infrastruktur, deployment kode, pemantauan, dan pembaruan. AWS Proton mengaktifkan infrastruktur otomatis sebagai penyediaan kode dan deployment aplikasi nirserver dan berbasis kontainer.

    • Memanfaatkan infrastruktur sebagai kode akan memudahkan Anda dalam melakukan otomatisasi deployment infrastruktur, dan membantu mewujudkan ketetapan infrastruktur. AWS menyediakan layanan yang memungkinkan pembuatan, deployment, dan pemeliharaan infrastruktur dengan cara yang terprogram, deskriptif, dan deklaratif.

      • AWS CloudFormation membantu para developer membuat sumber daya AWS secara teratur dan dapat diprediksi. Sumber daya ditulis dalam file teks menggunakan format JSON atau YAML. Templat memerlukan sebuah sintaks dan struktur tertentu sesuai dengan jenis sumber daya yang sedang dibuat dan dikelola. Anda menulis sumber daya Anda dalam JSON atau YAML dengan editor kode apa pun, melakukan check-in sumber daya ke dalam sebuah sistem kontrol versi, lalu AWS CloudFormation membangun layanan yang ditentukan dengan cara yang aman dan dapat diulang.

      • AWS Serverless Application Model (AWS SAM) merupakan sebuah kerangka kerja sumber terbuka yang dapat Anda gunakan untuk membangun aplikasi nirserver di AWS. AWS SAM terintegrasi dengan layanan-layanan AWS lain, dan merupakan ekstensi dari AWS CloudFormation.

      • AWS Cloud Development Kit (AWS CDK) adalah sebuah kerangka kerja pengembangan perangkat lunak sumber terbuka untuk membuat model dan menyediakan sumber daya aplikasi cloud Anda menggunakan bahasa pemrograman yang sudah dikenal. Anda dapat menggunakan AWS CDK untuk membuat model infrastruktur aplikasi dengan menggunakan TypeScript, Python, Java, dan .NET. AWS CDK menggunakan AWS CloudFormation di latar belakang untuk menyediakan sumber daya dengan cara yang aman dan dapat diulang.

      • AWS Cloud Control API memperkenalkan satu set umum API Buat, Baca, Perbarui, Hapus, dan Daftar (CRUDL) untuk membantu para developer mengelola infrastruktur cloud mereka dengan cara yang mudah dan konsisten. Cloud Control API, adalah API umum yang memungkinkan para developer mengelola siklus hidup AWS dan layanan pihak ketiga secara seragam.

  • Implementasikan pola deployment yang meminimalkan dampak-dampaknya terhadap pengguna.

  • Deteksi konfigurasi atau penyimpangan status. Untuk informasi selengkapnya, silakan lihat Mendeteksi perubahan konfigurasi yang tidak terkelola pada tumpukan dan sumber daya.

Sumber daya

Praktik-praktik terbaik terkait:

Dokumen terkait:

Video terkait: