

# OPS06-BP03 安全なデプロイ戦略を使用する
<a name="ops_mit_deploy_risks_deploy_mgmt_sys"></a>

 安全な本番環境のロールアウトでは、変化による顧客への影響を最小限に抑えることを目的として、有益な変化の流れを管理します。安全管理は、期待される結果を検証し、変更やデプロイの失敗によって生じた不具合による影響の範囲を制限するための検査メカニズムを提供します。安全なロールアウトには、機能フラグ、ワンボックス、ローリング (canary リリース)、イミュータブル、トラフィック分割、ブルー/グリーンデプロイなどの戦略が含まれる場合があります。

 **期待される成果:** 組織は、安全なロールアウトを自動化する機能を備えた継続的インテグレーションと継続的デリバリー (CI/CD) システムを使用します。チームは適切な安全なロールアウト戦略を使用する必要があります。

 **一般的なアンチパターン:** 
+  あなたは、失敗した変更を一度にすべての本稼働環境にデプロイします。その結果、すべての顧客に一斉に影響が及びます。
+  全システムへの同時デプロイで生じた不具合により、緊急リリースが必要となります。すべての顧客への影響を修正するには数日かかります。
+  本番リリースを管理するために、複数のチームの計画と参加が必要です。これにより、顧客のために頻繁に機能を更新する能力が制限されます。
+  あなたは、既存のシステムを変更することにより、変更可能なデプロイを実行します。変更の失敗が判明した後、あなたは、システムを再度変更して古いバージョンを復元することを強いられ、これにより復旧にかかる時間が長くなります。

 **このベストプラクティスを活用するメリット:** 自動デプロイにより、ロールアウトの速度と、顧客に一貫して有益な変更を提供することのバランスを取ることができます。影響を制限することで、コストのかかるデプロイの失敗を防ぎ、チームが失敗に効率的に対応する能力を最大限に高めることができます。

 **このベストプラクティスを活用しない場合のリスクレベル:** 中 

## 実装のガイダンス
<a name="implementation-guidance"></a>

 継続的デリバリーの失敗は、サービス可用性の低下と、カスタマーエクスペリエンスの低下につながる可能性があります。デプロイの成功率を最大化するには、デプロイの失敗ゼロを目標に、エンドツーエンドのリリースプロセスに安全管理を実装してデプロイエラーを最小限に抑えます。

 **お客様事例** 

 AnyCompany Retail は、ダウンタイムを最小限またはゼロにすることを目指しています。これは、デプロイ中に認識されるユーザーへの影響がまったくないことを意味します。これを実現するために、同社はローリングデプロイやブルー/グリーンデプロイなどのデプロイパターン (次のワークフロー図を参照) を確立しました。すべてのチームが、CI/CD パイプラインでこれらのパターンを 1 つ以上採用しています。


