

# OPS 6. Bagaimana cara memitigasi risiko deployment?
<a name="ops-06"></a>

 Adopsi pendekatan yang memberikan umpan balik cepat atas kualitas dan mencapai pemulihan cepat dari perubahan yang tidak memiliki hasil yang tidak diinginkan. Menggunakan praktik-praktik ini memitigasi dampak masalah akibat deployment perubahan. 

**Topics**
+ [OPS06-BP01 Antisipasikan perubahan yang tidak berhasil](ops_mit_deploy_risks_plan_for_unsucessful_changes.md)
+ [OPS06-BP02 Menguji deployment](ops_mit_deploy_risks_test_val_chg.md)
+ [OPS06-BP03 Menggunakan strategi deployment yang aman](ops_mit_deploy_risks_deploy_mgmt_sys.md)
+ [OPS06-BP04 Mengotomatiskan pengujian dan pengembalian (rollback)](ops_mit_deploy_risks_auto_testing_and_rollback.md)

# OPS06-BP01 Antisipasikan perubahan yang tidak berhasil
<a name="ops_mit_deploy_risks_plan_for_unsucessful_changes"></a>

Rencanakan untuk kembali ke keadaan yang diketahui pasti baik, atau perbaiki di lingkungan produksi jika deployment menyebabkan hasil yang tidak diinginkan. Adanya kebijakan untuk menetapkan rencana semacam ini bermanfaat bagi semua tim dalam mengembangkan strategi untuk pulih dari perubahan yang gagal. Beberapa contoh strategi adalah langkah deployment dan rollback, kebijakan perubahan, penanda fitur, pemisahan lalu lintas, dan pergeseran lalu lintas. Rilis tunggal dapat mencakup beberapa perubahan komponen yang terkait. Strategi harus memberikan kemampuan untuk bertahan atau pulih dari kegagalan perubahan komponen apa pun.

 **Hasil yang diinginkan:** Anda telah menyiapkan rencana pemulihan yang mendetail untuk perubahan Anda apabila perubahan tersebut tidak berhasil. Selain itu, Anda telah mengurangi ukuran rilis untuk meminimalkan dampak potensial pada komponen beban kerja lainnya. Hasilnya, Anda telah mengurangi dampak bisnis Anda dengan mempersingkat potensi waktu henti yang diakibatkan oleh perubahan yang gagal dan meningkatkan fleksibilitas serta efisiensi waktu pemulihan. 

 **Antipola umum:** 
+  Anda melakukan deployment dan aplikasi Anda menjadi tidak stabil tetapi tampaknya ada pengguna aktif di sistem. Anda harus memutuskan apakah akan mengembalikan perubahan yang akan berdampak pada pengguna aktif atau menunggu untuk mengembalikan perubahan karena tahu bagaimana pun juga pengguna dapat terkena dampaknya. 
+  Setelah membuat perubahan rutin, lingkungan baru Anda dapat diakses tetapi salah satu subnet Anda menjadi tidak dapat dijangkau. Anda harus memutuskan apakah akan mengembalikan semuanya atau mencoba memperbaiki subnet yang tidak dapat diakses tersebut. Sementara Anda sedang memutuskan hal ini, subnet tersebut tetap tidak dapat dijangkau. 
+  Sistem Anda tidak dirancang dapat diperbarui dengan rilis-rilis yang lebih kecil. Akibatnya, Anda mengalami kesulitan dalam membatalkan perubahan massal tersebut selama deployment yang gagal. 
+  Anda tidak menggunakan infrastruktur sebagai kode (IaC) dan Anda melakukan pembaruan manual pada infrastruktur Anda sehingga mengakibatkan konfigurasi yang tidak diinginkan. Anda tidak dapat melacak dan membatalkan perubahan manual secara efektif. 
+  Karena Anda belum mengukur peningkatan frekuensi deployment Anda, tim Anda kesulitan mengurangi ukuran perubahan mereka dan meningkatkan rencana rollback mereka untuk setiap perubahan, yang berimbas pada risiko yang lebih besar dan tingkat kegagalan yang meningkat. 
+  Anda tidak mengukur total durasi pemadaman yang disebabkan oleh perubahan yang tidak berhasil. Tim Anda tidak dapat memprioritaskan dan meningkatkan proses deployment serta efektivitas rencana pemulihannya. 

 **Manfaat menjalankan praktik terbaik ini:** Memiliki rencana untuk pulih dari perubahan yang gagal meminimalkan rata-rata waktu untuk pulih (MTTR) dan mengurangi dampak bisnis Anda. 

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

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

 Kebijakan dan praktik yang konsisten serta terdokumentasi yang diadopsi oleh tim rilis memungkinkan organisasi untuk merencanakan apa yang harus terjadi apabila terjadi kegagalan perubahan. Kebijakan harus memungkinkan perbaikan maju (fix forward) dalam keadaan tertentu. Dalam situasi apa pun, rencana perbaikan maju atau rollback harus didokumentasikan dan diuji dengan baik sebelum deployment ke produksi langsung sehingga waktu yang diperlukan untuk mengembalikan perubahan dapat diminimalkan. 

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

