

# OPS 6. Bagaimana cara memitigasi risiko deployment?


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

**Topics**
+ [

# OPS06-BP01 Rencana untuk perubahan yang gagal
](ops_mit_deploy_risks_plan_for_unsucessful_changes.md)
+ [

# OPS06-BP02 Uji penerapan
](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 rollback
](ops_mit_deploy_risks_auto_testing_and_rollback.md)

# OPS06-BP01 Rencana untuk perubahan yang gagal
OPS06-BP01 Rencana untuk perubahan yang gagal

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 sebuah rencana pemulihan yang mendetail untuk perubahan Anda apabila perubahan tersebut tidak berhasil. Selain itu, Anda juga telah mengurangi ukuran rilis untuk meminimalkan dampak-dampak potensial yang mungkin ditimbulkan terhadap komponen beban kerja lainnya. Hasilnya, Anda telah mengurangi dampak bisnis Anda dengan mempersingkat potensi waktu henti yang mungkin diakibatkan oleh kegagalan perubahan dan meningkatkan fleksibilitas serta efisiensi waktu pemulihan. 

 **Anti-pola umum:** 
+  Anda melakukan deployment dan aplikasi Anda menjadi tidak stabil, namun sepertinya masih ada pengguna yang aktif di sistem. Anda harus memutuskan apakah akan melakukan roll back terhadap perubahan yang akan berdampak pada pengguna aktif atau menunggu untuk melakukan roll back perubahan tersebut karena tahu bagaimana pun juga pengguna dapat terkena dampaknya. 
+  Setelah Anda membuat perubahan rutin, lingkungan baru Anda dapat diakses tetapi salah satu subnet Anda menjadi tidak dapat dijangkau. Anda harus memutuskan apakah akan melakukan roll back terhadap 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 secara manual pada infrastruktur Anda sehingga mengakibatkan terjadinya konfigurasi yang tidak diinginkan. Anda tidak dapat melacak dan membatalkan perubahan manual secara efektif. 
+  Karena Anda belum mengukur peningkatan frekuensi deployment Anda, tim Anda kemudian mengalami kesulitan untuk 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 (outage) yang disebabkan oleh perubahan yang tidak berhasil. Tim Anda tidak dapat memprioritaskan dan meningkatkan proses deployment serta efektivitas rencana pemulihannya. 

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

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

## Panduan implementasi
Panduan implementasi

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

### Langkah-langkah implementasi
Langkah-langkah implementasi

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

   1.  Kebijakan harus menentukan kapan situasi perbaikan ke depan diperbolehkan. 

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

   1.  Tentukan persyaratan-persyaratan untuk rollback (misalnya, ketika ternyata ada deployment perubahan tidak sah). 

1.  Lakukan analisis terhadap tingkat dampak yang ditimbulkan oleh semua perubahan yang berkaitan dengan setiap komponen dari sebuah beban kerja. 

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

   1.  Kurangi potensi dampak yang mungkin ditimbulkan oleh setiap perubahan dengan menjadikan ukuran perubahan lebih kecil sehingga waktu pemulihan yang dibutuhkan menjadi lebih singkat dan menyebabkan lebih sedikit dampak bisnis. 

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

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

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

   1.  Ukur keberhasilan praktik ini dengan menggunakan data perubahan yang terlihat dan identifikasi setiap peningkatan iteratif yang mungkin dilakukan. 

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

1.  Ukur durasi pemadaman (outage) Anda selama terjadi kegagalan perubahan untuk terus meningkatkan kualitas rencana pemulihan Anda. 

 **Tingkat upaya untuk rencana implementasi:** Sedang 

## Sumber daya
Sumber daya

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

 **Dokumen terkait:** 
