🐷

VPC Latticeについて

2024/08/27に公開

VPC Latticeとは

VPC Latticeはサービス間を接続し、監視・通信の暗号化・認証認可などの機能を提供するサービスです。

いわゆるLinkerdやIstioのようなサービスメッシュツールのようなイメージで利用できます。

具体的には以下のような機能があります。

  • サービス間通信における認証機能(IAM)
  • アクセスログやメトリクスの収集などのモニタリング
  • サービスディスカバリ
  • mTLS化
  • ユーザ定義のカスタムドメインでの名前解決

ユースケース

複数のプロダクトを各チームが個別にAWSアカウント単位またはVPC単位で管理しており、それらをメッシュ上に通信可能にするようなシチュエーションで有効です。

VPC間を繋ぐことがベースとなっているので、VPC内で構築されるシステムのアーキテクチャに影響を及ぼすことなく繋ぎ込めるのが大きな特徴だと思います。

システム毎に特殊要件がありワークロードを共通基盤化するのが難しい中でも綺麗に境界分けしながら疎通性を担保し、アクセス制御したいユースケースにおいてはファーストチョイスになると考えます。

コンポーネント

VPC Latticeにおける登場人物となるコンポーネントはそれぞれ以下のような役割です。

  • Latticeサービスネットワーク: サービスメッシュのコントロールプレーンに当たるリソース
  • Latticeサービス: サービスメッシュのデータプレーンに当たるリソース
  • Latticeターゲットグループ: Latticeサービスのバックエンドに当たるリソース
  • VPCとVPC内に作られた各々のシステム

適当に手書きでそれぞれの関係性を図示してみました。
lattice_arch.png

前述のようにLatticeサービスネットワークがコントロールプレーンに当たるものなので、ここにサービスを登録することになります。

ただし、Latticeサービスネットワークへ登録するリソースは2パターンあり、それぞれ意味合いが変わってきます。

  • Latticeサービスを登録: サーバとして振る舞うようにする。VPC側から参照されるDNSで名前解決可能となりリクエストを受け付けることができるようになる
  • VPCを登録: クライアントとして振る舞うようにする。Latticeサービスネットワークに登録されているLatticeサービスの名前解決ができるようになり疎通可能となる

ざっくりな構築の流れ

※各VPCにシステムはできている前提で、VPC Latticeを使って構築するときの作業の流れを記載します。

  • Latticeサービスネットワーク作成
  • 各VPCのあるシステムのうち、サーバ的な振る舞いとなるものはLatticeサービスとLatticeターゲットグループ作成
  • LatticeサービスネットワークにLatticeサービスとVPCを関連づける
    • AWSアカウント跨ぎの場合は事前にRAMで共有しておく
  • Route53でLatticeサービスの名前解決できるようにする
    • カスタムドメイン使う場合は必須
  • SecurityGroupでアクセス許可設定入れる

VPC Lattice使用時のアーキテクチャ

VPC Latticeを使う上でどのようなアーキテクチャ・アカウント分割で使用するのが良いかを考えてみました。

特段特殊要件がなければ以下の例図のように組むのが良いと考えました。
lattice_idea.png

Service A, Service B, Service Cとそれぞれ専用のアカウントを持ちサービス毎の開発者・運用者はこのアカウント内に集中できるようにします。

Latticeサービスネットワークは各アカウントから見ると共通して使用するリソースに当たるので、これは別アカウントや共通基盤用のアカウントがあればそこに作成します。これによって繋ぎ込みやアクセス制御は横串でインフラを見る組織が明確な責任分解点を伴って担えます。

各サービスについては以下のような性質を有しているものです。

  • ServiceA: 他サービスからリクエストを受け付ける仕様はないため、クライアントとしてのみ振舞うことができれば問題ない
    -> VPCをLatticeサービスネットワークに登録する
  • ServiceB: 他サービスからのリクエストを受け付けるが、他サービスを利用する立場にはない仕様のため、サーバーとしてのみ振る舞うことができれば問題ない
    -> Latticeサービスを作成しLatticeサービスネットワークに登録する
  • ServiceC: 他サービスからのリクエストを受け付け、他サービスの利用が発生する仕様のため、クライアント・サーバー両方として振る舞う必要がある
    -> Latticeサービスを作成しLatticeサービスネットワークに登録する。VPCをLatticeサービスネットワークに登録する

VPC LatticeはLatticeサービスネットワークとLatticeサービス・VPCという登録対象の2つのリソースの間で綺麗に責任分解点を作ることができるのが大きな特徴だと考えます。

この旨みをしっかり生かして設計するように意識することが大事だと考えます。

最後に

VPC Latticeはいくつかのコンポーネントや複数のサービス展開を行っており、それらを繋ぎ合わせて提供したいビジネス要件に対してシステム側がスムーズに追従できるよいソリューションだと思います。

ネットワーキングソリューションの1つの引き出しにいかがでしょうか?

GitHubで編集を提案

Discussion