コンテナを使ってモノリスを分割する方法をグラレコで解説
Author : 安田 茂樹
本記事では、2019 年 9 月 15 日に AWS Summit Bahrain にて行われたセッションの 1 つである ”Breaking Up the Monolith with Containers (コンテナを使ってモノリスを分割する)” セッションの概要を、グラレコを使って解説します。
※ awsgeek.com は Amazon Web Services, Inc. プリンシパル・テクニカル・エバンジェリスト、ジェリー・ハーグローブが運営しているサイトです。
アプリケーションを開発していると、時間の経過とともに機能がどんどん増えていき、コードが複雑化・巨大化してしまう場合があります。開発チームも増え、他のチームに依存する機能が出てきたり、開発スピードが遅れたりしていきます。
この課題を解決する方法の 1 つが、マイクロサービス化です。
単一の巨大なアプリケーション (モノリス) を独立した個別の小さなサービス (マイクロサービス) に分割することで、各サービスをそれぞれの担当チームが独立して設計・管理することができるようになります。
なお、各担当チームの人数に関し、Amazon/AWS では創業者のジェフ・ベゾスが提唱する Two-Pizza Team (ピザ 2 枚分の小規模チーム) というルールがあります。「各チームの人数は、ピザ 2 枚を分けられる人数を超えてはならない」というルールです。チームの人数が多すぎると、意思決定が遅れたり、効率的に動けなくなったりすることからこのようなルールが提唱されています。ルールに具体的なチームの人数は定められていませんが、1 人あたりピザ 4 分の 1 枚を食べると計算すると、各チームの最大人数は 8 名までとなります。
注意点として、モノリスの持つ機能を全て一度にマイクロサービスへ分割・移行するのは、費用対効果や、人員リソースの観点から現実的ではない場合があります。数ある機能の中から、まずは変更が頻繁に行われる機能を中心に徐々にマイクロサービスへ移行することで、マイクロサービスの特徴である「変更による影響範囲の局所化」のメリットを活かすことができます。
なお、マイクロサービスに利用可能な AWS のコンピューティング環境としては
- Amazon EC2
- コンテナ
- AWS Lambda
が挙げられます。
今回は、上記の中から「コンテナ」を利用する場合について見ていきます。
こちらの図が示すように、AWS の提供するコンテナサービスには、機能別に
- コンテナを管理するサービス : Amazon ECS または Amazon EKS
- コンテナをホスティングするサービス : Amazon EC2 または AWS Fargate
があります。通常は、1. と 2. の両方を組み合わせて使用します。
1. コンテナを管理するサービスとは、コンテナの状態をチェックし、設定に応じてスケールしたり、正常でないコンテナを正常なものと置き換えたりするサービスのことです。以下のうち、いずれかを選択します。
- ECS – AWS が独自に開発したコンテナ管理サービスです。
- EKS – コンテナ管理用オープンソースソフトウェアである Kubernetes のマネージドサービスです。既に Kubernetes を利用しており、引き続き AWS において Kubernetes でコンテナを管理したい場合はこちらを選択します。
2. コンテナをホスティングするサービスとは、実際にお客様のコンテナの実行場所となるサービスのことです。
以下のうち、いずれかを選択します。
- EC2 – Amazon Elastic Compute Cloud (Amazon EC2) の略。コンテナを EC2 インスタンスで動かす場合はこちらを選択します。ワークロードで必要になる CPU / メモリや、ソフトウェア構成を自身で設定・管理します。 Amazon Machine Image (AMI) を利用可能です。
- Fargate – AWS Fargate の略。コンテナ向けの専用サーバーレスコンピューティングエンジンです。フルマネージド型サービスのため、コンテナが動作するホストのセキュリティパッチ適用などの運用は AWS が行います。
また、モノリスを複数のマイクロサービスに分割し、コンテナ化することで得られる主なメリットとしては、以下のものが挙げられます。
- 必要に応じスケールする事によるコストの削減
- チームに最適なツール類の利用
- コンテナコミュニティのナレッジ・ツールの活用
- アプリケーション開発の俊敏性の向上
- マイクロサービス間の分離によるセキュリティの向上
続いて、分割されたサービス同士がどの様に通信するのかをアプリケーションレベルでみていきましょう。
コンテナ化された各マイクロサービス間の通信をプロキシ経由で行うことで、全トラフィックの監視・ルーティング制御が行えるようになり、可観測性 (Observability) の向上に役立ちます。
フルマネージド型サービスの AWS App Mesh を使うことで、Envoy (オープンソースのプロキシソフトウェア) を使用したサイドカー型プロキシを実装できます。
最後に、全体の図を見てみましょう。
今回は「コンテナを使ってモノリスを分割する」方法の概要をご紹介しましたが、アプリケーションによっては、そもそもモノリスをマイクロサービスへ分割することが最善の方法ではない場合もあります。適切に分割することが難しかったり、マイクロサービス化によって生じる複雑性への対応がビジネス的に対価に見合わなかったりする場合もあるためです。そのため、あくまでケースバイケースで必要性をご検討頂ければ幸いです。
また、今回ご紹介した AWS のコンテナサービスの詳細に関しましては、こちらをご覧ください。
AWS グラレコ解説のその他の記事はこちら
- 選択
- 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
- サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
- 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
- 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
- AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
- コンテナを使ってモノリスを分割する方法をグラレコで解説 »
- クラウドへ移行する理由とそのステップをグラレコで解説 »
- Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
- サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
- サーバーレスで SaaS を構築する方法をグラレコで解説 »
- 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
- クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
- 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
- アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
- わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
- 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
- Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
- 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
- ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
- 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
- カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
- GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
- IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
- 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
- サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
- データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
- 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説
- リレーショナルデータベースを簡単・迅速に実現。Amazon RDS をグラレコで解説
- アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
- データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
- アプリケーションへのトラフィックを効率的に負荷分散。Application Load Balancer をグラレコで解説
- AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説
- 大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説
- キャッシュ機能でアプリの高速化を実現 ! Amazon ElastiCache をグラレコで解説
- 使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説
- ストリーミングデータを簡単にキャプチャ、処理、保存 ! Amazon Kinesis Data Streams をグラレコで解説
- AWS で始める機械学習はじめの一歩 ! AWS の主要な AI/ML サービスをグラレコで解説
- リレーショナルデータベースをサーバーレス化 ! Amazon Aurora Serverless をグラレコで解説
- ML 駆動の検索エンジンで企業の情報管理を革新! Amazon Kendra をグラレコで解説
- オンプレミス、エッジ、どこでも楽々コンテナ管理 ! Amazon EKS Anywhere をグラレコで解説
- 生成 AI アプリケーション開発をもっと身近に、簡単に ! Amazon Bedrock をグラレコで解説
- わずか数クリックで多様な脅威を監視しクラウドを保護 ! 脅威検出サービス Amazon GuardDuty をグラレコで解説
- データの改ざん耐性と変更履歴の検証可能性を実現 ! 台帳データベース Amazon QLDB をグラレコで解説
- 生成 AI x クラウドがもたらす次世代のイノベーション ! AWS Summit Japan Day 1 基調講演をグラレコで解説
- ビジネス向け生成 AI アシスタント Amazon Q Business をグラレコで解説
- 生成 AI コーディングアシスタント Amazon Q Developer をグラレコで解説
- フロントエンドとバックエンドを統合開発 ! フルスタック TypeScript 開発環境 AWS Amplify Gen 2 をグラレコで解説
筆者紹介
安田 茂樹
アマゾン ウェブ サービス ジャパン合同会社
テクニカルコンテンツマネージャー
2014 年にアマゾンジャパン合同会社に入社後、デバイス試験部門にて発売前の数多くの Amazon デバイスの試験に携わる。2019 年より現職。
趣味は新しいガジェットを試すこと、旅行、食べ歩き。
AWS を無料でお試しいただけます