Amazon Web Services ブログ

AWS App Meshのご紹介 – AWS上のマイクロサービス向けのサービスメッシュ

AWS App Meshは、AWS上のマイクロサービスアプリケーション間の通信を簡単に監視、制御できるサービスメッシュです。 Amazon Elastic Container Service (Amazon ECS)Amazon Elastic Container Service for Kubernetes (Amazon EKS)、Amazon EC2上で稼働するKubernetesで動作するマイクロサービスとあわせてApp Meshを使用できます。

今日からApp Meshはpublic previewとして利用できます。数ヶ月後に、新しい機能とインテグレーションを追加する計画です。

なぜApp Meshなのか?

多くのお客様はマイクロサービスアーキテクチャでアプリケーションを構成しており、アプリケーションを多数の、独立してデプロイされ、操作される多数の別々の小さなソフトウエア群に分割しています。各コンポーネントが需要に応じて個別にスケールすることにより、マイクロサービスはアプリケーションの可用性とスケーラビリティを向上させます。各マイクロサービスはAPIを通じて他のマイクロサービスと相互に作用します。

アプリケーション内にいくつかのマイクロサービスを構築しはじめると、問題を特定し、分離する事が難しくなります。これらは 高いレイテンシー、エラーの割合、アプリケーションに渡ったエラーコードを含みます。アプリケーションがエラー状態な場合や新しいコンテナをデプロイする必要がある場合、動的にネットワークトラフィックをルーティングする方法がありません。

各マイクロサービスにカスタムコードとライブラリを追加し、各マイクロサービスの通信を管理するオープンソースなツールを利用することで、これらの問題に対処します。しかしながら、これらのソリューションはインストールが難しく、複数のチーム間でアップデートしていくのが困難で、可用性と弾力性を管理することは複雑です。AWS App Meshは多数のこれらの困難を解決する新しいアーキテクチャパターンを実装し、一貫性とマイクロサービス間の通信を管理する動的な方法を提供します。

App Meshによって、マイクロサービス間の通信のモニタリングと管理に関するロジックはマイクロサービスのコードの中に実装される代わりに、各マイクロサービスに横付けして動作するproxyとして実装されます。proxyはマイクロサービスに対する全ての入出トラフィックを扱い、全てのマイクロサービスに対する一貫した可視性、通信制御、セキュリティ特性を提供します。

App Meshを使用して、全てのマイクロサービスの接続方法をモデル化します。App Meshは自動的に適切な設定情報を計算し、各マイクロサービスproxyに対して送信します。これによりアプリケーション全体に渡る標準化された可視化と通信制御の簡単な方法を実現します。App MeshはオープンソースproxyのEnvoyを使用します。これにより、マイクロサービスをモニタリングするための幅広いAWSパートナーやオープンソースツールとの互換性があります。

App Meshを使うと複数のAWSやサードパーティツールに可測データを出力することができます。それらのツールにはAmazon CloudWatch、AWS X-Ray、任意のEnvoyと連携するモニタリング・追跡ツールがあります。サービスに対する動的なblue/green カナリアデプロイをできる様に新しい通信制御を設定することができます。

Getting started

2つのサービスからなるサンプルアプリケーションがあります。service Aはインターネットからのトラフィックを受け付け、service Bをいくつかのバックエンドプロセスとして利用します。サービスBとB’の間でトラフィックを動的にルーティングしようとしています。これは、Bの新しいバージョンが導入されて、カナリアとして機能します。

最初に相互に作用しなくてはならない関係があるマイクロサービスのグループのnamespaceであるmeshを作成します。

次に、mesh内でのサービスを表す為の仮想ノードを作ります。仮想ノードはマイクロサービスや指定のマイクロサービスのバージョンを表す事ができます。この例では、service AとBがmeshに参加し、App Meshを使用してservice Bへのトラフィックを管理します。

続いて、必要なEnvoy proxyと、メッシュ内のノードへのマッピングを使用してサービスをデプロイします。

仮想ノードを定義した後で、マイクロサービス間のトラフィックフローを定義することができます。これにより仮想ルータとマイクロサービス間の通信に対するルートが定義されます。

仮想ルータはマイクロサービスに対するトラフィックを扱います。仮想ルータを作成したのちに、トラフィックを適切に流すルートを作成します。これらのルートは、ルートが受け入れる必要がある接続要求、接続先、送信トラフィックの重み付けされた量が含まれます。サービス間のトラフィックの調整に対するこれらの全ての変更は、App Meshによって適切なproxyに動的に計算されて送信され、デプロイを実行します。

仮想ノードAからの既存バージョンのサービスBへの全てのトラフィックと、新しいバージョンB’へのトラフィックの一部を受け入れる仮想ルータを設定しました。

メトリックス、ログ、追跡のエクスポート

全てのマイクロサービスの前段にproxyを置くことに対する1つのメリットは自動的にサービス間の通信に関するメトリックスやログ、追跡を取得できることです。App Meshによりこのデータを簡単に収集し選択したツールにエクポートする事ができます。EnvoyはPrometheusやDatadogの様ないくつかのツールとすでに統合されています。

previewの間に、Amazon CloudWatchとAWS X-Rayの様なAWSサービスのサポートを追加する予定です。さらに多くの統合が計画されています。

利用可能です

AWS App Meshはpublic previewとして利用可能で、バージニア北部、オハイオ、オレゴン、アイルランドリージョンで利用を開始することができます。previewの間に、多くの新しい機能の追加を予定していますし、皆様からのフィードバックをお待ちしています。サンプルやロードマップについては GitHub repositoryを確認してください。

— Nate

この記事は SA 浅野が翻訳しました。原文はこちら