AWS App Mesh のアイコン

AWS App Mesh

マイクロサービス間の通信を制御・監視するサービスメッシュ

何ができるか

AWS App Mesh は、マイクロサービス間のネットワーク通信を一元的に制御・監視するサービスメッシュです。各サービスにサイドカープロキシ (Envoy) を配置し、トラフィックのルーティング、リトライ、タイムアウト、サーキットブレーカーなどの通信制御をアプリケーションコードの変更なしに実現します。ECS、EKS、EC2 上で動作するサービスに対応しています。

どのような場面で使うか

マイクロサービスアーキテクチャでのサービス間通信の可視化、カナリアデプロイ (新バージョンへの段階的なトラフィック移行)、障害時の自動リトライやフォールバック制御などに活用されています。サービス数が増えて通信の管理が複雑になった環境で特に効果を発揮します。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

身近な例え

空港の航空管制塔に例えるとわかりやすいでしょう。多数の飛行機 (マイクロサービス) が空港を行き来する際、管制塔 (App Mesh) がすべての飛行経路 (通信) を把握し、安全なルートを指示します。天候不良 (障害) 時には代替ルートへの誘導 (リトライ・フォールバック) も行い、衝突 (通信障害) を防ぎます。

App Mesh とは

この記事は約 2 分で読めます。 AWS App Mesh は、マイクロサービス間の通信を管理するサービスメッシュです。マイクロサービスアーキテクチャでは、多数の小さなサービスがネットワーク経由で連携します。サービスの数が増えると、通信の制御や障害対応が複雑になります。App Mesh は各サービスの通信を一元管理し、ルーティング、監視、障害対応を統一的に行える仕組みを提供します。

Envoy プロキシによる通信制御

App Mesh は、各サービスの横にサイドカーとして Envoy プロキシを配置します。サービス間の通信はすべてこの Envoy プロキシを経由するため、アプリケーションコードを変更せずに通信制御を追加できます。リトライ回数、タイムアウト時間、ヘルスチェックの設定を App Mesh のコンソールや API から一括管理でき、サービスごとに個別実装する必要がありません。

トラフィックルーティング

App Mesh のルーティング機能を使うと、トラフィックの振り分けを柔軟に制御できます。たとえば、新バージョンのサービスにトラフィックの 10% だけを流すカナリアデプロイや、HTTP ヘッダーの値に基づいて特定のバージョンにルーティングする A/B テストが可能です。問題が発生した場合は、即座にトラフィックを旧バージョンに戻せます。

はじめかた

App Mesh コンソールでメッシュを作成し、仮想サービス、仮想ノード、仮想ルーターを定義します。ECS タスク定義に Envoy サイドカーコンテナを追加し、App Mesh と連携させます。CloudWatch や X-Ray と統合すれば、サービス間通信のメトリクスやトレースを可視化できます。まずは 2-3 個のサービスで小さく始めるのがおすすめです。

Azure・オンプレミスとの比較

Azure の対応サービス Azure Service Fabric / Open Service Mesh (OSM)
オンプレミスでの対応手段 Istio、Linkerd などのオープンソースサービスメッシュ

AWS の優位点

  • ECS、EKS、EC2 の 3 つのコンピュート環境を横断してサービスメッシュを構成でき、異なる実行環境のサービスを統一的に管理できる
  • CloudWatch と X-Ray との統合が標準で提供されており、サービス間通信のメトリクスとトレースを追加設定なしで可視化できる
  • Envoy プロキシの管理を AWS が担当するため、プロキシのバージョン管理やセキュリティパッチ適用の運用負荷が軽減される

注意点

  • App Mesh 自体は無料だが、Envoy サイドカーコンテナの分だけ ECS/EKS のコンピュートリソースが追加で必要になる
  • サービスメッシュの導入は運用の複雑さを増すため、サービス数が少ない段階では過剰な場合がある。まずは通信管理が課題になってから導入を検討すること
  • Envoy プロキシのバージョンは App Mesh が推奨するバージョンを使用すること。互換性のないバージョンでは正常に動作しない場合がある

さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。