| Amazon EC2 の CodeDeploy ワークフロー | Amazon ECS の CodeDeploy ワークフロー | Lambda の CodeDeploy ワークフロー | 
| --- | --- | --- | 
|  ![\[Amazon EC2 のデプロイプロセスフロー\]](http://docs.aws.amazon.com/ja_jp/wellarchitected/2024-06-27/framework/images/deployment-process-ec2.png)  |  ![\[Amazon ECS のデプロイプロセスフロー\]](http://docs.aws.amazon.com/ja_jp/wellarchitected/2024-06-27/framework/images/deployment-process-ecs.png)  |  ![\[Lambda のデプロイプロセスフロー\]](http://docs.aws.amazon.com/ja_jp/wellarchitected/2024-06-27/framework/images/deployment-process-lambda.png)  | 

### 実装手順
<a name="implementation-steps"></a>

1.  承認ワークフローを使用して、本番環境に移行する際に、一連の本番環境のロールアウト手順を開始します。

1.  [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) などの自動デプロイシステムを使用します。AWS CodeDeploy [デプロイオプション](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps.html)には、EC2/オンプレミス向けのインプレースデプロイと、EC2/オンプレミス向けのブルー/グリーンデプロイ、AWS Lambda、Amazon ECS が含まれています (上のワークフロー図を参照)。

   1.  該当する場合は、[AWS CodeDeploy を他の AWS サービスと統合](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-aws.html)するか、[AWS CodeDeploy をパートナー製品およびサービスと統合](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-partners.html)します。

1.  [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) や [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) などのデータベースには、ブルー/グリーンデプロイを使用します。

1.  Amazon CloudWatch、AWS CloudTrail、Amazon Simple Notiﬁcation Service (Amazon SNS) イベント通知を使用して[デプロイをモニタリングします](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html)。

1.  機能テスト、セキュリティテスト、リグレッションテスト、統合テスト、負荷テストなど、デプロイ後の自動テストを実行します。

1.  デプロイ問題を[トラブルシューティング](https://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html)します。

 **実装計画に必要な工数レベル:** 中 

## リソース
<a name="resources"></a>

 **関連するベストプラクティス:** 
+  [OPS05-BP02 変更をテストし、検証する](ops_dev_integ_test_val_chg.md) 
+  [OPS05-BP09 小規模かつ可逆的な変更を頻繁に行う](ops_dev_integ_freq_sm_rev_chg.md) 
+  [OPS05-BP10 統合とデプロイを完全自動化する](ops_dev_integ_auto_integ_deploy.md) 

 **関連ドキュメント:** 
+ [AWS Builders' Library \$1 安全なハンズオフデプロイメントの自動化 \$1 本番デプロイメント](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/?did=ba_card&trk=ba_card#Production_deployments)
+ [AWS Builders Library \$1 CI/CD パイプラインがリリースキャプテンに \$1 安全かつ自動の本番リリース](https://aws.amazon.com//builders-library/cicd-pipeline/#Safe.2C_automatic_production_releases)
+ [AWS ホワイトペーパー \$1 AWS での継続的インテグレーションと継続的デリバリーの実践 \$1 デプロイ方法](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/deployment-methods.html)
+ [AWS CodeDeploy ユーザーガイド](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)
+ [AWS CodeDeploy でのデプロイ設定の使用](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)
+ [API Gateway の Canary リリースデプロイの設定](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html)
+ [Amazon ECS デプロイタイプ](https://docs.aws.amazon.com/)
+ [新機能 – Amazon Aurora と Amazon RDS でのフルマネージド型 Blue/Green Deployments](https://aws.amazon.com/blogs/aws/new-fully-managed-blue-green-deployments-in-amazon-aurora-and-amazon-rds/)
+ [AWS Elastic Beanstalk を使用したブルー/グリーンデプロイ](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html)

 **関連動画:** 
+ [re:Invent 2020 \$1 Hands-off: Automating continuous delivery pipelines at Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY)
+ [re:Invent 2019 \$1 Amazon's Approach to high-availability deployment](https://www.youtube.com/watch?v=bCgD2bX1LI4)

 **関連する例:** 
+ [AWS CodeDeploy でブルー/グリーンデプロイのサンプルを試す](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html)
+ [ワークショップ \$1 AWS CDK を使用した Lambda カナリアデプロイのための CI/CD パイプラインの構築](https://catalog.workshops.aws/cdk-cicd-for-lambda-canary-deployment/en-US) 
+ [ワークショップ \$1 Amazon ECS で初めての DevOps ブルー/グリーンパイプラインを構築](https://catalog.us-east-1.prod.workshops.aws/workshops/4b59b9fb-48b6-461c-9377-907b2e33c9df/en-US)
+ [ワークショップ \$1 Amazon EKS で初めての DevOps ブルー/グリーンパイプラインを構築](https://catalog.us-east-1.prod.workshops.aws/workshops/4eab6682-09b2-43e5-93d4-1f58fd6cff6e/en-US)
+ [ワークショップ \$1 ArgoCD を使用した EKS GitOps](https://catalog.workshops.aws/eksgitops-argocd-githubactions)
+ [ワークショップ \$1 AWS ワークショップの CI/CD](https://catalog.workshops.aws/cicdonaws/en-US)
+ [コンテナベースの Lambda 関数向けに AWS SAM でクロスアカウント CI/CD を実装](https://aws.amazon.com/blogs/compute/implementing-cross-account-cicd-with-aws-sam-for-container-based-lambda/)