サーバレスコンピューティングはもはや新しいものではなくなり、そのコスト効率や運用性の良さから、企業向けシステムにおいても普通に使われるようになり、フロントエンド向け以外のシステムでもサーバレスの活用が進んできています。
全てをサーバレスで構成する、全てをコンテナで構成する、全てをレガシーなEC2で構成する、というよりはむしろ適材適所で組み合わせて使うことで、お互いの得意な部分をうまく活用させることができます。
VPC Lattice
VPCをベースとしたコンピュート環境と、AWS LambdaやAmazon DynamoDBに代表されるVPC外のサービスをうまく組み合わせていくことを考えた場合従来のVPCエンドポイント形式では管理が煩雑になっていきます。
サービスごとにVPCエンドポイントを作成しすべての通信をVPCで関係させることはもちろん可能ですが、アプリケーションや事業が成長し複数のチーム、そして複数のVPCが存在する環境だと、VPCエンドポイントはその数だけ増えていくため、管理工数や、時にはVPCエンドポイントそのもののコストも問題となります。
このため、HTTPSエンドポイント、Lambda関数、ALB、NLB、などをまとめて管理する抽象化されたネットワーク機能が求められます。これがVPC Latticeです。

さらにAWS Resource Access Managerと連携することで、VPCそのものをOrganizations環境のアカウントで共有したり、明示的に指定したOrganizations外のアカウントにも共有可能です。この機能はVPC Latticeリリース前から、VPC単体を共有する機能もあったのですが、VPC Latticeに複数のVPCを登録した状態で、まとめて共有することができる、など大規模環境における管理が楽になっています。
当初VPC Lattice はL7のルーティングをつかさどる機能としてリリースされていましたが、その後TCPにも対応しています。HTTP/3 QUiCなどで使われるUDPには2025年4月現在まだ未対応ですので注意してください。
さっそくやってみる
では第一回目は、まず基本パターンとしてVPC/EC2とLambdaの接続を行っていきます。なお、VPC LatticeはあくまでVPCであり、ALBなどの様にそれ単独でパブリックエンドポイントを作成するわけではないので注意してください。
1.Lambda関数の作成
Lambdaマネージメントコンソールから 関数の作成
をクリックします。

適当な名前を付けてそのまま 関数の作成
をクリックします。

VPC Lattice サービスネットワークとサービス
まずLatticeの作業を行う前に、サービスネットワークとサービスの違いについて説明をします。
サービスネットワーク:
VPC Latticeのネットワーク本体そのものになります。

このサービスネットワークにサービスをアタッチしていくことで、Latticeはリクエストをルーティングするようになります。
サービス

サービスはデプロイが独立したコンピュートリソース等の単位です。例えばLambda関数、ECS/EKS/FargetやEC2、ALB、NLBなどです。
サービスネットワークがサービスへリクエストをルーティングする際には、リスナーやターゲットグループ、ルーティングルールなどの設定に従います。この辺りはALBと感覚的には同じで、言葉の意味も同じなのでわかりやすいかもしれません。
いまから作成する環境ですが、VPC内部のEC2からLattice経由でLambda関数へのアクセスを実現します。コンピュート環境は1種類(Lambdaのみ)ですからサービスは1つ登録されることになります。
そしてVPC内部のEC2からLambdaにLattice経由でリクエスト出せるように、VPCを関連付けることになります。
少しややこしいですが、例えばLambdaからLatticeを経由してVPC内のコンピュートリソースへアクセスを行い場合は、VPCを関連付けるだけではなく、VPC内のコンユピュートリソース(ECS/EKS/FargeやECなど)をサービスとして登録することになります。
2. Lattice サービスネットワークの構築
ではまずサービスネットワークです。VPCのマネージメントコンソール、左ペインにサービスネットワークがありますのでクリックします。

サービスネットワークを作成
をクリックします。

適当な名前を付けます。サービスはまだ未作成であとで作成後関連付けを行いますので、いったん空欄で進めます。

次に関連付けたいVPCを指定します。これにより、このVPC内で起動されるEC2からLattice経由でLambdaへアクセスが可能となります。

後はデフォルトのまま サービスネットワークを作成
をクリックします。
無事以下の様に作成されました。

3. サービスの作成とサービスネットワークへの関連付け
次に行うのがサービスの作成とサービスネットワークへの関連付けです。
Lattice サービス
をクリックします。

サービスを作成
をクリックします。

適当な名前を付けあとはデフォルトのまま 次へ
をクリックします。

Lambdaへのルーティングを定義するため リスナーの追加
をクリックします。

リスナーはHTTPS:443を指定します。

次のリスナールールは、今回の記事では設定せずそのままで進めます。サービスが1種類であるためすべてのリクエスト通信はこのサービスが受け取ればいいからです。例えば複数のサービスがLatticeに存在している場合、ALBと同様にパスベースルーティングやメソッドベース、ヘッダーベースなど複数サービスへのリクエストのルーティング条件を指定できます。

次にデフォルトアクションの設定です。デフォルトアクションとは、リスナールールにリクエストが合致しなかった場合ルーティングされる先を指定します。上記で、ルールを設定しませんでしたので、当然すべてのリクエストはデフォルトアクションで処理されることになります。 ターゲットグループの作成
をクリックします。

別ウインドウが起動します。リクエストのルーティング先であるLambdaを指定し、適当な名前を入力し 次へ
をクリックします。

先ほど作成したLambda関数を指定して ターゲットグループの作成
をクリックします。


無事作成されたら先ほどのタブに戻ります。無事ターゲットグループが指定できました。

次へ
をクリックすると先ほど作成したサービスネットワークへの関連付けを行う画面がでてきますので、サービスネットワークを選択して 次へ
をクリックします。

確認画面で VPC Lattice サービスを作成
をクリックします。

サービスごとにドメイン名が生成されます。ドメイン名をコピーしておきます。

4. EC2の起動とテスト
いよいよテストです。先ほど関連付けを行ったVPC内部にEC2を起動します。
curl -X GET https://service-0c1dae7c3a8150cc2.7d67968.vpc-lattice-svcs.ap-northeast-1.on.aws
"Hello from Lambda!"
と戻ってくれば成功です!
次回はもう少しいろんな機能を見ていきたいと思います。