EC2からECSへのコンテナ化移行プロジェクト
お客様の情報
- •業界:不動産
- •企業規模:従業員数 50-100名
- •事業内容:法人向け不動産ポータルサイト運営
プロジェクト概要
- •プロジェクト期間:3ヶ月
- •弊社側の体制:PM 1名、エンジニア 1名
- •開発スタイル:ウォーターフォール
- •予算規模:500万円
- •担当フェーズ:プロジェクトマネジメント、インフラ設計、移行計画、実装、運用改善
CodeCiaoの役割
- •システム部門からの依頼を受け、プロジェクトマネジメントからインフラ設計、移行計画、実装、運用改善まで一気通貫で支援
- •既存アプリケーションの詳細な把握と移行要件の整理のため、システム担当者と週1-2回の定例会議を設け、緊密な連携のもとプロジェクトを推進
- •移行影響と必要な顧客周知事項を体系的にドキュメント化し、営業部門と顧客コミュニケーションプランを策定
ご相談の背景
- EC2インスタンスの運用管理コストの増大
- スケーリングの手動対応による機会損失
- デプロイ時のダウンタイムによる売上影響
- 環境差異による不具合の頻発
- インフラコストの最適化要求
取り組みの結果
- 運用工数を月間40時間削減
- デプロイ時間を30分から5分に短縮
- 自動スケーリングによるピーク対応の実現
- インフラコストを30%削減
- 本番環境との差異をゼロに
移行プロセスの詳細
1. 導入背景と課題認識
従来のEC2環境では、以下の課題が顕在化していました。
- ▪️高いメンテナンス負荷:
OSアップデートやセキュリティパッチの適用が手動で行われ、毎月数十時間の工数が必要でした。 - ▪️俗人化リスク:
特定の担当者に依存した運用体制のため、担当者不在時の対応が困難でした。 - ▪️リリース作業の非効率性:
手動アップロードに起因するヒューマンエラーやダウンタイムが懸念されていました。
2. 導入ソリューションと技術的詳細
2.1 Amazon ECSへの移行による基盤刷新
- ▪️
自動化されたOS・セキュリティ管理:
ECS環境では、Amazon側がOSのパッチ適用やセキュリティ更新を自動で実施する責任共有モデルを採用。
運用担当者は、コンテナ内部のアプリケーションロジックおよび専用のセキュリティ設定(例えば、脆弱性スキャンやランタイムセキュリティ監視)に専念できるようになりました。 - ▪️
一貫性のあるコンテナ化:
DockerイメージをAmazon ECRに登録し、各環境で同一のイメージを使用することで、環境間の整合性を確保。
タスク定義では、最低100%のヘルシー状態を維持しながら、新旧タスクを連携させる設定を導入しました。
2.2 CI/CDパイプラインの自動化とデプロイ戦略
- ▪️
CodePipelineによる自動化:
ソースコード変更をトリガーに、CodeBuildでのビルド、テスト、デプロイまでを一括自動化。
各ステージでステージング環境での動作確認や自動テストを実施し、問題がなければ手動承認を経由して本番環境へデプロイするフローを確立しました。 - ▪️
デプロイ方式の具体化:
- ▪️ローリングアップデート方式:
ECSのローリングアップデートにより、更新時に既存タスクを新規タスクへ段階的に置換。
具体的には、更新プロセス中に「minimumHealthyPercent」を100%に設定し、既存タスクが停止する前に新規タスクが完全に起動・ヘルスチェックに合格することを保証しました。 - ▪️ブルーグリーンデプロイ方式との比較・ハイブリッドアプローチ:
重要なサービス更新時には、CodeDeployを利用したブルーグリーンデプロイを実施。
新旧タスクを一時的に並行運用し、ヘルスチェックが一定期間安定した後にトラフィックを完全に新規タスクへ切り替える仕組みを導入。
このハイブリッド構成により、通常はローリングアップデート方式で安定運用しつつ、万一の場合には迅速なロールバックが可能となりました。
- ▪️ローリングアップデート方式:
- ▪️
自動セキュリティ検証の実装:
CI/CDパイプライン内にDockleなどのツールを組み込み、Dockerfileのベストプラクティスやセキュリティ設定を自動検証.
これにより、リリース前にコンテナイメージの脆弱性を早期に発見・修正しました.
2.3 移行後のコンテナセキュリティ対策
- ▪️
自動脆弱性スキャン:
移行後は、Amazon ECRにおけるMyCRの自動脆弱性スキャン機能を活用し、各コンテナイメージに対して定期的な脆弱性チェックを実施。
リリース前に最新の脆弱性情報をもとに、リスクの高いイメージを自動検出し、必要な対策を講じる体制を整えました。 - ▪️
CI/CDパイプライン内でのセキュリティ検証:
CodeBuildなどのCI/CDプロセス内に、Dockleなどのオープンソースツールを組み込み、Dockerfileのベストプラクティスやセキュリティ設定を自動検証。
開発初期段階でコンテナイメージの脆弱性や設定ミスを早期に検出し、修正することで、リリース時のセキュリティリスクを大幅に低減しました。
2.4 移行プロセスの徹底した検証と段階的展開
- ▪️
事前評価と試験運用:
小規模なテスト環境で、ECSの動作確認、CI/CDパイプラインの自動化、デプロイ方式(ローリングアップデートとブルーグリーン方式)の比較検証を実施。
各種ヘルスチェック設定や、タスク起動時のグレースピリオド(例:初回起動時のヘルスチェック失敗を許容する300秒の猶予設定)など、実運用を想定した詳細なパラメータ調整を行いました。 - ▪️
段階的移行の実施:
移行初期は、社内向けベータテスト環境としてECS上でサービスを並行稼働。
テスト結果およびユーザーフィードバックを元に、各種パラメータやルーティング設定の微調整を実施後、本番環境への段階的な切り替えを実施。
3. 段階的切り替えプロセス:慎重な移行で安心の運用体制
移行の成功の鍵は、段階的かつ慎重なプロセスにありました。
このプロセスは、以下の4フェーズに分かれています.
- ▪️
環境準備フェーズ
- ▪️EC2(従来環境)とECS(新環境)の両立:
初期段階では、従来のEC2環境を維持しつつ、ECS環境を並行して構築。 両環境で同一サービスを稼働させることで、システム全体の一貫性と信頼性を検証しました。
- ▪️EC2(従来環境)とECS(新環境)の両立:
- ▪️
テスト用ドメインによる内部検証フェーズ
- ▪️専用テストドメインの設定:
社内および一部テストユーザー向けに、テスト用ドメインを設定。 通常のEC2環境へのトラフィックは従来通り維持しながら、テストドメインではECS環境の動作を詳細に確認。 - ▪️検証結果のフィードバック:
テスト期間中に得られたフィードバックをもとに、セキュリティ、パフォーマンス、ヘルスチェックの各パラメータを微調整し、最適な設定を決定しました。
- ▪️専用テストドメインの設定:
- ▪️
段階的トラフィック切り替えフェーズ
- ▪️加重ルーティングによる切り替え:
Amazon Route53の加重ルーティング機能を利用し、初期は主要ユーザー(お客様)のアクセスは従来のEC2環境へ、テストユーザーや内部ユーザーのアクセスはECS環境へ分散。 - ▪️徐々にECS環境へのシフト:
テストが成功した段階で、EC2からECSへのトラフィック比率を徐々に上げ、最終的に全トラフィックをECSへ切り替え。 これにより、移行中の障害リスクを最小限に抑え、万が一の際には迅速にEC2環境へロールバック可能な体制を確立しました。
- ▪️加重ルーティングによる切り替え:
- ▪️
最終確認と運用開始フェーズ
- ▪️最終的な統合検証:
全トラフィックをECS環境に切り替えた後、運用状況の監視とヘルスチェックにより、サービスの安定性を確認。 - ▪️正式な運用移行の完了:
確認が取れた段階で、正式にECS環境への移行完了とし、従来のEC2環境は順次廃止しました。
- ▪️最終的な統合検証:
この段階的切り替えプロセスにより、システムのダウンタイムを最小限に抑え、クライアントにとって非常に信頼性の高い移行を実現しました。
4. 導入後の成果と信頼性の向上
- ▪️運用工数の大幅削減:
自動化されたOSアップデートおよびセキュリティパッチ適用により、従来の手動作業を80%以上削減. - ▪️リリース時のリスク低減:
自動化とハイブリッドなデプロイ戦略により、平均ダウンタイムを従来の半分以下に抑制. - ▪️高い可用性と即時ロールバック体制:
段階的なトラフィック切り替えと常時監視されるヘルスチェックにより、障害発生時にも迅速なロールバックが可能. - ▪️コンテナセキュリティの強化:
自動脆弱性スキャンとCI/CD内でのDockle等による自動検証により、リリース前にセキュリティリスクを迅速に検出し対策を実施. - ▪️セキュリティとコンプライアンスの向上:
Amazonの責任共有モデルと自動セキュリティチェックにより、基盤セキュリティが強化され、業界標準のコンプライアンスを満たす体制を確立.
5. まとめ
本プロジェクトでは、従来のEC2環境が抱えていた運用負荷とリスクを解消するため、Amazon ECSへの移行、CI/CDパイプラインの自動化、さらには自動脆弱性スキャンによるコンテナセキュリティの強化を実施しました.
技術的には、ECSタスクのデプロイ戦略としてローリングアップデート方式を基本とし、必要に応じてCodeDeployを利用したブルーグリーンデプロイも併用することで、サービスの安定性と即時ロールバック体制を実現.
また、Route53の加重ルーティングを利用した段階的な移行により、実運用中のダウンタイムや障害リスクを最小限に抑え、クライアントにとって高い信頼性と安心感を提供するシステム基盤を構築しました。