仮想ノード - AWS App Mesh

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

仮想ノード

仮想ノードは、Amazon ECS サービスや Kubernetes デプロイメントなどの特定のタスクグループへの論理ポインタとして機能します。仮想ノードを作成するときには、タスクグループのサービス検出メソッドを指定する必要があります。仮想ノードが期待するインバウンドトラフィックはすべて、リスナーとして指定されます。仮想ノードがアウトバウンドトラフィックを送信する仮想サービスは、バックエンドとして指定されます。

新しい仮想ノードのレスポンスメタデータには、仮想ノードに関連付けられている Amazon リソースネーム (ARN) が含まれています。この値を、Amazon ECS タスク定義または Kubernetes ポッド仕様のタスクグループの Envoy プロキシコンテナの APPMESH_RESOURCE_ARN 環境変数として設定します。例えば、値は arn:aws:appmesh:us-west-2:111122223333:mesh/myMesh/virtualNode/myVirtualNode になる可能性があります。これは、node.id および node.cluster Envoy パラメータにマッピングされます。これらの変数を設定するときは、Envoy イメージの 1.15.0 以降を使用する必要があります。App Mesh Envoy 変数の詳細については、「Envoy イメージ」を参照してください。

注記

デフォルトでは、App Mesh は、Envoy によってメトリクスとトレースでそれ自体が参照されるとき、APPMESH_RESOURCE_ARN で指定したリソースの名前を使用します。APPMESH_RESOURCE_CLUSTER 環境変数に独自の名前を設定することで、この動作を上書きできます。

仮想ノードの作成

