仮想ノード - AWS App Mesh

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

仮想ノード

重要

サポート終了通知: 2026 年 9 月 30 日、 は のサポートを中止 AWS します AWS App Mesh。2026 年 9 月 30 日以降、 AWS App Mesh コンソールまたは AWS App Mesh リソースにアクセスできなくなります。詳細については、このブログ記事の「 から Amazon ECS Service Connect AWS App Mesh への移行」を参照してください。

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

新しい仮想ノードのレスポンスメタデータには、仮想ノードに関連付けられている Amazon リソースネーム (ARN) が含まれます。この値を、Amazon タスク定義または Kubernetes ポッド仕様のECSタスクグループの 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. で App Mesh コンソールを開きますhttps://console.aws.amazon.com/appmesh/

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

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

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

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

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

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

      注記

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

    • AWS Cloud Map – 既存のサービス名とHTTP名前空間 を指定します。必要に応じて、行を追加 を選択し、キー を指定 AWS Cloud Map することで、App Mesh がクエリできる属性を指定することもできます。指定されたすべてのキーと値のペアに一致するインスタンスのみが返されます。を使用するには 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

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

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

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

    • IPv4 優先

      • Envoy のDNSリゾルバーは を好みIPv4、 に戻りますIPv6

      • 利用可能な AWS Cloud Map 場合は、 から返されたIPv4アドレスを使用し、IPv6そのアドレスを使用して に戻ります。

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

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

    • IPv6 のみ

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

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

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

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

    • IPv4 のみ

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

      • によって返されるIPv4アドレスのみ AWS Cloud Map が使用されます。 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 () を使用して仮想ノードがすべてのバックエンドと通信することを要求する場合は、Enforce TLS を選択しますTLS。

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

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

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

      • Envoy Secret Discovery Service (SDS) ホスティング – シークレット検出サービスを使用して Envoy が取得するシークレットの名前を入力します。

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

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

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

      • Envoy Secret Discovery Service (SDS) ホスティング – シークレット検出サービスを使用して Envoy が取得するシークレットの名前を入力します。

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

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

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

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

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

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

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

        • Envoy Secret Discovery Service (SDS) ホスティング – シークレット検出サービスを使用して Envoy が取得するシークレットの名前を入力します。

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

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

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

        • Envoy Secret Discovery Service (SDS) ホスティング – シークレット検出サービスを使用して Envoy が取得するシークレットの名前を入力します。

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

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

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

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

    注記

    ログは引き続き、アプリケーション内のエージェントによって取り込まれ、送信先に送信される必要があります。このファイルパスは、ログの送信先を 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 で適用された外れ値の検出により、クライアントは、既知の既知の障害がある接続に対して、ほぼ即時のアクションを実行できます。これは、アップストリームサービス内の個々のホストのヘルスステータスを追跡する回路ブレーカ実装の一形態です。

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

      注記

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    5. (オプション) TLS終了を有効にする — を使用して、他の仮想ノードがこの仮想ノードと通信する方法を設定しますTLS。
      • モード では、リスナーで設定TLSするモードを選択します。

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

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

        • Envoy Secret Discovery Service (SDS) ホスティング – シークレット検出サービスを使用して Envoy が取得するシークレットの名前を入力します。

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

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

        • Envoy Secret Discovery Service (SDS) ホスティング – シークレット検出サービスを使用して Envoy が取得するシークレットの名前を入力します。

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

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

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

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

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

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

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

AWS CLI

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

次のコマンドと入力JSONファイルを使用して、 を使用してサービス検出DNSに使用する仮想ノードを作成します ( red 独自の値):

  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" } }

AWS CLI for App Mesh で仮想ノードを作成する方法の詳細については、 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. 次のコマンドを使用して、仮想ノードを削除します ( red 独自の値):

    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" } }

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