

# REL 8. Bagaimana cara mengimplementasikan perubahan?
<a name="rel-08"></a>

Perubahan terkontrol diperlukan untuk melakukan deployment fungsionalitas baru, dan untuk memverifikasi bahwa beban kerja dan lingkungan operasi menjalankan perangkat lunak yang dikenal dan dapat di-patch atau diganti dengan cara yang dapat diprediksi. Jika perubahan-perubahan ini tidak terkontrol, maka akan sulit untuk memprediksi efek dari perubahan-perubahan tersebut, atau untuk mengatasi masalah yang timbul sebagai akibatnya. 

**Topics**
+ [

# REL08-BP01 Menggunakan runbook untuk aktivitas standar seperti deployment
](rel_tracking_change_management_planned_changemgmt.md)
+ [

# REL08-BP02 Integrasikan pengujian fungsional sebagai bagian dari deployment Anda
](rel_tracking_change_management_functional_testing.md)
+ [

# REL08-BP03 Mengintegrasikan pengujian ketahanan sebagai bagian dari deployment Anda
](rel_tracking_change_management_resiliency_testing.md)
+ [

# REL08-BP04 Melakukan deployment dengan menggunakan infrastruktur yang tidak bisa diubah
](rel_tracking_change_management_immutable_infrastructure.md)
+ [

# REL08-BP05 Melakukan deployment perubahan dengan otomatisasi
](rel_tracking_change_management_automated_changemgmt.md)