AWS Management Console
AWS Management Console で仮想ノードを作成するには
  1. https://console.aws.amazon.com/appmesh/ で AppMesh コンソールを開きます。

  2. 仮想ノードを作成するメッシュを選択します。自分が所有し、これまでに共有された、すべてのメッシュが一覧表示されます。

  3. 左側のナビゲーションで [仮想ノード] を選択します。

  4. [仮想ノードの作成] を選択し、仮想ノードの設定を指定します。

  5. [仮想ノード名] で、仮想ノードの名前を入力します。

  6. [サービスの検出方法] で、次のいずれかのオプションを選択します。

    • DNS — 仮想ノードが表す実際のサービスの [DNS ホスト名] を指定します。Envoy プロキシは、Amazon VPC にデプロイされます。プロキシは、VPC 用に設定された DNS サーバーに、名前解決リクエストを送信します。ホスト名が解決されると、DNS サーバーは 1 つ以上の IP アドレスを返します。VPC の DNS 設定の詳細については、「VPC での DNS の使用」を参照してください。[DNS response type] (DNS レスポンスのタイプ) (オプション) に、DNS リゾルバによって返されるエンドポイントのタイプを指定します。「ロードバランサー」とは、DNS リゾルバがロードバランシングされたエンドポイントのセットを返すことを意味します。「エンドポイント」とは、DNS リゾルバがすべてのエンドポイントを返すことを意味します。デフォルトでは、レスポンスタイプはロードバランサーであると想定されています。

      注記

      Route53 を使用する場合、ロードバランサーを使用する必要があります。

    • [AWS Cloud Map] — 既存の [サービス名][名前空間] を指定します。オプションで、[行の追加] を選択し、キーを指定することで、App Mesh が AWS Cloud Map をクエリできる属性を指定することもできます。指定されたすべてのキーと値のペアに一致するインスタンスのみが返されます。AWS Cloud Map を使用するには、アカウントには AWSServiceRoleForAppMesh サービスにリンクされたロールがなくてはなりません。AWS Cloud Map の詳細については、「AWS Cloud Map デベロッパーガイド」を参照してください。

    • なし – 仮想ノードがインバウンドトラフィックを予期しない場合に選択します。

  7. [IP バージョンの設定]

    [デフォルトの IP バージョンの動作を上書きする] をオンに切り替えて、メッシュ内のトラフィックに使用する IP バージョンを制御します。デフォルトでは、App Mesh はさまざまな IP バージョンを使用します。

    注記

    仮想ノードで IP 優先設定を設定すると、そのノード上のメッシュに設定された IP優先設定のみが上書きされます。

    • デフォルト

      • Envoy の DNS リゾルバーは IPv6 を優先し、IPv4 にフォールバックします。

      • 利用可能な場合は AWS Cloud Map から返された IPv4 アドレスを使用し、フォールバックする場合は IPv6 アドレスを使用します。

      • ローカルアプリ用に作成されたエンドポイントは IPv4 アドレスを使用します。

      • Envoy リスナーはすべての IPv4 アドレスにバインドされます。

    • IPv6 優先

      • Envoy の DNS リゾルバーは IPv6 を優先し、IPv4 にフォールバックします。

      • 利用可能な場合は AWS Cloud Map から返された IPv6 アドレスを使用し、フォールバックする場合は IPv4 アドレスを使用します。

      • ローカルアプリ用に作成されたエンドポイントは IPv6 アドレスを使用します。

      • Envoy リスナーはすべての IPv4 および IPv6 アドレスにバインドされます。

    • IPv4 優先

      • Envoy の DNS リゾルバーは IPv4 を優先し、IPv6 にフォールバックします。

      • 利用可能な場合は AWS Cloud Map から返された IPv4 アドレスを使用し、フォールバックする場合は IPv6 アドレスを使用します。

      • ローカルアプリ用に作成されたエンドポイントは IPv4 アドレスを使用します。

      • Envoy リスナーはすべての IPv4 および IPv6 アドレスにバインドされます。

    • IPv6 のみ

      • Envoy の DNS リゾルバーは IPv6 のみを使用します。

      • AWS Cloud Map によって返された IPv6 アドレスのみが使用されます。AWS Cloud Map が IPv4 アドレスを返す場合、IP アドレスは使用されず、空の結果が Envoy に返されます。

      • ローカルアプリ用に作成されたエンドポイントは IPv6 アドレスを使用します。

      • Envoy リスナーはすべての IPv4 および IPv6 アドレスにバインドされます。

    • IPv4 のみ

      • Envoy の DNS リゾルバーは IPv4 のみを使用します。

      • AWS Cloud Map によって返された IPv4 アドレスのみが使用されます。AWS Cloud Map が IPv6 アドレスを返す場合、IP アドレスは使用されず、空の結果が Envoy に返されます。

      • ローカルアプリ用に作成されたエンドポイントは IPv4 アドレスを使用します。

      • Envoy リスナーはすべての IPv4 および IPv6 アドレスにバインドされます。

  8. (オプション) クライアントポリシーのデフォルト – バックエンド仮想サービスと通信するときのデフォルトの要件を設定します。
    注記
    • 既存の仮想ノードに対して Transport Layer Security (TLS) を有効にする場合は、TLS を有効にする既存の仮想ノードと同じサービスを表す新しい仮想ノードを作成することをお勧めします。次に、仮想ルータとルートを使用して、トラフィックを新しい仮想ノードに徐々にシフトします。ルートの作成およびトランジションの重みの調整に関する詳細については、「ルート」を参照してください。既存のトラフィック処理仮想ノードを TLS で更新する場合、更新した仮想ノードの Envoy プロキシが証明書を受信する前に、ダウンストリームクライアントの Envoy プロキシが TLS 検証コンテキストを受信する可能性があります。これにより、ダウンストリームの Envoy プロキシで TLS ネゴシエーションエラーが発生する可能性があります。

    • プロキシ認証は、バックエンドサービスの仮想ノードによって表されるアプリケーションでデプロイされた Envoy プロキシで有効にする必要があります。プロキシ認証を有効にする場合は、この仮想ノードが通信している仮想ノードのみへのアクセスを制限するようお勧めします。

    • (オプション) 仮想ノードが Transport Layer Security (TLS) を使用してすべてのバックエンドと通信するようにリクエストする場合には、[TLS の適用] を選択します。

    • (オプション) 1 つ以上の特定のポートに対して TLS の使用のみが必要な場合は、[ポート] に数値を入力します。ポートを追加するには、[ポートの追加] を選択します。ポートを指定しない場合、すべてのポートに TLS が適用されます。

    • 検証方法を使用する場合、次のいずれかのオプションを選択します。指定する証明書は、すでに存在し、特定の要件を満たしている必要があります。詳細については、「証明書の要件」を参照してください。

      • AWS Private Certificate Authority ホスティング — 既存の 1 つまたは複数のを選択します。証明書。ACM 証明書で暗号化を使用したサンプルアプリケーションでのメッシュデプロイの完全なエンドツーエンドのチュートリアルについては、GitHub の「AWS Certificate Manager での TLS 設定」を参照してください。

      • [Envoy Secret Discovery Service (SDS)] ホスティング — Envoy が Secret Discovery Service を使って取得するシークレットの名前を入力します。

      • ローカルファイルホスティング — Envoy がデプロイされているファイルシステム上の証明書チェーンファイルへのパスを指定します。ローカルファイルで暗号化を使用してサンプルアプリケーションでメッシュをデプロイする完全なエンドツーエンドのチュートリアルについては、GitHub の「ファイルにより提供された TLS 証明書を使用した TLS の設定」を参照してください。

    • (オプション) [Subject Alternative Name] (サブジェクトの別名) を入力します。SAN を追加するには、[Add SAN] (SAN を追加) を選択します。SAN は FQDN または URI 形式である必要があります。

    • (オプション) サーバーが要求したときにクライアント証明書を提供し、相互TLS認証を有効にするには、[Provide client certificate] (クライアント証明書の提供) と、次のオプションのいずれかを選択します。相互 TLS の詳細については、App Mesh の「相互 TLS 認証」ドキュメントを参照してください。

      • [Envoy Secret Discovery Service (SDS)] ホスティング — Envoy が Secret Discovery Service を使って取得するシークレットの名前を入力します。

      • ローカルファイルホスティング - Envoy がデプロイされているファイルシステムで、証明書チェーンファイルとプライベートキーへのパスを指定します。

  9. (オプション) サービスバックエンド — 仮想ノードが通信する App Mesh 仮想サービスを指定します。
    • 仮想ノードが通信する仮想サービスの AppMesh 仮想サービス名または完全な Amazonリソース名 (ARN) を入力します。

    • (オプション) バックエンドに一意の TLS 設定を設定する場合は、[TLS 設定]、次に、[デフォルトのオーバーライド] を選択します。

      • (オプション) 仮想ノードが TLS を使用してすべてのバックエンドと通信する必要がある場合、[TLS の適用] を選択します。

      • (オプション) 1 つ以上の特定のポートに対して TLS の使用のみが必要な場合は、[ポート] に数値を入力します。ポートを追加するには、[ポートの追加] を選択します。ポートを指定しない場合、すべてのポートに TLS が適用されます。

      • 検証方法を使用する場合、次のいずれかのオプションを選択します。指定する証明書は、すでに存在し、特定の要件を満たしている必要があります。詳細については、「証明書の要件」を参照してください。

        • AWS Private Certificate Authority ホスティング — 既存の証明書の 1 つまたは複数を選択します。

        • [Envoy Secret Discovery Service (SDS)] ホスティング — Envoy が Secret Discovery Service を使って取得するシークレットの名前を入力します。

        • ローカルファイルホスティング — Envoy がデプロイされているファイルシステム上の証明書チェーンファイルへのパスを指定します。

      • (オプション) サブジェクトの別名を入力します。SAN を追加するには、[Add SAN] (SAN を追加) を選択します。SAN は FQDN または URI 形式である必要があります。

      • (オプション) サーバーが要求したときにクライアント証明書を提供し、相互TLS認証を有効にするには、[Provide client certificate] (クライアント証明書の提供) と、次のオプションのいずれかを選択します。相互 TLS の詳細については、App Mesh の「相互 TLS 認証」ドキュメントを参照してください。

        • [Envoy Secret Discovery Service (SDS)] ホスティング — Envoy が Secret Discovery Service を使って取得するシークレットの名前を入力します。

        • ローカルファイルホスティング - Envoy がデプロイされているファイルシステムで、証明書チェーンファイルとシークレットキーへのパスを指定します。

    • バックエンドを追加するには、[バックエンドの追加] を選択します。

  10. (オプション) ログ記録

    ログ記録を設定するには、Envoy が使用する HTTP アクセスログのパスを入力します。/dev/stdout パスを使用するようお勧めします。これにより、Docker ログドライバーを使用して Envoy ログを Amazon CloudWatch Logs などのサービスにエクスポートできます。

    注記

    ログは引き続き、アプリケーション内のエージェントによって取り込まれ、送信先に送信される必要があります。このファイルパスは、ログの送信先を Envoy に指示するだけです。

  11. [リスナー設定]

    リスナーは、HTTPHTTP/2GRPCTCP の各プロトコルをサポートします。HTTPS はサポートされていません。

    1. 仮想ノードがインバウンドトラフィックをリクエストする場合は、リスナー用のポートプロトコルを指定します。http リスナーは、WebSocket への接続移行を許可します。[リスナーの追加] をクリックすると、複数のリスナーを追加できます。[削除] ボタンをクリックすると、そのリスナーが削除されます。

    2. (オプション) 接続プールの有効化

      接続プーリングにより、Envoy がローカルアプリケーションクラスターと同時に確立できる接続の数が制限されます。これは、ローカルアプリケーションが接続に圧倒されるのを防ぎ、アプリケーションのニーズに合わせてトラフィックシェーピングを調整できるようにすることを目的としています。

      仮想ノードリスナーの宛先側の接続プール設定を行うことができます。App Mesh は、クライアント側の接続プールの設定をデフォルトで無限に設定し、メッシュの設定を簡素化します。

      注記

      connectionPool と portMapping プロトコルは同じである必要があります。リスナープロトコルが tcp の場合は、maxConnections のみを指定します。リスナープロトコルが grpc または http2 の場合は、maxRequests のみを指定します。リスナープロトコルが http の場合、maxConnections と maxPendingRequests の両方を指定できます。

      • [最大接続数] に、アウトバウンド接続の最大数を指定します。

      • (オプション) [Maximum pending requests] (最大保留リクエスト数) に、Envoy が [最大接続数] をキューに入れた後、オーバーフローしているリクエストの数を指定します。デフォルト値は、「2147483647」です。

    3. (オプション) 外れ値の検出の有効化

      クライアント Envoy で適用された外れ値の検出により、クライアントは、既知の既知の障害がある接続に対して、ほぼ即時のアクションを実行できます。これは、アップストリームサービス内の個々のホストのヘルスステータスを追跡する回路ブレーカ実装の一形態です。

      外れ値の検出は、アップストリームクラスタ内のエンドポイントが他のクラスターとは異なるパフォーマンスを示しているかどうかを動的に判断し、正常な負荷分散セットからそれらを削除します。

      注記

      サーバー仮想ノードの外れ値の検出を効果的に設定するには、その仮想ノードのサービス検出方法で AWS Cloud Map または DNS を使用し、レスポンスタイプフィールドを ENDPOINTS に設定します。レスポンスタイプを LOADBALANCER に設定して DNS サービス検出方法を使用する場合、Envoy プロキシは、アップストリームサービスへのルーティングに 1 つの IP アドレスのみを選択します。これにより、一連のホストから異常なホストを排出する外れ値の検出動作を無効にします。サービスディスカバリタイプに関する Envoy プロキシの動作の詳細については、「サービス検出方法」セクションを参照してください。

      • [サーバーエラー] に、排出に必要な連続した 5xx エラーの数を指定します。

      • [Outlier detection interval] (外れ値の検出間隔) に、排出のスイープ解析の時間間隔と単位を指定します。

      • [Base ejection duration] (ベース突出時間) に、ホストが排出される基本時間と単位を指定します。

      • [Ejection percentage] (突出パーセンテージ) に、負荷分散プール内の排出可能なホストの最大パーセンテージを指定します。

    4. (オプション) [ヘルスチェックを有効化] — ヘルスチェックポリシーに関する設定を行います。

      ヘルスチェックポリシーはオプションですが、ヘルスポリシーに値を指定する場合は、正常なしきい値ヘルスチェック間隔ヘルスチェックプロトコルタイムアウト期間非正常なしきい値の値を指定する必要があります。

      • [ヘルスチェックプロトコル] で、プロトコルを選択します。grpc を選択した場合、サービスは GRPC Health CheckingProtocol に準拠している必要があります。

      • [ヘルスチェックポート] に、ヘルスチェックを実行するポートを指定します。

      • [正常なしきい値] に、リスナーが正常であると宣言するために必要となるヘルスチェック成功の数を指定します。

      • [ヘルスチェック間隔] に、各ヘルスチェックの実行間隔をミリ秒単位で指定します。

      • [パス] に、ヘルスチェックリクエストの送信先パスを指定します。この値は、ヘルスチェックプロトコルhttp または http2 の場合のみ使用されます。この値は、他のプロトコルでは無視されます。

      • [タイムアウト期間] に、ヘルスチェックからの応答を受け取るまで待機する時間をミリ秒単位で指定します。

      • [非正常なしきい値] に、リスナーが異常であると宣言するために必要となるヘルスチェック失敗の数を指定します。

    5. (オプション) [TLS ターミネーションの有効化] – TLS を使用して他の仮想ノードがこの仮想ノードと通信する方法を設定します。
      • [モード]で、リスナーで TLS を設定するモードを選択します。

      • [証明書メソッド] で、次のいずれかのオプションを選択します。証明書は特定の要件を満たしている必要があります。詳細については、「証明書の要件」を参照してください。

        • [AWS Certificate Manager ホスティング] — 既存の証明書を選択します。

        • [Envoy Secret Discovery Service (SDS)] ホスティング — Envoy が Secret Discovery Service を使って取得するシークレットの名前を入力します。

        • [ローカルファイルホスティング] — Envoy プロキシがデプロイされているファイルシステムで、証明書チェーンファイルとシークレットキーへのパスを指定します。

      • (オプション) [Require client certificates] (クライアント証明書を要求する) とクライアントが証明書を提供するときに相互 TLS 認証を有効にする次のオプションの 1 つを選択します。相互 TLS の詳細については、App Mesh の「相互 TLS 認証」ドキュメントを参照してください。

        • [Envoy Secret Discovery Service (SDS)] ホスティング — Envoy が Secret Discovery Service を使って取得するシークレットの名前を入力します。

        • ローカルファイルホスティング — Envoy がデプロイされているファイルシステム上の証明書チェーンファイルへのパスを指定します。

      • (オプション) サブジェクトの別名を入力します。SAN を追加するには、[Add SAN] (SAN を追加) を選択します。SAN は FQDN または URI 形式である必要があります。

    6. (オプション) [タイムアウト]
      注記

      デフォルトより大きいタイムアウトを指定する場合は、必ず、デフォルトより大きいタイムアウト値を持つ仮想ルータとルートを設定してください。ただし、タイムアウトをデフォルトより低い値に減らす場合には、ルートでのタイムアウトを更新はオプションとなります。詳細については、「ルート」を参照してください。

      • [リクエストのタイムアウト] — リスナーのプロトコルgrpchttp、または http2 を選択した場合には、リクエストのタイムアウトを指定できます。デフォルト値は 15 秒です。値が 0 の場合、タイムアウトが無効になります。

      • [アイドル期間] — 任意のリスナープロトコルのアイドル期間を指定できます。デフォルトは 300 秒です。

  12. [仮想ルーターの作成] を選択して終了します。