1.  Dokumentasikan kebijakan yang mengharuskan tim memiliki rencana efektif untuk mengembalikan perubahan dalam periode tertentu. 

   1.  Kebijakan harus menentukan kapan situasi perbaikan maju diperbolehkan. 

   1.  Rencana rollback yang terdokumentasi harus dapat diakses oleh semua pihak yang terlibat. 

   1.  Tentukan persyaratan untuk rollback (misalnya, ketika ternyata ada perubahan tidak sah yang telah di-deploy). 

1.  Analisis tingkat dampak semua perubahan yang berkaitan dengan setiap komponen beban kerja. 

   1.  Biarkan perubahan berulang untuk distandardisasi, dijadikan templat, dan diotorisasi di awal jika perubahan tersebut mengikuti alur kerja konsisten yang memberlakukan kebijakan perubahan. 

   1.  Kurangi potensi dampak perubahan apa pun dengan menjadikan ukuran perubahan lebih kecil sehingga pemulihan membutuhkan waktu yang lebih singkat dan menyebabkan lebih sedikit dampak bisnis. 

   1.  Pastikan prosedur rollback mengembalikan kode ke keadaan yang pasti baik untuk menghindari insiden jika memungkinkan. 

1.  Integrasikan alat dan alur kerja untuk menegakkan kebijakan Anda secara terprogram. 

1.  Buat agar data tentang perubahan dapat dilihat oleh pemilik beban kerja lain untuk meningkatkan kecepatan diagnosis perubahan yang gagal yang tidak dapat dibatalkan. 

   1.  Ukur keberhasilan praktik ini menggunakan data perubahan yang terlihat dan identifikasi peningkatan iteratif. 

1.  Gunakan alat pemantauan untuk memverifikasi keberhasilan atau kegagalan deployment untuk mempercepat pengambilan keputusan saat melakukan rollback. 

1.  Ukur durasi pemadaman Anda selama perubahan yang gagal untuk terus meningkatkan kualitas rencana pemulihan Anda. 

 **Tingkat upaya untuk rencana implementasi:** Sedang 

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

 **Praktik terbaik terkait:** 
+  [OPS06-BP04 Mengotomatiskan pengujian dan pengembalian (rollback)](ops_mit_deploy_risks_auto_testing_and_rollback.md) 

 **Dokumen terkait:** 