# REL08-BP01 Menggunakan runbook untuk aktivitas standar seperti deployment
<a name="rel_tracking_change_management_planned_changemgmt"></a>

 Runbook adalah prosedur terdokumentasi untuk mencapai hasil-hasil tertentu. Gunakan runbook untuk melakukan aktivitas-aktivitas standar, baik yang dilakukan secara manual maupun otomatis. Contohnya adalah men-deploy beban kerja, mem-patch beban kerja, atau membuat modifikasi DNS. 

 Misalnya, terapkan proses untuk [memastikan keamanan rollback selama deployment](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments). Memastikan bahwa Anda dapat membatalkan deployment tanpa menimbulkan gangguan terhadap pelanggan adalah sesuatu yang penting dalam menciptakan keandalan layanan. 

 Untuk prosedur runbook, mulailah dengan proses manual efektif yang valid, implementasikan dalam kode, dan lakukan invokasi agar berjalan secara otomatis saat diperlukan. 

 Bahkan untuk beban kerja canggih yang sangat otomatis, runbook masih berguna untuk [menjalankan game day](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/test-reliability.html#GameDays) atau memenuhi persyaratan pelaporan dan audit yang ketat. 

 Perlu diperhatikan bahwa playbook digunakan untuk merespons insiden-insiden tertentu, sedangkan runbook digunakan untuk meraih hasil-hasil tertentu. Sering kali, runbook ditujukan untuk aktivitas rutin, sedangkan playbook digunakan untuk merespons peristiwa-peristiwa non-rutin. 

 **Anti-pola umum:** 
+  Melakukan perubahan tidak terencana pada konfigurasi di lingkungan produksi. 
+  Melewatkan langkah-langkah yang diuraikan dalam rencana Anda untuk melakukan deployment yang lebih cepat, sehingga mengakibatkan deployment mengalami kegagalan. 
+  Membuat perubahan tanpa melakukan uji pembatalan perubahan. 

 **Manfaat menjalankan praktik terbaik ini:** Perencanaan perubahan yang efektif meningkatkan kemampuan Anda untuk berhasil menjalankan perubahan karena Anda mengetahui semua sistem yang terpengaruh. Validasi perubahan di lingkungan pengujian meningkatkan kepercayaan diri Anda. 

 **Tingkat risiko yang terjadi jika praktik terbaik ini tidak diterapkan:** Tinggi 

## Panduan implementasi
<a name="implementation-guidance"></a>
+  Sediakan respons yang cepat dan konsisten terhadap peristiwa yang dipahami dengan baik dengan cara membuat dokumentasi prosedur-prosedur penanganan peristiwa di dalam runbook. 
+  Gunakan prinsip infrastruktur sebagai kode untuk menentukan infrastruktur Anda. Dengan menggunakan AWS CloudFormation (atau pihak ketiga tepercaya) untuk menentukan infrastruktur Anda, Anda dapat menggunakan perangkat lunak kontrol versi untuk membuat versi baru dan melacak perubahan. 
  +  Gunakan AWS CloudFormation (atau penyedia pihak ketiga tepercaya) untuk menentukan infrastruktur Anda. 
    +  [Apa itu AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 
  +  Buat templat yang bersifat tunggal dan terpisah-pisah, dengan menggunakan prinsip desain perangkat lunak yang baik. 
    +  Tentukan izin, templat, dan pihak-pihak yang bertanggung jawab untuk implementasi. 
      + [ Mengendalikan akses dengan AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)
    + Gunakan sistem manajemen kode sumber yang di-hosting berdasarkan teknologi populer seperti Git untuk menyimpan kode sumber dan konfigurasi infrastruktur sebagai kode (IaC) Anda.

## Sumber daya
<a name="resources"></a>

 **Dokumen terkait:** 
+  [Partner APN: partner yang dapat membantu Anda membuat solusi deployment yang diotomatisasi](https://aws.amazon.com/partners/find/results/?keyword=devops) 
+  [AWS Marketplace: produk yang dapat digunakan untuk mengotomatisasi deployment Anda](https://aws.amazon.com/marketplace/search/results?searchTerms=DevOps) 
+  [Apa itu AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 

 **Contoh terkait:** 
+  [Melakukan otomatisasi operasi dengan Playbook dan Runbook](https://wellarchitectedlabs.com/operational-excellence/200_labs/200_automating_operations_with_playbooks_and_runbooks/) 

# REL08-BP02 Integrasikan pengujian fungsional sebagai bagian dari deployment Anda
<a name="rel_tracking_change_management_functional_testing"></a>

 Gunakan teknik seperti pengujian unit dan pengujian integrasi yang memvalidasi fungsionalitas. 

 Pengujian unit adalah proses pengujian unit fungsional terkecil dari kode untuk memvalidasi perilakunya. Pengujian integrasi berupaya untuk memvalidasi bahwa setiap fitur aplikasi bekerja sesuai dengan persyaratan perangkat lunak. Sementara pengujian unit berfokus pada pengujian bagian dari aplikasi secara terpisah, pengujian integrasi mempertimbangkan efek samping (misalnya, efek dari data yang diubah melalui operasi mutasi). Dalam kedua kasus tersebut, pengujian harus diintegrasikan ke dalam pipeline deployment, dan jika kriteria keberhasilan tidak terpenuhi, pipeline dihentikan atau di-rollback. Pengujian ini dijalankan dalam lingkungan pra-produksi, yang di-staging sebelum produksi dalam pipeline. 

 Anda akan meraih hasil terbaik saat pengujian ini dijalankan secara otomatis sebagai bagian dari tindakan deployment dan build. Misalnya, dengan AWS CodePipeline, developer melakukan perubahan pada repositori sumber tempat CodePipeline mendeteksi perubahan secara otomatis. Aplikasi dibangun, dan pengujian unit dijalankan. Setelah pengujian selesai, kode yang dibangun di-deploy ke server staging untuk pengujian. Dari server staging, CodePipeline menjalankan lebih banyak pengujian, seperti integrasi atau pengujian beban. Setelah berhasil menyelesaikan pengujian tersebut, CodePipeline melakukan deployment kode yang telah diuji dan disetujui ke instans produksi. 

 **Hasil yang diinginkan:** Anda menggunakan otomatisasi untuk melakukan pengujian unit dan pengujian integrasi untuk memvalidasi bahwa kode Anda berperilaku sesuai harapan. Pengujian ini diintegrasikan ke dalam proses deployment, dan kegagalan pengujian membatalkan deployment. 

 **Anti-pola umum:** 
+  Anda mengabaikan atau tidak menghiraukan kegagalan dan rencana pengujian selama proses deployment untuk mempercepat jadwal deployment. 
+  Anda melakukan pengujian secara manual di luar pipeline deployment. 
+  Anda melewatkan langkah-langkah pengujian dalam otomatisasi melalui alur kerja darurat manual. 
+  Anda menjalankan pengujian otomatis di lingkungan yang tidak mirip dengan lingkungan produksi. 
+  Anda membangun rangkaian pengujian yang tidak cukup fleksibel dan sulit untuk dipelihara, diperbarui, atau diskalakan seiring aplikasi berkembang. 

 **Manfaat menjalankan praktik terbaik ini:** Pengujian otomatis selama proses deployment akan menemukan masalah lebih awal, sehingga mengurangi risiko rilis ke produksi dengan bug atau perilaku tak terduga. Pengujian unit memvalidasi bahwa kode berperilaku sesuai keinginan dan mematuhi kontrak API. Pengujian integrasi memvalidasi bahwa sistem beroperasi sesuai dengan persyaratan yang ditentukan. Jenis-jenis pengujian ini memverifikasi fungsi komponen yang diinginkan, seperti antarmuka pengguna, API, basis data, dan kode sumber secara konsisten. 

 **Tingkat risiko yang terjadi jika praktik terbaik ini tidak diterapkan:** Tinggi 

## Panduan implementasi
<a name="implementation-guidance"></a>

 Adopsi pendekatan pengembangan berbasis pengujian (TDD) untuk menulis perangkat lunak agar Anda dapat mengembangkan kasus pengujian untuk menentukan dan memvalidasi kode Anda. Untuk memulai, buat kasus pengujian untuk setiap fungsi. Jika pengujian gagal, Anda menulis kode baru yang cukup untuk memenuhi persyaratan pengujian. Pendekatan ini membantu Anda memvalidasi hasil yang diharapkan dari setiap fungsi. Jalankan pengujian unit dan validasi bahwa pengujian tersebut dijalankan tanpa kesalahan sebelum Anda menyimpan perubahan kode ke repositori kode sumber. 

 Implementasikan pengujian unit dan pengujian integrasi sebagai bagian dari tahap pembuatan, pengujian, dan deployment pipeline CI/CD. Otomatiskan pengujian, dan mulai pengujian secara otomatis setiap kali versi baru aplikasi siap di-deploy. Jika kriteria keberhasilan tidak terpenuhi, maka alur akan dihentikan atau di-rollback. 

 Jika aplikasi tersebut adalah aplikasi web atau seluler, lakukan pengujian integrasi otomatis pada beberapa browser desktop atau perangkat sebenarnya. Pendekatan ini sangat berguna untuk memvalidasi kompatibilitas dan fungsionalitas aplikasi seluler di berbagai perangkat. 

### Langkah-langkah implementasi
<a name="implementation-steps"></a>

1.  Tulis pengujian unit sebelum Anda menulis kode fungsional (*pengembangan berbasis pengujian*, atau TDD). Buat pedoman kode sehingga menulis dan menjalankan pengujian unit menjadi persyaratan pengodean non-fungsional. 

1.  Buat serangkaian pengujian integrasi otomatis yang mencakup fungsionalitas yang dapat diuji yang telah diidentifikasi. Serangkaian pengujian tersebut harus menyimulasikan interaksi pengguna dan memvalidasi hasil yang diharapkan. 

1.  Buat lingkungan pengujian yang diperlukan untuk menjalankan pengujian integrasi. Hal ini mungkin termasuk lingkungan staging atau pra-produksi yang sangat mirip dengan lingkungan produksi. 

1.  Siapkan tahap sumber, pembuatan, pengujian, dan deployment menggunakan konsol AWS CodePipeline atau AWS Command Line Interface (CLI). 

1.  Lakukan deployment aplikasi setelah kode telah dibangun dan diuji. AWS CodeDeploy dapat melakukan deployment aplikasi ke lingkungan staging (pengujian) dan produksi Anda. Lingkungan ini dapat mencakup instans Amazon EC2, fungsi AWS Lambda, atau server on-premise. Mekanisme deployment yang sama harus digunakan untuk melakukan deployment aplikasi ke semua lingkungan. 

1.  Pantau progres pipeline Anda dan status setiap tahap. Gunakan pemeriksaan kualitas untuk memblokir pipeline berdasarkan status pengujian Anda. Anda juga dapat menerima notifikasi untuk setiap kegagalan tahap pipeline atau penyelesaian pipeline. 

1.  Terus pantau hasil pengujian, dan cari pola, regresi, atau area yang membutuhkan perhatian lebih. Gunakan informasi ini untuk memperbaiki rangkaian pengujian, mengidentifikasi area aplikasi yang membutuhkan pengujian yang lebih ketat, dan mengoptimalkan proses deployment. 

## Sumber daya
<a name="resources"></a>

 **Praktik-praktik terbaik terkait:** 
+  [REL07-BP04 Menguji beban untuk beban kerja Anda](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_adapt_to_changes_load_tested_adapt.html) 
+  [REL08-BP03 Mengintegrasikan pengujian ketahanan sebagai bagian dari deployment Anda](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_tracking_change_management_resiliency_testing.html) 
+  [REL12-BP04 Menguji ketahanan menggunakan chaos engineering](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_testing_resiliency_failure_injection_resiliency.html) 

 **Dokumen terkait:** 
+  [Panduan Preskriptif AWS: Otomatisasi pengujian](https://docs.aws.amazon.com/prescriptive-guidance/latest/performance-engineering-aws/test-automation.html) 
+  [Pengiriman Berkelanjutan dan Integrasi Berkelanjutan](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-continuous-delivery-integration.html) 
+  [Indikator untuk pengujian fungsional](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/indicators-for-functional-testing.html) 
+  [Memantau pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring.html) 
+  [Gunakan AWS CodePipeline dengan AWS CodeBuild untuk menguji kode dan menjalankan build](https://docs.aws.amazon.com/codebuild/latest/userguide/how-to-create-pipeline.html) 
+  [AWS Device Farm](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-DeviceFarm.html) 

# REL08-BP03 Mengintegrasikan pengujian ketahanan sebagai bagian dari deployment Anda
<a name="rel_tracking_change_management_resiliency_testing"></a>

 Integrasikan pengujian ketahanan dengan memasukkan kegagalan secara sadar ke dalam sistem Anda guna mengukur kemampuannya apabila terjadi skenario yang mengganggu. Pengujian ketahanan berbeda dari pengujian unit dan fungsi yang biasanya terintegrasi dalam siklus deployment, karena pengujian ini berfokus pada identifikasi terhadap kegagalan-kegagalan yang tidak terduga di dalam sistem Anda. Meskipun memulai dengan integrasi pengujian ketahanan dalam tahap praproduksi aman dilakukan, tetapkan tujuan untuk mengimplementasikan pengujian ini dalam produksi sebagai bagian dari [https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/test-reliability.html#GameDays](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/test-reliability.html#GameDays) Anda. 

 **Hasil yang diinginkan**: Pengujian ketahanan akan membantu Anda membangun kepercayaan pada kemampuan sistem untuk bertahan dari degradasi dalam produksi. Eksperimen mengidentifikasi titik lemah yang dapat menyebabkan kegagalan, yang akan membantu Anda meningkatkan kualitas sistem Anda untuk mengurangi terjadinya kegagalan dan penurunan kualitas secara otomatis dan efisien. 

 **Anti-pola umum:** 
+  Kurangnya observabilitas dan pemantauan dalam proses deployment 
+  Ketergantungan pada manusia untuk mengatasi kegagalan sistem 
+  Mekanisme analisis kualitas yang buruk 
+  Fokus pada masalah yang diketahui dalam suatu sistem dan kurangnya eksperimen untuk mengidentifikasi masalah yang belum diketahui 
+  Identifikasi kegagalan yang tidak mempunyai penyelesaian 
+  Tidak ada dokumentasi temuan dan runbook 

 **Manfaat menerapkan praktik terbaik:** Pengujian ketahanan yang terintegrasi dalam deployment Anda akan membantu Anda dalam mengidentifikasi masalah yang tidak diketahui yang terjadi dalam sistem yang tidak diketahui, yang dapat menyebabkan waktu henti dalam produksi. Melakukan identifikasi terhadap masalah-masalah yang tidak diketahui di dalam sistem akan membantu Anda mendokumentasikan temuan, mengintegrasikan pengujian ke dalam proses CI/CD Anda, dan membangun runbook, yang pada akhirnya akan menyederhanakan mitigasi melalui mekanisme yang efisien dan dapat diulang. 

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

## Panduan implementasi
<a name="implementation-guidance"></a>

 Bentuk pengujian ketahanan yang paling umum yang dapat diintegrasikan dalam deployment sistem Anda adalah pemulihan bencana dan rekayasa kekacauan (chaos engineering). 
+  Sertakan pembaruan pada rencana pemulihan bencana dan prosedur operasi standar (SOP) Anda dengan melakukan deployment yang signifikan. 
+  Integrasikan pengujian keandalan ke dalam pipeline deployment otomatis Anda. Layanan-layanan seperti [AWS Resilience Hub](https://aws.amazon.com/resilience-hub/) dapat [diintegrasikan ke dalam pipeline CI/CD Anda](https://aws.amazon.com/blogs/architecture/continually-assessing-application-resilience-with-aws-resilience-hub-and-aws-codepipeline/) untuk membuat penilaian ketahanan berkelanjutan yang secara otomatis dievaluasi sebagai bagian dari setiap deployment. 
+  Tentukan aplikasi Anda di AWS Resilience Hub. Penilaian ketahanan akan menghasilkan cuplikan kode yang dapat membantu Anda dalam menciptakan prosedur pemulihan dalam bentuk dokumen AWS Systems Manager untuk aplikasi Anda dan menyediakan daftar monitor dan alarm Amazon CloudWatch yang direkomendasikan. 
+  Setelah rencana DR dan SOP Anda sudah diperbarui, selesaikan pengujian pemulihan bencana untuk memverifikasi efektivitasnya. Pengujian pemulihan bencana akan membantu Anda untuk menentukan apakah Anda dapat memulihkan sistem setelah terjadinya peristiwa tertentu dan kembali ke beroperasi secara normal. Anda dapat membuat simulasi dari berbagai strategi pemulihan bencana dan mengidentifikasi apakah perencanaan Anda sudah memadai untuk memenuhi persyaratan-persyaratan waktu aktif Anda. Strategi pemulihan bencana yang biasanya dibuat mencakup pencadangan dan pemulihan, pilot light, cold standby, warm standby, hot standby, dan active-active, dan semuanya memerlukan biaya dan memiliki kompleksitas yang berbeda-beda. Sebelum pengujian pemulihan bencana, kami menyarankan Anda untuk menentukan sasaran waktu pemulihan (RTO) dan sasaran titik pemulihan (RPO) Anda untuk menyederhanakan pilihan strategi yang akan disimulasikan. AWS menawarkan alat pemulihan bencana seperti [AWS Elastic Disaster Recovery](https://aws.amazon.com/disaster-recovery/) untuk membantu Anda memulai perencanaan dan pengujian Anda. 
+  Eksperimen chaos engineering memasukkan gangguan (disruptions) ke dalam sistem, seperti pemadaman jaringan dan kegagalan layanan. Dengan melakukan simulasi dengan kegagalan terkontrol, Anda akan dapat menemukan kerentanan sistem Anda sambil mengendalikan dampak-dampak yang ditimbulkan oleh kegagalan yang dimasukkan. Sama seperti strategi lainnya, jalankan simulasi kegagalan terkontrol di lingkungan non-produksi dengan menggunakan layanan-layanan seperti [AWS Fault Injection Service](https://aws.amazon.com/fis/) untuk mendapatkan kepercayaan diri sebelum melakukan deployment di lingkungan produksi. 

## Sumber daya
<a name="resources"></a>

 **Dokumen terkait:** 
+  [Bereksperimen dengan kegagalan menggunakan pengujian ketahanan untuk membangun kesiapan pemulihan](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/qa.nt.6-experiment-with-failure-using-resilience-testing-to-build-recovery-preparedness.html) 
+  [Terus-menerus menilai ketahanan aplikasi dengan AWS Resilience Hub dan AWS CodePipeline](https://aws.amazon.com/blogs/architecture/continually-assessing-application-resilience-with-aws-resilience-hub-and-aws-codepipeline/) 
+  [Arsitektur Pemulihan Bencana (DR) di AWS, bagian 1: Strategi untuk Pemulihan di Cloud](https://aws.amazon.com/blogs/architecture/disaster-recovery-dr-architecture-on-aws-part-i-strategies-for-recovery-in-the-cloud/) 
+  [Verifikasi ketahanan beban kerja Anda dengan menggunakan Chaos Engineering](https://aws.amazon.com/blogs/architecture/verify-the-resilience-of-your-workloads-using-chaos-engineering/) 
+  [Prinsip-prinsip Chaos Engineering](https://principlesofchaos.org/) 
+  [Lokakarya Chaos Engineering](https://disaster-recovery.workshop.aws/en/intro/concepts/chaos-engineering.html) 

 **Video terkait:** 
+  [AWS re:Invent 2020: Menguji Ketahanan menggunakan Perekayasaan Chaos](https://www.youtube.com/watch?v=OlobVYPkxgg) 
+  [Meningkatkan Ketahanan Aplikasi dengan Layanan Injeksi Kesalahan AWS](https://www.youtube.com/watch?v=N0aZZVVZiUw) 
+  [Mempersiapkan & Melindungi Aplikasi Anda Dari Gangguan Dengan AWS Resilience Hub](https://www.youtube.com/watch?v=xa4BVl4N1Gw) 

# REL08-BP04 Melakukan deployment dengan menggunakan infrastruktur yang tidak bisa diubah
<a name="rel_tracking_change_management_immutable_infrastructure"></a>

 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](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/deployment-strategies.html#in-place-deployments) 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
<a name="implementation-guidance"></a>

 **Otomatisasi** 

 Saat menentukan strategi deployment infrastruktur yang tidak dapat diubah, Anda sebaiknya menggunakan [otomatisasi](https://aws.amazon.com/iam/) sebanyak mungkin untuk meningkatkan reproduksibilitas dan meminimalkan potensi kesalahan manusia. Untuk detail selengkapnya, silakan lihat [REL08-BP05 Melakukan deployment perubahan dengan otomatisasi](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_tracking_change_management_automated_changemgmt.html) dan [Melakukan otomatisasi deployment secara aman dan otonom](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/). 

 Dengan [infrastruktur sebagai kode (IaC)](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html), 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: 

 [https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/canary-deployments.html](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/canary-deployments.html): 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](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) yang akan mengaktifkan deployment canary. 

 [https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html): 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](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2020-05-18-ts-deploy.html) dapat dikonfigurasikan dengan konfigurasi deployment yang memungkinkan deployment blue/green. 

![\[Diagram yang menampilkan deployment blue/green dengan AWS Elastic Beanstalk dan Amazon Route 53\]](http://docs.aws.amazon.com/id_id/wellarchitected/latest/framework/images/blue-green-deployment.png)


 **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
<a name="implementation-steps"></a>
+  Larang modifikasi di tempat pada sumber daya infrastruktur yang sedang berjalan. 
  +  Anda dapat menggunakan [AWS Identity and Access Management (IAM)](https://aws.amazon.com/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](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/automation.html), otomatisasi adalah sebuah landasan dengan layanan AWS dan didukung secara internal di semua layanan, fitur, dan penawaran. 
  +  *[Melakukan prebaking](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/prebaking-vs.-bootstrapping-amis.html)* terhadap Amazon Machine Image (AMI) Anda dapat mempercepat waktu peluncurannya. [EC2 Image Builder](https://aws.amazon.com/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](https://aws.amazon.com/elasticbeanstalk/) 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](https://aws.amazon.com/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](https://aws.amazon.com/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 CloudFormation membangun layanan yang ditentukan dengan cara yang aman dan dapat diulang. 
    +  [AWS Serverless Application Model (AWS SAM)](https://aws.amazon.com/serverless/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 CloudFormation. 
    +  [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/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 CloudFormation di latar belakang untuk menyediakan sumber daya dengan cara yang aman dan dapat diulang. 
    +  [AWS Cloud Control API](https://aws.amazon.com/cloudcontrolapi/) 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. 
  +  Deployment canary: 
    + [Siapkan deployment rilis canary API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html)
    + [ Buat pipeline dengan deployment canary untuk Amazon ECS dengan menggunakan AWS App Mesh](https://aws.amazon.com/blogs/containers/create-a-pipeline-with-canary-deployments-for-amazon-ecs-using-aws-app-mesh/)
  +  Deployment blue/green: [Deployment Blue/Green, pada laporan resmi AWS](https://docs.aws.amazon.com/whitepapers/latest/blue-green-deployments/welcome.html) dijelaskan [contoh teknik](https://docs.aws.amazon.com/whitepapers/latest/blue-green-deployments/implementation-techniques.html) untuk menerapkan strategi deployment blue/green. 
+  Deteksi konfigurasi atau penyimpangan status. Untuk informasi selengkapnya, silakan lihat [Mendeteksi perubahan konfigurasi yang tidak terkelola pada tumpukan dan sumber daya](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). 

## Sumber daya
<a name="resources"></a>

 **Praktik-praktik terbaik terkait:** 
+ [ REL08-BP05 Melakukan deployment perubahan dengan otomatisasi ](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_tracking_change_management_automated_changemgmt.html)

 **Dokumen terkait:** 
+ [ Melakukan otomatisasi deployment secara aman dan otonom ](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/)
+ [ Memanfaatkan AWS CloudFormation untuk menciptakan sebuah infrastruktur yang tidak dapat diubah di Nubank ](https://aws.amazon.com/blogs/mt/leveraging-immutable-infrastructure-nubank/)
+ [ Infrastruktur sebagai kode ](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)
+ [ Menerapkan alarm untuk secara otomatis mendeteksi penyimpangan yang terjadi di tumpukan AWS CloudFormation](https://docs.aws.amazon.com/blogs/mt/implementing-an-alarm-to-automatically-detect-drift-in-aws-cloudformation-stacks/)

 **Video terkait:** 
+ [AWS re:Invent 2020: Keandalan, konsistensi, dan kepercayaan diri melalui kekekalan (immutability) ](https://www.youtube.com/watch?v=jUSYnRztttY)

# REL08-BP05 Melakukan deployment perubahan dengan otomatisasi
<a name="rel_tracking_change_management_automated_changemgmt"></a>

 Deployment dan patching diotomatisasi untuk menghilangkan dampak-dampak negatif. 

 Membuat perubahan pada sistem produksi adalah salah satu area risiko terbesar bagi banyak organisasi. Kami menganggap deployment sebagai masalah kelas pertama untuk diatasi bersama dengan masalah-masalah bisnis yang ditangani oleh perangkat lunak. Saat ini, ini artinya penggunaan otomatisasi kapan saja memungkinkan dalam operasi, termasuk untuk menguji dan melakukan deployment perubahan, menambah atau menghapus kapasitas, dan memigrasikan data. 

 **Hasil yang diinginkan:** Anda membangun keamanan deployment otomatis ke dalam proses rilis dengan pengujian pra-produksi yang ekstensif, rollback otomatis, dan deployment produksi yang sangat baik. Otomatisasi ini meminimalkan potensi dampak pada produksi yang disebabkan oleh deployment yang gagal, dan developer tidak perlu lagi mengawasi tahapan deployment hingga produksi secara aktif. 

 **Anti-pola umum:** 
+  Anda melakukan perubahan secara manual. 
+  Anda melewatkan langkah-langkah dalam otomatisasi Anda melalui alur kerja darurat manual. 
+  Anda tidak mengikuti rencana dan proses yang telah ditetapkan demi mempercepat kronologi (timeline). 
+  Anda melakukan deployment susulan cepat tanpa menyediakan waktu menanam. 

 **Manfaat menjalankan praktik terbaik ini:** Ketika Anda menggunakan otomatisasi untuk melakukan deployment atas semua perubahan, Anda menghapus kemungkinan adanya kesalahan manusia dan memberikan kemampuan untuk melakukan pengujian sebelum Anda mengubahnya ke tahap produksi. Melakukan proses ini sebelum deployment di lingkungan produksi (push) dapat memverifikasi bahwa rencana Anda sudah lengkap. Selain itu, rollback otomatis ke dalam proses rilis Anda dapat mengidentifikasi masalah-masalah produksi dan mengembalikan beban kerja Anda ke keadaan operasional yang diketahui berfungsi sebelumnya. 

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

## Panduan implementasi
<a name="implementation-guidance"></a>

 Lakukan otomatisasi terhadap pipeline deployment Anda. Pipeline deployment memungkinkan Anda untuk menginvokasi pengujian dan deteksi anomali secara otomatis, serta memberi Anda pilihan untuk menghentikan pipeline pada langkah tertentu sebelum deployment produksi atau membatalkan perubahan secara otomatis. Bagian integral dari hal ini adalah adopsi budaya [integrasi berkelanjutan dan pengiriman/deployment berkelanjutan (CI/CD](https://en.wikipedia.org/wiki/CI/CD)), di mana pelaksanaan commit atau perubahan kode melewati berbagai gerbang tahapan otomatis dari tahap pembuatan dan pengujian hingga tahap deployment pada lingkungan produksi. 

 Meskipun kebijaksanaan konvensional menyarankan Anda untuk melibatkan personel untuk prosedur operasional paling sulit, kami justru menyarankan Anda mengotomatiskan prosedur paling sulit karena alasan tersebut. 

### Langkah-langkah implementasi
<a name="implementation-steps"></a>

 Anda dapat mengotomatiskan deployment untuk menghapus operasi-operasi manual dengan mengikuti langkah-langkah berikut: 
+  **Siapkan repositori kode untuk menyimpan kode Anda dengan aman:** Gunakan sistem manajemen kode sumber yang di-hosting berdasarkan teknologi populer seperti Git untuk menyimpan kode sumber dan konfigurasi infrastruktur sebagai kode (IaC) Anda. 
+  **Konfigurasikan layanan integrasi berkelanjutan untuk mengompilasi kode sumber, menjalankan pengujian, dan membuat artefak deployment:** Untuk menyiapkan proyek pembangunan (build) untuk tujuan ini, lihat [Memulai AWS CodeBuild menggunakan konsol](https://docs.aws.amazon.com/codebuild/latest/userguide/getting-started.html). 
+  **Siapkan layanan deployment yang mengotomatiskan deployment aplikasi dan menangani kompleksitas pembaruan aplikasi tanpa bergantung pada deployment manual yang rawan kesalahan:** [AWS CodeDeploy](https://aws.amazon.com/codedeploy/) mengotomatiskan deployment perangkat lunak ke berbagai layanan komputasi, seperti Amazon EC2, [AWS Fargate](https://aws.amazon.com/fargate/), [AWS Lambda](https://aws.amazon.com/lambda), dan server on-premise Anda. Untuk mengonfigurasi langkah-langkah ini, silakan lihat [Memulai CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-codedeploy.html). 
+  **Siapkan layanan pengiriman berkelanjutan yang mengotomatiskan pipeline rilis Anda untuk pembaruan aplikasi dan infrastruktur yang lebih cepat dan lebih andal:** Pertimbangkan menggunakan [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/getting-started-codepipeline.html) yang akan membantu Anda mengotomatiskan pipeline rilis. Untuk detail selengkapnya, lihat [tutorial CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials.html). 

## Sumber daya
<a name="resources"></a>

 **Praktik-praktik terbaik terkait:** 
+  [OPS05-BP04 Menggunakan sistem manajemen build dan deployment](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_build_mgmt_sys.html) 
+  [OPS05-BP10 Mengotomatiskan integrasi dan deployment sepenuhnya](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_auto_integ_deploy.html) 
+  [OPS06-BP02 Menguji deployment](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_mit_deploy_risks_test_val_chg.html) 
+  [OPS06-BP04 Mengotomatiskan pengujian dan rollback](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_mit_deploy_risks_auto_testing_and_rollback.html) 

 **Dokumen terkait:** 
+  [Pengiriman Berkelanjutan dari Tumpukan AWS CloudFormation Bersarang Menggunakan AWS CodePipeline](https://aws.amazon.com/blogs/devops/continuous-delivery-of-nested-aws-cloudformation-stacks-using-aws-codepipeline) 
+  [Partner APN: partner yang dapat membantu Anda membuat solusi deployment yang diotomatisasi](https://aws.amazon.com/partners/find/results/?keyword=devops) 
+  [AWS Marketplace: produk yang dapat digunakan untuk mengotomatisasi deployment Anda](https://aws.amazon.com/marketplace/search/results?searchTerms=DevOps) 
+  [Otomatiskan pesan obrolan dengan webhooks.](https://docs.aws.amazon.com/chime/latest/ug/webhooks.html) 
+  [Amazon Builders' Library: Memastikan keamanan rollback selama deployment](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments) 
+  [Amazon Builders' Library: Melaju lebih cepat dengan pengiriman berkelanjutan](https://aws.amazon.com/builders-library/going-faster-with-continuous-delivery/) 
+  [Apa itu AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 
+  [Apa itu CodeDeploy?](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
+  [AWS Systems Manager Patch Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-patch.html) 
+  [Apa itu Amazon SES?](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/Welcome.html) 
+  [Apa itu Amazon Simple Notification Service?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 

 **Video terkait:** 
+  [AWS Summit 2019: CI/CD di AWS](https://youtu.be/tQcF6SqWCoY) 