AWS CLI

AWS CLI を使用して仮想ノードを作成するには

以下のコマンドと入力 JSON ファイル (赤色の値を独自の値に置き換えてください) を使用して、サービス検出に DNS を使用する仮想ノードを作成します。

  1. aws appmesh create-virtual-node \ --cli-input-json file://create-virtual-node-dns.json
  2. create-virtual-node-dns.json のの内容:

    { "meshName": "meshName", "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceBv1.svc.cluster.local" } } }, "virtualNodeName": "nodeName" }
  3. 出力例:

    { "virtualNode": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualNode/nodeName", "createdAt": "2022-04-06T09:12:24.348000-05:00", "lastUpdatedAt": "2022-04-06T09:12:24.348000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceBv1.svc.cluster.local" } } }, "status": { "status": "ACTIVE" }, "virtualNodeName": "nodeName" } }

App Mesh の AWS CLI を使用して仮想ノードを作成する方法の詳細については、AWS CLI リファレンスの create-virtual-node コマンドを参照してください。

仮想ノードの削除

注記

仮想ノードが任意のルートのターゲットまたは任意の仮想サービスのプロバイダーとして指定されている場合、仮想ノードを削除することはできません。

AWS Management Console
AWS Management Console を使用して仮想ノードを削除するには
  1. App Mesh コンソールを https://console.aws.amazon.com/appmesh/ で開きます。

  2. 仮想ノードから削除するメッシュを選択します。自分が所有し、これまでに共有された、すべてのメッシュが一覧表示されます。

  3. 左側のナビゲーションで [仮想ノード] を選択します。

  4. [仮想ノード] テーブルで、削除する仮想ノードを選択し、[削除] を選択します。仮想ノードを削除するには、アカウントIDが仮想ノードのメッシュ所有者またはリソース所有者の列にリストされている必要があります。

  5. 確認ボックスで、delete と入力し、次に、[削除] を選択します。

AWS CLI
AWS CLI を使用して仮想ノードを削除するには
  1. 以下のコマンドを使用して仮想ノードを削除します (赤色の値を独自の値に置き換えてください)。

    aws appmesh delete-virtual-node \ --mesh-name meshName \ --virtual-node-name nodeName
  2. 出力例:

    { "virtualNode": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualNode/nodeName", "createdAt": "2022-04-06T09:12:24.348000-05:00", "lastUpdatedAt": "2022-04-07T11:03:48.120000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "backends": [], "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceBv1.svc.cluster.local" } } }, "status": { "status": "DELETED" }, "virtualNodeName": "nodeName" } }

App Mesh の AWS CLI を使用して仮想ノードを削除する方法の詳細については、AWS CLI リファレンスの delete-virtual-node コマンドを参照してください。