Amazon Web Services ブログ

Amazon VPC Lattice でサービス間の接続、セキュリティ、モニタリングを簡素化 — 一般提供開始

AWS re:Invent 2022 で、プレビュー版の Amazon VPC Lattice を紹介しました。これは Amazon Virtual Private Cloud (Amazon VPC) の新機能であり、サービス間の通信の接続、保護、モニタリングを一貫して行うことを可能にします。VPC Lattice では、ネットワークアクセス、トラフィック管理、モニタリングのポリシーを定義して、インスタンス、コンテナ、サーバーレスアプリケーション間でコンピューティングサービスを接続できます。

3月31日、VPC Latticeが一般公開されたことをお知らせできることを嬉しく思います。プレビュー版と比べると、次の新機能にアクセスできます。

  • サービスでは、VPC Lattice によって自動的に生成されるドメイン名に加えて、カスタムドメイン名を使用できます。HTTPS を使用する場合、カスタムドメイン名と一致する SSL/TLS 証明書を設定できます。
  • オープンソースの AWS ゲートウェイ API コントローラをデプロイすると、Kubernetes ネイティブなエクスペリエンスで VPC Lattice を使用できます。Kubernetes ゲートウェイ API を使用して、複数の Kubernetes クラスター間のサービスや、EC2 インスタンス、コンテナ、サーバーレス関数で実行されているサービスを接続できます。
  • Application Load Balancer (ALB) または Network Load Balancer (NLB) をサービスのターゲットとして使用できます。
  • IP アドレスターゲットタイプは IPv6 接続をサポートするようになりました。

これらの新機能のいくつかを実際に見てみましょう。

Amazon VPC Lattice をサービス間接続に使用する
VPC Lattice を紹介した前回の投稿では、サービスネットワークを作成し、複数の VPC とサービスを関連付け、EC2 インスタンスと Lambda 関数のターゲットグループを設定する方法を示しています。また、リクエストの特性に基づいてトラフィックをルーティングする方法と、加重ルーティングを使用する方法についても説明しています。加重ルーティングは、ブルー/グリーンおよび canary スタイルのデプロイや、あるコンピューティングプラットフォームから別のコンピューティングプラットフォームへの移行に非常に便利です。

それでは、VPC Lattice を使用して e コマースアプリケーションのサービスが相互に通信できるようにする方法を見てみましょう。簡単にするために、次の 4 つのサービスのみを考えます。

  • Lambda 関数として実行される Order (注文) サービス。
  • Inventory (在庫) サービス。IPv6 をサポートするデュアルスタック VPCAmazon Elastic Container Service (Amazon ECS) サービスとしてデプロイされます。
  • Delivery (配送) サービス。ALB を使用して ECS サービスとしてデプロイされ、トラフィックをサービスタスクに分散します。
  • EC2 インスタンスで実行されているPayment (支払い) サービス。

まず、サービスネットワークを作成します。Order (注文) サービスでは、Inventory (在庫) サービス (商品が購入可能かどうかを確認するため)、Delivery (配送) サービス (商品の配送を手配するため)、およびPayment (支払い) サービス (資金を移動する) を呼び出す必要があります。次の図は、サービスネットワークの観点から見たサービス間通信を示しています。

e コマースサービスのサービスネットワークビューを説明する図。

これらのサービスは異なる AWS アカウントと複数の VPC で実行されます。VPC Latticeは、VPC の境界を越えた接続とアカウント間のアクセス許可の設定の複雑さを処理するため、サービス間の通信は HTTP/HTTPS 呼び出しと同じくらい簡単になります。

次の図は、実装の観点から通信がどのように流れるかを示しています。

e コマースサービスの実装イメージを説明する図。

Order (注文) サービスは VPC に接続された Lambda 関数で実行されます。図中のすべての VPC はサービスネットワークに関連付けられているため、Order (注文) サービスは他のサービス (Inventory (在庫)、Delivery (配送)、Payment (支払い)) が異なる AWS アカウントにデプロイされていたり、IP アドレスが重複している VPC にデプロイされていても、それらのサービスを呼び出すことができます。

Network Load Balancer (NLB) をターゲットとして使用する
Inventory (在庫) サービスはデュアルスタック VPC で実行されます。NLB を備えた ECS サービスとしてデプロイされ、サービス内のタスクにトラフィックを分散します。NLB の IPv6 アドレスを取得するには、EC2 コンソールで NLB が使用しているネットワークインターフェイスを探します。

コンソールのスクリーンショット。

Inventory (在庫) サービスのターゲットグループを作成する場合、基本設定で、ターゲットの種類としてIP アドレスを選択します。次に、IP アドレスタイプとして IPv6 を選択します。