+ [AWS Builders Library \$1 Memastikan Keamanan Rollback Selama Deployment ](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments/)
+ [AWS Laporan Resmi \$1 Manajemen Perubahan di Cloud ](https://docs.aws.amazon.com/whitepapers/latest/change-management-in-the-cloud/change-management-in-the-cloud.html)

 **Video terkait:** 
+ [ re:Invent 2019 \$1 Pendekatan Amazon untuk deployment ketersediaan tinggi ](https://aws.amazon.com/builders-library/amazon-approach-to-high-availability-deployment/)

# OPS06-BP02 Menguji deployment
<a name="ops_mit_deploy_risks_test_val_chg"></a>

 Uji prosedur rilis dalam tahap praproduksi dengan menggunakan konfigurasi deployment, kontrol keamanan, langkah, dan prosedur yang sama seperti dalam tahap produksi. Lakukan validasi bahwa semua langkah yang di-deploy selesai sesuai harapan, seperti dengan memeriksa file, konfigurasi, dan layanan. Uji lebih lanjut semua perubahan dengan pengujian fungsional, integrasi, dan beban, beserta pemantauan apa pun seperti pemeriksaan kondisi. Dengan melakukan pengujian ini, Anda dapat mengidentifikasi masalah deployment lebih awal dengan peluang untuk merencanakan dan menanggulanginya sebelum produksi. 

 Anda dapat membuat lingkungan paralel sementara untuk menguji setiap perubahan. Otomatiskan deployment lingkungan pengujian menggunakan infrastruktur sebagai kode (IaC) untuk membantu mengurangi jumlah pekerjaan yang terlibat dan memastikan stabilitas, konsistensi, dan pengiriman fitur yang lebih cepat. 

 **Hasil yang diinginkan:** Organisasi Anda mengadopsi budaya pengembangan berbasis pengujian yang mencakup pengujian deployment. Ini memastikan tim fokus menghadirkan nilai bisnis, bukan mengelola rilis. Tim terlibat sejak dini setelah identifikasi risiko deployment untuk menentukan arah mitigasi yang tepat. 

 **Antipola umum:** 
+  Selama rilis produksi, deployment yang belum teruji sering menyebabkan masalah yang memerlukan penyelesaian dan eskalasi. 
+  Rilis Anda berisi infrastruktur sebagai kode (IaC) yang memperbarui sumber daya yang ada. Anda tidak yakin apakah IaC berjalan dengan sukses atau menyebabkan dampak pada sumber daya. 
+  Anda men-deploy sebuah fitur baru ke aplikasi Anda. Fitur tersebut tidak berfungsi sesuai keinginan dan masalah ini baru dapat diketahui setelah dilaporkan oleh pengguna yang terdampak. 
+  Anda memperbarui sertifikat Anda. Anda tidak sengaja menginstal sertifikat ke komponen yang salah, yang akhirnya tidak terdeteksi dan berdampak pada pengunjung situs web karena koneksi yang aman ke situs web tidak dapat dibuat. 

 **Manfaat menjalankan praktik terbaik ini:** Pengujian ekstensif selama tahap praproduksi dalam prosedur deployment serta perubahan yang dimunculkannya dapat meminimalkan potensi dampak terhadap produksi yang disebabkan oleh langkah-langkah deployment. Hal ini meningkatkan kepercayaan diri selama rilis produksi dan meminimalkan dukungan operasional tanpa memperlambat penyampaian perubahan. 

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

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

 Menguji proses deployment sama pentingnya dengan menguji perubahan yang dihasilkan dari deployment Anda. Hal ini dapat dicapai dengan menguji langkah-langkah deployment Anda di lingkungan praproduksi yang semaksimal mungkin mencerminkan produksi. Masalah umum, seperti langkah deployment yang tidak lengkap atau salah, atau kesalahan konfigurasi, dapat terdeteksi sebelum masuk ke tahap produksi. Selain itu, Anda dapat menguji langkah-langkah pemulihan Anda. 

 **Contoh pelanggan** 

 Sebagai bagian dari pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD), AnyCompany Retail melakukan langkah-langkah yang ditentukan yang diperlukan untuk merilis pembaruan infrastruktur dan perangkat lunak bagi pelanggannya di dalam lingkungan mirip produksi. Pipeline tersebut terdiri dari prapemeriksaan untuk mendeteksi penyimpangan (mendeteksi perubahan pada sumber daya yang dilakukan di luar IaC Anda) di dalam sumber daya sebelum deployment, serta memvalidasi tindakan yang dilakukan IaC setelah inisiasi. Tahap ini memvalidasi langkah-langkah deployment, seperti memverifikasi bahwa file dan konfigurasi tertentu sudah siap dan layanan sudah dalam status berjalan serta merespons dengan benar pemeriksaan kondisi pada host lokal sebelum didaftarkan ulang dengan penyeimbang beban. Selain itu, semua perubahan menandai sejumlah pengujian otomatis, seperti pengujian fungsional, keamanan, regresi, integrasi, dan beban. 

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

1.  Lakukan pemeriksaan prainstal pada produksi untuk mencerminkan lingkungan praproduksi. 

   1.  Gunakan [deteksi penyimpangan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html) untuk mendeteksi apabila sumber daya telah diubah di luar CloudFormation. 

   1.  Gunakan [set perubahan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) untuk memvalidasi bahwa maksud pembaruan tumpukan sesuai dengan tindakan yang dilakukan oleh CloudFormation saat rangkaian perubahan dimulai. 

1.  Ini memicu langkah persetujuan manual di [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals.html) untuk mengotorisasi deployment ke lingkungan praproduksi. 

1.  Gunakan konfigurasi deployment seperti file [AWS CodeDeploy AppSpec](https://docs.aws.amazon.com/codedeploy/latest/userguide/application-specification-files.html) untuk menentukan langkah deployment dan validasi. 

1.  Jika perlu, [integrasikan AWS CodeDeploy dengan layanan AWS lain](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-aws.html) atau [integrasikan AWS CodeDeploy dengan produk dan layanan partner](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-partners.html). 

1.  [Pantau deployment](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html) menggunakan Amazon CloudWatch, AWS CloudTrail, dan notifikasi peristiwa Amazon SNS. 

1.  Lakukan pengujian otomatis pasca-deployment, termasuk pengujian fungsional, keamanan, regresi, integrasi, dan beban. 

1.  [Pecahkan](https://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html) masalah deployment. 

1.  Validasi yang berhasil dari langkah-langkah sebelumnya seharusnya menginisiasi alur kerja persetujuan manual untuk memberikan otorisasi deployment ke produksi. 

 **Tingkat upaya untuk rencana implementasi:** Tinggi 

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

 **Praktik terbaik terkait:** 
+  [OPS05-BP02 Menguji dan memvalidasi perubahan](ops_dev_integ_test_val_chg.md) 

 **Dokumen terkait:** 
+ [AWS Builders' Library \$1 Mengotomatiskan deployment hands-off yang aman \$1 Menguji Deployment ](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/#Test_deployments_in_pre-production_environments)
+ [AWS Laporan Resmi \$1 Mempraktikkan Integrasi Berkelanjutan dan Pengiriman Berkelanjutan di AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/testing-stages-in-continuous-integration-and-continuous-delivery.html)
+ [ Kisah Apollo - Mesin Deployment Amazon ](https://www.allthingsdistributed.com/2014/11/apollo-amazon-deployment-engine.html)
+  [Cara menguji dan melakukan debug AWS CodeDeploy secara lokal sebelum mengirimkan kode Anda](https://aws.amazon.com/blogs/devops/how-to-test-and-debug-aws-codedeploy-locally-before-you-ship-your-code/) 
+ [ Mengintegrasikan Pengujian Konektivitas Jaringan dengan Deployment Infrastruktur ](https://aws.amazon.com/blogs/networking-and-content-delivery/integrating-network-connectivity-testing-with-infrastructure-deployment/)

 **Video terkait:** 
+ [ re:Invent 2020 \$1 Menguji perangkat lunak dan sistem di Amazon ](https://www.youtube.com/watch?v=o1sc3cK9bMU)

 **Contoh terkait:** 
+ [ Tutorial \$1 Melakukan Deployment dan layanan Amazon ECS dengan uji validasi ](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-ecs-deployment-with-hooks.html)

# OPS06-BP03 Menggunakan strategi deployment yang aman
<a name="ops_mit_deploy_risks_deploy_mgmt_sys"></a>

 Peluncuran produksi yang aman mengontrol aliran perubahan yang bermanfaat dengan tujuan untuk meminimalkan dampak yang dirasakan oleh pelanggan dari perubahan tersebut. Kontrol keselamatan menyediakan mekanisme inspeksi untuk memvalidasi hasil yang diinginkan dan membatasi ruang lingkup dampak dari cacat apa pun yang disebabkan oleh perubahan atau dari kegagalan deployment. Peluncuran yang aman dapat mencakup strategi seperti feature-flag, one-box, bergulir (rilis canary), immutable, pemisahan lalu lintas, dan deployment blue/green. 

 **Hasil yang diinginkan:** Organisasi Anda menggunakan sistem integrasi berkelanjutan pengiriman berkelanjutan (CI/CD) yang menyediakan kemampuan untuk mengotomatiskan peluncuran yang aman. Tim diharuskan menggunakan strategi peluncuran aman yang tepat. 

 **Antipola umum:** 
+  Anda melakukan deployment perubahan yang tidak berhasil ke seluruh produksi sekaligus. Akibatnya, semua pelanggan merasakan dampaknya secara bersamaan. 
+  Cacat akibat deployment serentak ke semua sistem memerlukan rilis darurat. Diperlukan waktu beberapa hari untuk memperbaikinya untuk semua pelanggan. 
+  Untuk mengelola rilis produksi diperlukan perencanaan dan partisipasi beberapa tim. Hal ini menghambat kemampuan Anda untuk sering memperbarui fitur bagi pelanggan Anda. 
+  Anda melakukan deployment yang dapat diubah dengan memodifikasi sistem yang sudah ada. Setelah mengetahui bahwa perubahan tidak berhasil, Anda terpaksa memodifikasi sistem lagi untuk memulihkan versi yang lama sehingga memperpanjang waktu pemulihan Anda. 

 **Manfaat menjalankan praktik terbaik ini:** Deployment otomatis menyeimbangkan kecepatan peluncuran dengan menghadirkan perubahan yang bermanfaat secara konsisten kepada pelanggan. Pembatasan dampak dapat mencegah kegagalan deployment yang mahal dan memaksimalkan kemampuan tim untuk merespons kegagalan secara efisien. 

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

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

 Kegagalan pengiriman berkelanjutan dapat menyebabkan berkurangnya ketersediaan layanan dan buruknya pengalaman pelanggan. Untuk memaksimalkan tingkat keberhasilan deployment, terapkan kontrol keamanan dalam proses rilis menyeluruh (end-to-end) untuk meminimalkan kesalahan deployment, dengan tujuan mencapai nol kegagalan deployment. 

 **Contoh pelanggan** 

 AnyCompany Retail memiliki misi untuk mencapai deployment dengan waktu henti yang minim hingga nol, yang berarti tidak ada dampak yang dirasakan oleh penggunanya selama deployment. Untuk mencapainya, perusahaan telah membuat pola deployment (lihat diagram alur kerja berikut), seperti deployment blue/green dan bergulir (rolling). Semua tim mengadopsi satu atau beberapa pola tersebut di dalam pipeline CI/CD mereka. 


| Alur kerja CodeDeploy untuk Amazon EC2 | Alur kerja CodeDeploy untuk Amazon ECS | Alur kerja CodeDeploy untuk Lambda | 
| --- | --- | --- | 
|  ![\[Alur proses deployment untuk Amazon EC2\]](http://docs.aws.amazon.com/id_id/wellarchitected/2023-10-03/framework/images/deployment-process-ec2.png)  |  ![\[Alur proses deployment untuk Amazon ECS\]](http://docs.aws.amazon.com/id_id/wellarchitected/2023-10-03/framework/images/deployment-process-ecs.png)  |  ![\[Alur proses deployment untuk Lambda\]](http://docs.aws.amazon.com/id_id/wellarchitected/2023-10-03/framework/images/deployment-process-lambda.png)  | 

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

1.  Gunakan alur kerja persetujuan untuk memulai urutan langkah peluncuran produksi setelah promosi ke produksi. 

1.  Gunakan sistem deployment otomatis seperti [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html). Opsi deployment AWS CodeDeploy [meliputi](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps.html) deployment pengganti untuk EC2/On-Premise dan deployment blue/green untuk EC2/On-Premise, AWS Lambda, dan Amazon ECS (lihat diagram alur kerja sebelumnya). 

   1.  Jika perlu, [integrasikan AWS CodeDeploy dengan layanan AWS lain](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-aws.html) atau [integrasikan AWS CodeDeploy dengan produk dan layanan partner](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-partners.html). 

1.  Gunakan deployment blue/green untuk basis data seperti [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) dan [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html). 

1.  [Pantau deployment](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html) menggunakan Amazon CloudWatch, AWS CloudTrail, dan notifikasi peristiwa Amazon SNS. 

1.  Lakukan pengujian otomatis pasca-deployment termasuk pengujian fungsional, keamanan, regresi, integrasi, dan beban apa pun. 

1.  [Pecahkan](https://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html) masalah deployment. 

 **Tingkat upaya untuk rencana implementasi:** Sedang 

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

 **Praktik terbaik terkait:** 
+  [OPS05-BP02 Menguji dan memvalidasi perubahan](ops_dev_integ_test_val_chg.md) 
+  [OPS05-BP09 Membuat perubahan yang sering, kecil, dan dapat dikembalikan](ops_dev_integ_freq_sm_rev_chg.md) 
+  [OPS05-BP10 Mengotomatiskan integrasi dan deployment sepenuhnya](ops_dev_integ_auto_integ_deploy.md) 

 **Dokumen terkait:** 
+ [AWS Builders Library \$1 Mengotomatiskan deployment hands-off yang aman \$1 Deployment produksi ](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/?did=ba_card&trk=ba_card#Production_deployments)
+ [AWS Builders Library \$1 Pipeline CI/CD saya adalah kapten rilis saya \$1 Rilis produksi otomatis yang aman](https://aws.amazon.com//builders-library/cicd-pipeline/#Safe.2C_automatic_production_releases)
+ [Laporan Resmi AWS \$1 Mempraktikkan Integrasi Berkelanjutan dan Pengiriman Berkelanjutan di AWS \$1 Metode deployment](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/deployment-methods.html)
+ [AWS CodeDeploy Panduan Pengguna](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)
+ [Mulai konfigurasi deployment di AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)
+ [Konfigurasikan canary API Gateway untuk meluncurkan deployment ](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html)
+ [Jenis Deployment Amazon ECS](https://docs.aws.amazon.com/)
+ [Deployment Blue/Green Terkelola Penuh di Amazon Aurora dan Amazon RDS](https://aws.amazon.com/blogs/aws/new-fully-managed-blue-green-deployments-in-amazon-aurora-and-amazon-rds/)
+ [Deployment Blue/Green dengan AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html)

 **Video terkait:** 
+ [re:Invent 2020 \$1 Hands-off: Mengotomatiskan pipeline pengiriman berkelanjutan di Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY)
+ [re:Invent 2019 \$1 Pendekatan deployment ketersediaan tinggi Amazon](https://www.youtube.com/watch?v=bCgD2bX1LI4)

 **Contoh terkait:** 
+ [Coba Sampel Deployment Blue/Green di AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html)
+ [Lokakarya \$1 Membangun pipeline CI/CD untuk deployment canary Lambda menggunakan AWS CDK](https://catalog.us-east-1.prod.workshops.aws/workshops/5195ab7c-5ded-4ee2-a1c5-775300717f42/en-US)
+ [Lokakarya \$1 Deployment Blue/Green dan Canary untuk EKS dan ECS](https://catalog.us-east-1.prod.workshops.aws/workshops/2175d94a-cd79-4ed2-8e7e-1f0dd1956a3a/en-US)
+ [Lokakarya \$1 Membangun Pipeline CI/CD Lintas Akun](https://catalog.us-east-1.prod.workshops.aws/workshops/00bc829e-fd7c-4204-9da1-faea3cf8bd88/en-US)

# OPS06-BP04 Mengotomatiskan pengujian dan pengembalian (rollback)
<a name="ops_mit_deploy_risks_auto_testing_and_rollback"></a>

 Untuk meningkatkan kecepatan, keandalan, dan keyakinan pada proses deployment Anda, miliki strategi untuk kemampuan pengujian dan rollback otomatis di lingkungan praproduksi dan produksi. Otomatiskan pengujian saat melakukan deployment ke produksi untuk menyimulasikan interaksi manusia dan sistem yang memverifikasi perubahan yang sedang di-deploy. Otomatiskan rollback untuk kembali ke keadaan pasti baik sebelumnya dengan cepat. Rollback harus dimulai secara otomatis pada kondisi yang telah ditentukan di awal seperti ketika hasil perubahan yang Anda inginkan tidak tercapai atau ketika pengujian otomatis mengalami kegagalan. Mengotomatiskan kedua aktivitas ini dapat memperbaiki tingkat keberhasilan untuk deployment Anda, meminimalkan waktu pemulihan, dan mengurangi potensi dampak terhadap bisnis. 

 **Hasil yang diinginkan:** Strategi pengujian dan rollback otomatis Anda diintegrasikan ke dalam pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) Anda. Pemantauan Anda dapat memvalidasi berdasarkan kriteria keberhasilan Anda dan memulai rollback otomatis setelah kegagalan. Hal ini meminimalkan dampak apa pun terhadap pelanggan dan pengguna akhir. Misalnya, ketika semua hasil pengujian telah terpenuhi, Anda meneruskan kode Anda ke lingkungan produksi tempat pengujian regresi otomatis dimulai, dengan memanfaatkan kasus pengujian yang sama. Jika hasil pengujian regresi tidak sesuai dengan harapan, maka rollback otomatis akan dimulai dalam alur kerja pipeline. 

 **Antipola umum:** 
+  Sistem Anda tidak dirancang dapat diperbarui dengan rilis-rilis yang lebih kecil. Akibatnya, Anda mengalami kesulitan dalam membatalkan perubahan massal tersebut selama deployment yang gagal. 
+  Proses deployment Anda terdiri dari serangkaian langkah manual. Setelah melakukan deployment perubahan ke beban kerja, Anda memulai pengujian pasca-deployment. Setelah pengujian, Anda menyadari bahwa beban kerja Anda tidak dapat dioperasikan dan koneksi pelanggan terputus. Kemudian Anda mulai melakukan rollback ke versi sebelumnya. Semua langkah manual ini menghambat pemulihan sistem secara keseluruhan dan menyebabkan dampak yang berkepanjangan terhadap pelanggan Anda. 
+  Anda menghabiskan waktu mengembangkan kasus pengujian otomatis untuk fungsionalitas yang tidak sering digunakan dalam aplikasi Anda, sehingga memperkecil laba atas investasi dalam kemampuan pengujian otomatis Anda. 
+  Rilis Anda terdiri dari aplikasi, infrastruktur, patch, dan pembaruan konfigurasi yang tidak bergantung satu sama lain. Namun, Anda memiliki satu pipeline CI/CD yang mengirimkan semua perubahan sekaligus. Kegagalan pada satu komponen memaksa Anda untuk mengembalikan semua perubahan, menjadikan rollback Anda kompleks dan tidak efisien. 
+  Tim Anda menyelesaikan tugas pengodean dalam sprint satu dan memulai tugas sprint dua, tetapi rencana Anda tidak menyertakan pengujian sampai sprint tiga. Akibatnya, pengujian otomatis mengungkap cacat dari sprint satu yang harus diselesaikan sebelum pengujian kiriman sprint dua dapat dimulai dan seluruh rilis menjadi tertunda, sehingga menurunkan nilai pengujian otomatis Anda. 
+  Kasus pengujian regresi otomatis Anda untuk rilis produksi sudah selesai, tetapi Anda tidak memantau kondisi beban kerja. Karena Anda tidak memiliki visibilitas apakah layanan telah dimulai ulang atau belum, Anda tidak yakin apakah rollback diperlukan atau rollback sudah terjadi. 

 **Manfaat menjalankan praktik terbaik ini:** Pengujian otomatis meningkatkan transparansi proses pengujian Anda dan kemampuan Anda untuk mencakup lebih banyak fitur dalam periode waktu yang lebih singkat. Dengan menguji dan memvalidasi perubahan dalam produksi, Anda dapat segera mengidentifikasi masalah. Peningkatan konsistensi dengan alat pengujian otomatis memungkinkan deteksi cacat yang lebih baik. Dengan melakukan rollback otomatis ke versi sebelumnya, dampak pada pelanggan diminimalkan. Rollback otomatis pada akhirnya memunculkan keyakinan yang lebih tinggi pada kemampuan deployment Anda dengan mengurangi dampak bisnis. Secara keseluruhan, kemampuan ini mengurangi waktu pengiriman sekaligus memastikan kualitas. 

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

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

 Otomatiskan pengujian lingkungan yang di-deploy untuk mengonfirmasi hasil yang diinginkan dengan lebih cepat. Otomatiskan pengembalian ke keadaan yang diketahui baik sebelumnya ketika hasil yang ditetapkan di awal tidak tercapai, untuk mempersingkat waktu pemulihan dan mengurangi kesalahan yang disebabkan oleh proses manual. Integrasikan alat pengujian dengan alur kerja pipeline Anda untuk menguji dan meminimalkan input manual secara konsisten. Prioritaskan otomatisasi kasus pengujian, seperti kasus pengujian yang mengurangi risiko terbesar dan perlu sering diuji dengan setiap perubahan. Selain itu, otomatiskan rollback berdasarkan kondisi tertentu yang telah ditentukan di awal dalam rencana pengujian Anda. 

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

1.  Bangun siklus pengujian untuk siklus hidup pengembangan Anda yang menentukan setiap tahap proses pengujian mulai dari perencanaan persyaratan hingga pengembangan kasus pengujian, konfigurasi alat, pengujian otomatis, dan penutupan kasus pengujian. 

   1.  Buat pendekatan pengujian khusus beban kerja dari strategi pengujian Anda secara keseluruhan. 

   1.  Pertimbangkan strategi pengujian berkelanjutan jika diperlukan di seluruh siklus pengembangan. 

1.  Pilih alat otomatis untuk pengujian dan rollback berdasarkan kebutuhan bisnis dan investasi pipeline Anda. 

1.  Tentukan kasus pengujian mana yang ingin Anda otomatisasi dan mana yang harus dilakukan secara manual. Anda dapat menentukannya berdasarkan prioritas nilai bisnis dari fitur yang sedang diuji. Selaraskan semua anggota tim dengan rencana ini dan pastikan akuntabilitas untuk melakukan pengujian manual. 

   1.  Terapkan kemampuan pengujian otomatis ke kasus pengujian tertentu yang cocok untuk otomatisasi, seperti kasus berulang atau yang sering dijalankan, kasus yang memerlukan tugas berulang, atau kasus yang diperlukan di beberapa konfigurasi. 

   1.  Tentukan skrip otomatisasi pengujian serta kriteria keberhasilan di dalam alat otomatisasi sehingga otomatisasi alur kerja yang berkelanjutan dapat dimulai ketika ada kasus tertentu yang gagal. 

   1.  Tentukan kriteria kegagalan khusus untuk rollback otomatis. 

1.  Prioritaskan otomatisasi pengujian untuk mendorong hasil yang konsisten dengan pengembangan kasus pengujian menyeluruh di mana kompleksitas dan interaksi manusia memiliki risiko kegagalan yang lebih tinggi. 

1.  Integrasikan pengujian otomatis dan alat rollback Anda ke dalam pipeline CI/CD Anda. 

   1.  Kembangkan kriteria keberhasilan yang jelas untuk perubahan Anda. 

   1.  Pantau dan amati untuk mendeteksi kriteria ini dan secara otomatis membalikkan perubahan ketika kriteria rollback tertentu terpenuhi. 

1.  Lakukan berbagai jenis pengujian produksi otomatis, seperti: 

   1.  Pengujian A/B untuk menunjukkan hasil yang dibandingkan dengan versi saat ini antara dua kelompok pengujian pengguna. 

   1.  Pengujian canary yang memungkinkan Anda untuk meluncurkan perubahan Anda pada subset pengguna sebelum merilisnya ke semua pengguna. 

   1.  Pengujian penandaan fitur (feature flag) yang memungkinkan satu per satu fitur dari versi baru untuk ditandai atau dihapus tandanya dari luar aplikasi sehingga setiap fitur baru dapat divalidasi satu per satu. 

   1.  Pengujian regresi untuk memverifikasi fungsionalitas baru dengan komponen yang saling terkait. 

1.  Pantau aspek operasional aplikasi, transaksi, dan interaksi dengan aplikasi dan komponen lain. Kembangkan laporan untuk menunjukkan keberhasilan perubahan berdasarkan beban kerja sehingga Anda dapat mengidentifikasi bagian otomatisasi dan alur kerja apa yang dapat dioptimalkan lebih lanjut. 

   1.  Kembangkan laporan hasil pengujian yang membantu Anda mengambil keputusan cepat terkait apakah prosedur rollback perlu dimulai. 

   1.  Terapkan strategi yang memungkinkan rollback otomatis berdasarkan kondisi kegagalan yang telah ditentukan di awal yang dihasilkan dari satu atau beberapa metode pengujian Anda. 

1.  Kembangkan kasus pengujian otomatis untuk memungkinkan penggunaan ulang di seluruh perubahan berulang di masa mendatang. 

 **Tingkat upaya untuk rencana implementasi:** Sedang 

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

 **Praktik terbaik terkait:** 
+  [OPS06-BP01 Antisipasikan perubahan yang tidak berhasil](ops_mit_deploy_risks_plan_for_unsucessful_changes.md) 
+  [OPS06-BP02 Menguji deployment](ops_mit_deploy_risks_test_val_chg.md) 

 **Dokumen terkait:** 
+ [AWS Builders Library \$1 Memastikan keamanan rollback selama deployment ](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments/)
+  [Deployment ulang dan membatalkan deployment dengan AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-rollback-and-redeploy.html) 
+ [ 8 praktik terbaik saat mengotomatiskan deployment Anda dengan AWS CloudFormation](https://aws.amazon.com/blogs/infrastructure-and-automation/best-practices-automating-deployments-with-aws-cloudformation/)

 **Contoh terkait:** 
+ [ Pengujian UI nirserver menggunakan Selenium, AWS Lambda, AWS Fargate, dan Alat Developer AWS](https://aws.amazon.com/blogs/devops/using-aws-codepipeline-aws-codebuild-and-aws-lambda-for-serverless-automated-ui-testing/)

 **Video terkait:** 
+ [ re:Invent 2020 \$1 Hands-off: Mengotomatiskan pipeline pengiriman berkelanjutan di Amazon ](https://www.youtube.com/watch?v=ngnMj1zbMPY)
+ [ re:Invent 2019 \$1 Pendekatan deployment ketersediaan tinggi Amazon ](https://www.youtube.com/watch?v=bCgD2bX1LI4)