仮想ノード - 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優先設定のみが上書きされます。

    • デフォルト

      • IPv6IPv4EnvoyのDNSリゾルバーは優先してフォールバックします。

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

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

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

    • IPv6 優先設定

      • IPv6IPv4EnvoyのDNSリゾルバーは優先してフォールバックします。

      • IPv6AWS Cloud Map返されたアドレスが利用可能な場合はそのアドレスが使用され、IPv4そのアドレスを使用するようになります。

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

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

    • IPv6 優先設定

      • IPv4IPv6EnvoyのDNSリゾルバーは優先してフォールバックします。

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

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

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

    • IPv6 のみ

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

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

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

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

    • IPv4 のみ

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

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

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

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

  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 end-to-end 証明書で暗号化を使用したサンプルアプリケーションでのメッシュデプロイの完全なエンドツーエンドのチュートリアルについては、「Certificate ManagerAWS での TLS 設定」を参照してください GitHub。

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

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

    • (オプション) [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 アクセスログのパスを入力します。Docker ログドライバーを使用して Envoy ログを Amazon CloudWatch Logs などのサービスにエクスポートできるようにするため、/dev/stdoutこのパスをお勧めします。

    注記

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

  11. リスナー設定

    リスナーはHTTP、、HTTP/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 を使用する場合、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" } }

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

仮想ノードの削除

注記

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

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

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