コンソールのスクリーンショット。

次のステップでは、NLB の IPv6 アドレスをターゲットとして入力します。ターゲットグループが作成されると、ヘルスチェックによってターゲットが期待どおりに応答しているかどうかがテストされます。

コンソールのスクリーンショット。

Application Load Balancer (ALB) をターゲットとして使用する
ALB をターゲットとして使用するのはさらに簡単です。Delivery (配送) サービスのターゲットグループを作成するときに、基本設定で新しい Application Load Balancer のターゲットタイプを選択します。

コンソールのスクリーンショット。

ALB を検索する VPC を選び、プロトコルバージョンを選択します。

コンソールのスクリーンショット。

次のステップでは、Register now (今すぐ登録) を選択し、ドロップダウンから ALB を選択します。ターゲットグループが使用するデフォルトポートを使用します。VPC Lattice は ALB の追加のヘルスチェックを行いません。ただし、ロードバランサーにはすでに独自のヘルスチェックが設定されています。

コンソールのスクリーンショット。

サービスにカスタムドメイン名を使用する
これらのサービスを呼び出すには、カスタムドメイン名を使用します。例えば、 VPC コンソールPayment (支払い) サービスを作成する場合、[Specify a custom domain configuration] (カスタムドメイン設定の指定) を選択し、カスタムドメイン名を入力し、HTTPS リスナーの SSL/TLS 証明書を選択します。カスタム SSL/TLS 証明書のドロップダウンには、AWS Certificate Manager (ACM) から入手可能な証明書が表示されます。

コンソールのスクリーンショット。

サービス間通信の保護
ターゲットグループが作成されたので、サービス間の通信方法をどのように保護できるかを見てみましょう。ゼロトラストの認証と承認を実装するには、AWS Identity and Access Management (IAM) を使用しています。サービスを作成するときは、認証タイプとして AWS IAM を選択します。

サービスへのリクエストには、AWS API で使用されているのと同じ署名プロトコルである署名バージョン 4 を使用して署名する必要があるように、[Allow only authenticated access] (認証されたアクセスのみを許可する) ポリシーテンプレートを選択します。このように、サービス間のリクエストは IAM 認証情報で認証されるため、通信を保護するためにシークレットを管理する必要がありません。

コンソールのスクリーンショット。

オプションとして、より正確に指定して、一部のサービスまたはサービスの特定の URL パスにのみアクセスを許可する認証ポリシーを使用することもできます。例えば、次の認証ポリシーをOrder (注文) サービスに適用して、Lambda 関数に次の許可を与えることができます。

  • Inventory (在庫) サービス/ストック URL パスへの読み取り専用アクセス (GET メソッド)。
  • Delivery (配送) サービス/配送 URL パスへのフルアクセス (任意の HTTP メソッド)。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<Order Service Lambda Function IAM Role ARN>"
            },
            "Action": "vpc-lattice-svcs:Invoke",
            "Resource": "<Inventory Service ARN>/stock",
            "Condition": {
                "StringEquals": {
                    "vpc-lattice-svcs:RequestMethod": "GET"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<Order Service Lambda Function IAM Role ARN>"
            },
            "Action": "vpc-lattice-svcs:Invoke",
            "Resource": "<Delivery Service ARN>/delivery"
        }
    ]
}

VPC Latticeを使用して、セキュリティやモニタリングなど、eコマースアプリケーションのサービス間の通信をすばやく構成しました。これで、サービス間の通信方法を管理する代わりに、ビジネスロジックに集中できるようになりました。

利用可能なリージョンと料金
Amazon VPC Lattice は現在、米国東部 (オハイオ)、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (シンガポール)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、欧州 (アイルランド) の AWS リージョンでご利用いただけます

VPC Lattice では、サービスのプロビジョニング時間、各サービスを通じて転送されるデータ量、およびリクエスト数に対して料金が発生します。1 時間ごとに最初の 300,000 件のリクエストには料金は発生せず、このしきい値を超えるリクエストに対してのみお支払いいただきます。詳細については、VPC Lattice の価格設定を参照してください。

VPC Latticeは、時間の経過とともに段階的にオプトインできるように設計されました。組織内の各チームは、VPC Lattice を使用するかどうか、いつ使用するかを選択できます。他のアプリケーションは、HTTP や HTTPS などの標準プロトコルを使用して VPC Lattice サービスに接続できます。VPC Lattice を使用して、インスタンス、コンテナ、サーバーレスコンピューティングを一貫してサポートすることで、アプリケーションロジックに集中し、生産性とデプロイの柔軟性を向上させることができます。

VPC Latticeを使用すると、サービスの接続、保護、モニタリングの方法を簡素化できます。

Danilo

原文はこちらです。