Amazon Web Services ブログ

AWS App Mesh – クラウドアプリケーション向けのアプリケーションレベルネットワーキング

AWS App Mesh は、HTTP および TCP サービスの実行を広範囲で支援します。これにより、トラフィックのルーティングと監視に一貫性のある方法が提供され、問題の内容を把握し、障害やコード変更の後にトラフィックをリルートすることが可能になります。App Mesh は、オープンソースの Envoy プロキシを使用します。AWS のパートナーやオープンソースコミュニティが提供する多くのツールと連携できます。

このサービスは、AWS FargateAmazon EC2Amazon ECSAmazon Elastic Container Service for KubernetesKubernetes などの上で実行が可能です。各サービスに出入りするトラフィックは、全て Envoy プロキシを通過するので、ルーティング、帯域制限、測定、記録などが行えます。この追加された間接レベルにより、共通コミュニケーションライブラリの必要もなしで、お望みのあらゆる言語でサービスを構築することもできます。

App Mesh のコンセプト
早速取りかかる前に、まず、重要な App Mesh のコンセプトやコンポーネントのいくつかについて確認しておきましょう。

サービスメッシュ – 隣り合うサービス間にあるトラフィックの論理的な境界線。1 つのメッシュには、仮想サービス、仮想ノード、仮想ルーター、ルートなどが含まれています。

仮想サービス – 仮想ノード にが直接的に、あるいは、仮想ルーターにが間接的に与える、サービスの抽象型 (論理名)。メッシュ内にあるサービスは、他のサービスを論理名によって参照および利用します。

仮想ノード – タスクグループ (ECS サービスもしくは Kubernetes デプロイメント) 、または、1 つか複数の EC2 インスタンスの上で実行されるサービスへのポインタ。各仮想ノードは、リスナーを経由して入って来るトラフィックを受け付け、バックエンドを通じ他の仮想ノードへ接続します。加えて、各ノードには、サービスディスカバリー設定 (現状では DNS ネーム) があり、他のノードがタスクの IP アドレス、ポッド、インスタンスなどをみつけられるようになっています。

仮想ルーター – メッシュ内にある 1 つもしくは複数の仮想サービス用のハンドラー。各仮想ルーターは、特定ポート上の HTTP トラフィックを監視します。

ルート – ルートは、オプションでノードごとに重み付けが可能なプレフィックスベースの URL マッチングにより、トラフィックを仮想ノードにルーティングします。この重みは、新しいバージョンのサービスを作成中に、ハンドリングすべきトラフィックが徐々に増加する段階での、テストのために使えます。

これらが一体となって、各メッシュには、ルートにより指定された URL パスでアクセス可能なサービスのセットが含まれています。メッシュ内では、各サービスはお互いを名前で参照します。

App Mesh には、App Mesh Console、App Mesh CLI、App Mesh API などからアクセスが可能です。App Mesh Console の使い方と、App Mesh CLI の概略について見てましょう。

App Mesh Console の使用方法
このコンソールからは、コンポーネントを内蔵したサービスメッシュを作成することができます。まず、[App Mesh Console] を開き [Get started] をクリックします。

自分のメッシュ名と最初の仮想サービスにつける名前 (後で追加が可能) を入力し、[Next] をクリックします。

最初の仮想ノードを定義します。

サービスバックエンド (ここから呼び出せる他のサービス) とロギングを指定するため、[Additional configuration] をクリックします。

このノードのリスナーを、プロトコル (HTTP または TCP) とポートにより定義し、オプションのヘルスチェックを設定した後、[Next] をクリックします。

次に、最初の仮想ルーターとルートを定義します。

トラフィックは、パーセンテージを指定することで、いくつかの仮想ノード (ターゲット) に分散することが可能です。また、入ってくるトラフィックには、プレフィックスベースのルーティングを適用できます。

ここまでの設定を再確認し、[Create mesh service] をクリックします。

このコンポーネントは数秒間で作成され、殆どの設定はこれで終わりです。

App Mesh Getting Started Guide」にある通り、最後のステップとして、タスク定義 (Amazon ECS あるいは AWS Fargate)、あるいはポッドの仕様 (Amazon EKS あるいは Kubernetes) を更新し、Envoy コンテナイメージとプロキシコンテナイメージを参照できるようにします。EC2 インスタンスでサービスを実行している場合は、そちらで Envoy をデプロイする必要があります。

AWS App Mesh Command Line の使用方法
App Mesh では、各タイプのコンポーネントを、シンプルな JSON 形式で設定できます。また、コマンドラインツール により、各コンポーネントを作成 (create-meshcreate-virtual-servicecreate-virtual-nodecreate-virtual-router) する事ができます。たとえば、ファイル内の仮想ルーターの定義は以下のようになります。

{
  "meshName": "mymesh",
  "spec": {
        "listeners": [
            {
                "portMapping": {
                    "port": 80,
                    "protocol": "http"
                }
            }
        ]
    },
  "virtualRouterName": "serviceA"
}

これは、1 行のコマンドで作成できます。

$ aws appmesh create-virtual-router --cli-input-json file://serviceA-router.json

今すぐ利用可能
AWS App Meshは、以下のリージョンで今日すぐに使いはじめる事ができます。米国東部 (バージニア北部)米国東部 (オハイオ)米国西部 (オレゴン)米国西部 (北カリフォルニア)カナダ (中部)欧州 (アイルランド)欧州 (フランクフルト)欧州 (ロンドン)アジアパシフィック (ムンバイ)アジアパシフィック (東京)アジアパシフィック (シドニー)アジアパシフィック (シンガポール)アジアパシフィック (ソウル)

Jeff;