+ [AWS Builders Library \$1 Memastikan Keamanan Rollback Selama Penerapan](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments/)
+ [AWS Whitepaper \$1 Ubah Manajemen 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 Uji penerapan
OPS06-BP02 Uji penerapan

 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. Lakukan otomatisasi deployment lingkungan pengujian dengan 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 akan memastikan bahwa tim akan berkonsentrasi untuk menghadirkan nilai bisnis, bukan mengelola rilis. Tim terlibat sejak dini setelah identifikasi risiko deployment untuk menentukan arah mitigasi yang sesuai. 

 **Anti-pola umum:** 
+  Selama rilis produksi, deployment yang belum teruji sering kali akan menyebabkan masalah-masalah yang memerlukan penyelesaian dan eskalasi. 
+  Rilis Anda berisi infrastruktur sebagai kode (IaC) yang memperbarui sumber daya yang ada sekarang. Anda tidak yakin apakah IaC berjalan dengan sukses atau akan 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 para pengguna yang terdampak. 
+  Anda memperbarui sertifikat Anda. Anda secara tidak sengaja menginstal sertifikat ke komponen-komponen yang salah, yang akhirnya tidak terdeteksi dan berdampak pada pengunjung situs web karena koneksi yang aman ke situs web tidak dapat dibuat. 

 **Manfaat menerapkan praktik terbaik ini:** Pengujian ekstensif selama tahap pra-produksi dalam prosedur deployment serta perubahan-perubahan yang dimunculkannya dapat meminimalkan potensi dampak yang mungkin dapat ditimbulkan terhadap lingkungan produksi yang disebabkan oleh langkah-langkah deployment. Hal ini akan meningkatkan kepercayaan diri selama rilis produksi dan meminimalkan dukungan operasional tanpa memperlambat kecepatan penyampaian perubahan yang hendak dilakukan. 

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

## Panduan implementasi
Panduan implementasi

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

 **Contoh pelanggan** 

 Sebagai bagian dari pipeline continuous integration and continuous delivery (CI/CD), AnyCompany Retail melakukan langkah-langkah yang ditentukan yang diperlukan untuk merilis pembaruan infrastruktur dan perangkat lunak bagi pelanggannya dalam lingkungan seperti produksi. Pipeline tersebut terdiri dari langkah pra-pemeriksaan untuk mendeteksi penyimpangan (mendeteksi perubahan pada sumber daya yang dilakukan di luar IaC Anda) di dalam sumber daya sebelum deployment, serta melakukan validasi terhadap tindakan-tindakan yang dilakukan IaC setelah inisiasi. Tahap ini memvalidasi langkah-langkah deployment, seperti memverifikasi bahwa file dan konfigurasi tertentu sudah siap dan layanan-layanan sudah berada 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, misalnya pengujian fungsional, keamanan, regresi, integrasi, dan beban. 

### Langkah-langkah implementasi
Langkah-langkah implementasi

1.  Lakukan pemeriksaan pra-instalasi untuk mencerminkan lingkungan pra-produksi ke lingkungan produksi. 

   1.  Gunakan [deteksi drift](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html) untuk mendeteksi kapan 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 cocok dengan tindakan yang CloudFormation dilakukan saat set perubahan dimulai. 

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

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

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

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

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

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

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

 **Tingkat upaya untuk rencana implementasi:** Tinggi 

## Sumber daya
Sumber daya

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

 **Dokumen terkait:** 
+ [AWS Perpustakaan Pembangun \$1 Mengotomatiskan penerapan yang aman dan lepas tangan \$1 Uji Penerapan](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/#Test_deployments_in_pre-production_environments)
+ [AWS Whitepaper \$1 Mempraktikkan Integrasi Berkelanjutan dan Pengiriman Berkelanjutan 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 men-debug AWS CodeDeploy secara lokal sebelum Anda 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 Menyebarkan dan ECS layanan Amazon dengan tes validasi](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-ecs-deployment-with-hooks.html)

# OPS06-BP03 Menggunakan strategi deployment yang aman
OPS06-BP03 Menggunakan strategi deployment yang aman

 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-mekanisme inspeksi untuk memvalidasi hasil yang diinginkan dan membatasi ruang lingkup dampak yang ditimbulkan oleh cacat apa pun yang disebabkan oleh perubahan atau kegagalan deployment. Peluncuran yang aman dapat mencakup strategi seperti feature-flag, one-box, rolling (rilis canary), immutable, pemisahan lalu lintas, dan deployment blue/green. 

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

 **Anti-pola umum:** 
+  Anda melakukan deployment perubahan yang tidak berhasil ke seluruh lingkungan produksi secara sekaligus. Akibatnya, semua pelanggan merasakan dampaknya secara bersamaan. 
+  Cacat akibat deployment serentak yang dilakukan ke semua sistem memerlukan rilis darurat. Diperlukan waktu beberapa hari untuk memperbaikinya untuk semua pelanggan. 
+  Untuk mengelola rilis produksi diperlukan perencanaan dan partisipasi dari beberapa tim. Hal ini akan menghambat kemampuan Anda untuk melakukan pembaruan fitur bagi pelanggan Anda dalam rentang waktu yang berdekatan (frequent). 
+  Anda melakukan deployment yang dapat diubah dengan melakukan modifikasi terhadap sistem yang sudah ada. Setelah mengetahui bahwa perubahan yang di-deploy tidak berhasil, Anda terpaksa melakukan modifikasi terhadap sistem sekali lagi untuk memulihkan versi yang sebelumnya, dan hal ini memperpanjang waktu pemulihan Anda. 

 **Manfaat menerapkan praktik terbaik ini:** Deployment otomatis menyeimbangkan kecepatan peluncuran (roll-out) dengan menghadirkan perubahan yang bermanfaat secara konsisten kepada para pelanggan. Pembatasan dampak dapat mencegah kegagalan deployment yang mahal dan memaksimalkan kemampuan tim untuk merespons kegagalan tersebut dengan efisien. 

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

## Panduan implementasi
Panduan implementasi

 Kegagalan pengiriman yang terjadi secara 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-kesalahan deployment, dengan tujuan untuk mencapai nol kegagalan deployment. 

 **Contoh pelanggan** 

 AnyCompany Retail memiliki misi untuk mencapai deployment dengan waktu henti yang minim hingga nol, yang berarti pengguna sama sekali tidak ada merasakan dampak selama deployment. Untuk mencapai tujuan tersebut, perusahaan telah membuat pola-pola deployment (lihat diagram alur kerja berikut), seperti deployment blue/green dan deployment 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/latest/framework/images/deployment-process-ec2.png)  |  ![\[Alur proses deployment untuk Amazon ECS\]](http://docs.aws.amazon.com/id_id/wellarchitected/latest/framework/images/deployment-process-ecs.png)  |  ![\[Alur proses deployment untuk Amazon Lambda\]](http://docs.aws.amazon.com/id_id/wellarchitected/latest/framework/images/deployment-process-lambda.png)  | 

### Langkah-langkah implementasi
Langkah-langkah implementasi

1.  Gunakan alur kerja persetujuan untuk memulai urutan langkah-langkah peluncuran (roll-out) produksi setelah promosi ke produksi. 

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

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

1.  Gunakan deployment blue/gree 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) dengan menggunakan Amazon CloudWatch, AWS CloudTrail dan pemberitahuan acara Amazon Simple Notiﬁcation Service (Amazon SNS). 

1.  Lakukan pengujian otomatis pasca-deployment, antara lain pengujian fungsional, keamanan, regresi, integrasi, dan uji beban. 

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

 **Tingkat upaya untuk rencana implementasi:** Sedang 

## Sumber daya
Sumber daya

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

 **Dokumen terkait:** 
+ [Pustaka Builder AWS \$1 Melakukan otomatisasi deployment secara aman dan otonom \$1 Deployment produksi ](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/?did=ba_card&trk=ba_card#Production_deployments)
+ [AWS Pustaka Builder \$1 Pipeline CI/CD saya adalah pemandu utama 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)
+ [Bekerja dengan konfigurasi deployment di AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)
+ [Siapkan deployment rilis canary API Gateway ](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html)
+ [Tipe Deployment Amazon ECS](https://docs.aws.amazon.com/)
+ [Deployment Blue/Green yang Dikelola Sepenuhnya 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.workshops.aws/cdk-cicd-for-lambda-canary-deployment/en-US) 
+ [ Lokakarya \$1 Membangun pipeline Biru/Hijau DevOps pertama Anda dengan Amazon ECS ](https://catalog.us-east-1.prod.workshops.aws/workshops/4b59b9fb-48b6-461c-9377-907b2e33c9df/en-US)
+ [ Lokakarya \$1 Membangun pipeline Biru/Hijau DevOps pertama Anda dengan Amazon EKS ](https://catalog.us-east-1.prod.workshops.aws/workshops/4eab6682-09b2-43e5-93d4-1f58fd6cff6e/en-US)
+ [ Lokakarya \$1 EKS GitOps dengan ArgoCD ](https://catalog.workshops.aws/eksgitops-argocd-githubactions)
+ [ Lokakarya \$1 CI/CD di Lokakarya AWS](https://catalog.workshops.aws/cicdonaws/en-US)
+ [ Mengimplementasikan CI/CD lintas akun dengan AWS SAM untuk fungsi Lambda berbasis kontainer](https://aws.amazon.com/blogs/compute/implementing-cross-account-cicd-with-aws-sam-for-container-based-lambda/)

# OPS06-BP04 Mengotomatiskan pengujian dan rollback
OPS06-BP04 Mengotomatiskan pengujian dan rollback

 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-strategi pengujian dan rollback otomatis Anda diintegrasikan ke dalam pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) Anda. Pemantauan Anda dapat melakukan validasi berdasarkan kriteria keberhasilan Anda dan memulai rollback otomatis setelah terjadi kegagalan. Hal ini akan meminimalkan dampak apa pun yang terjadi 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-kasus pengujian yang sama. Jika hasil pengujian regresi yang didapatkan tidak sesuai dengan harapan, maka rollback otomatis akan dimulai dalam alur kerja pipeline. 

 **Anti-pola 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-langkah manual. Setelah melakukan deployment perubahan ke beban kerja, Anda mulai melakukan pengujian pasca-deployment. Setelah pengujian selesai, 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 dapat menghambat pemulihan sistem secara keseluruhan dan akan menyebabkan dampak yang berkepanjangan terhadap pelanggan Anda. 
+  Anda menghabiskan waktu mengembangkan kasus-kasus pengujian otomatis untuk fungsionalitas yang jarang digunakan dalam aplikasi Anda, sehingga memperkecil laba atas investasi (roi) dalam kemampuan pengujian otomatis Anda. 
+  Rilis Anda terdiri dari aplikasi, infrastruktur, patch, dan pembaruan konfigurasi yang tidak bergantung satu sama lain. Namun demikian, Anda memiliki satu pipeline CI/CD yang mengirimkan semua perubahan dalam satu waktu sekaligus. Kegagalan yang terjadi pada satu komponen memaksa Anda untuk mengembalikan semua perubahan, dan membuat rollback Anda menjadi kompleks dan tidak efisien. 
+  Tim Anda menyelesaikan tugas-tugas coding dalam sprint one dan memulai tugas sprint two, tetapi rencana Anda tidak menyertakan pengujian sampai sprint three. Akibatnya, pengujian-pengujian otomatis mengungkap cacat dari sprint one yang harus diselesaikan sebelum pengujian hasil kerja sprint two 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 mengenai apakah layanan telah dimulai ulang atau belum, Anda menjadi tidak yakin apakah rollback diperlukan atau rollback sudah terjadi. 

 **Manfaat menerapkan praktik terbaik ini:** Pengujian otomatis meningkatkan transparansi proses pengujian Anda dan kemampuan Anda untuk mencakup lebih banyak fitur dalam satu periode waktu yang lebih singkat. Dengan melakukan pengujian dan validasi terhadap perubahan-perubahan dalam produksi, Anda dapat mengidentifikasi masalah dengan cepat. Peningkatan konsistensi dengan alat-alat pengujian otomatis memungkinkan deteksi kecacatan yang lebih baik. Dengan melakukan rollback otomatis ke versi sebelumnya, dampak-dampak yang ditimbulkan terhadap para pelanggan diminimalkan. Rollback otomatis pada akhirnya akan memunculkan keyakinan yang lebih tinggi pada kemampuan deployment Anda dengan mengurangi dampak bisnis. Secara keseluruhan, kemampuan ini berkurang time-to-delivery sambil memastikan kualitas. 

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

## Panduan implementasi
Panduan implementasi

 Lakukan otomatisasi terhadap pengujian lingkungan yang di-deploy untuk mengonfirmasi hasil-hasil yang diinginkan dengan lebih cepat. Lakukan otomatisasi terhadap rollback 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-proses yang dilakukan secara manual. Integrasikan alat-alat pengujian dengan alur kerja pipeline Anda untuk menguji dan meminimalkan input manual secara konsisten. Prioritaskan otomatisasi kasus pengujian, seperti kasus pengujian yang memitigasi risiko terbesar dan kasus pengujian yang harus sering diuji dengan setiap perubahan. Selain itu, otomatiskan rollback berdasarkan kondisi tertentu yang telah ditentukan sebelumnya di awal dalam rencana pengujian Anda. 

### Langkah-langkah implementasi
Langkah-langkah implementasi

1.  Bangun sebuah siklus hidup 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.  Buatlah sebuah pendekatan pengujian khusus beban kerja dari strategi pengujian Anda secara keseluruhan. 

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

1.  Pilih alat-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 pertanggungjawabannya untuk melakukan pengujian manual. 

   1.  Terapkan kemampuan-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 mengalami kegagalan. 

   1.  Tentukan kriteria kegagalan khusus untuk melakukan 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 alat-alat pengujian otomatis dan rollback Anda ke dalam pipeline CI/CD Anda. 

   1.  Kembangkan kriteria keberhasilan yang jelas untuk perubahan Anda. 

   1.  Lakukan pemantauan dan pengamatan untuk mendeteksi kriteria-kriteria ini dan secara otomatis membatalkan 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 testing) 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-komponen yang saling terkait. 

1.  Lakukan pemantauan pada 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 diinvokasi. 

   1.  Terapkan sebuah strategi yang dapat 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
Sumber daya

 **Praktik-praktik terbaik terkait:** 
+  [OPS06-BP01 Rencana untuk perubahan yang gagal](ops_mit_deploy_risks_plan_for_unsucessful_changes.md) 
+  [OPS06-BP02 Uji penerapan](ops_mit_deploy_risks_test_val_chg.md) 

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

 **Contoh terkait:** 
+ [Pengujian UI tanpa server menggunakan Selenium,, AWS Lambda, dan Alat AWS Fargate Pengembang 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)