Amazon VPC Lattice が GA したので Lattice 経由で Lambda を呼んでみた

# はじめに
Amazon VPC Lattice が GA しました。
[Announcing the general availability of Amazon VPC Lattice](https://aws.amazon.com/jp/about-aws/whats-new/2023/03/general-availability-amazon-vpc-lattice/)
Lattice は、VPC上のインフラを抽象化してサービス間通信をシンプルにするためのサービスで、re:Invent にて発表されて以来 Preview の状態となっていました。
この記事は、早速触ってみたといういわゆる「やってみた」系記事です。

# 構成
普通の構成の VPC の Private Subnet にいる EC2 Instance から、VPC Lattice サービスとして登録された Lambda に対して HTTPS でリクエストして、レスポンスが返ってくるかを確認します。
![lattice.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/4be2f069-b4f8-a168-0312-4e3c69d4fde5.png)

# VPC Lattice の設定
　今回は初回なので、サービスに慣れ親しむためにもマネジメントコンソールを使って VPC Lattice を設定していきます。
　なお、VPC や EC2 インスタンス、Lambda 関数については本筋ではないので、既に構築されているところからスタートします。
　EC2 インスタンスは、 AmazonLinux2023のデフォルトのものにSSMManagedInstanceCoreがアタッチされたIAM Roleを付与してSession Managerで接続しています。
　Lambda は Python3.9 ランタイムのデフォルトのままのものがデプロイされています。

## VPC Lattice Service Network の作成
　・VPC マネジメントコンソールから、VPC格子(Lattice)-サービスネットワークを開いて、「サービスネットワークを作成」をクリック。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/7abad3ff-5086-b4f5-d811-daf4c3740bbd.png)

　・作成画面が開くので、サービスネットワーク名を入力。※ネットワーク名は、FQDNにも使われるようなので、小文字数字ハイフンのみ入力可能です。
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/47228ba9-5e9e-88f8-da61-df30c3ff4d00.png)

　・下にスクロールすると「VPCの関連付け」ボタンがあるので、クリックしてVPCを選択します。
　　ここで選択したVPC上のサービスは、Latticeサービスとして登録されているサービスへルーティングができるようになります。
　　今回は、EC2が置いてあるVPCを選択しますが、Latticeサービスと連携したいVPCが複数ある場合はここで複数のVPCを指定してください。
　　また、Latticeサービスへのインバウンドトラフィックを許容するセキュリティグループもここで指定します。
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/796eb0c8-43b1-be8c-2b33-14e872d88899.png)

　・さらに下にスクロールすると、認証やモニタリング等もここで設定できるみたいです。
　　とりあえず今回は疎通を見たいだけなので、ここはデフォルトのままスルー。
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/28a83993-1806-9284-2a71-a782b4a0b9de.png)

　・「サービスネットワークを作成」ボタンをクリック。
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/98d9c977-4b0b-b153-82bf-ca17032e2215.png)

　・サービスネットワークが作成されます。
![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/04af0ee4-645a-157e-13b4-75d33574cb72.png)


## VPC Lattice Target Group の作成
　・次にターゲットグループを作ります。VPC格子(Lattice)の下のターゲットグループ画面に移動して、「ターゲットグループの作成」をクリックします。
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/9e04bb7f-7d41-4eb9-63bb-afd3c7aabeb0.png)

　・今回はLambdaをターゲットにするので、「Lambda 関数」を選択してターゲットグループ名を入力します。
　　入力ができたら、「次へ」をクリック。
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/4e2fe9c9-42f0-2882-f05f-2724fd7bdb03.png)

　・ターゲットの登録画面で、Lambda関数をドロップダウンリストで選択できるので、選択します。
　　その後、「ターゲットグループの作成」をクリック。
![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/b03c2f15-adc7-0dde-f417-1da13a2c8055.png)

　・ターゲットグループが作成されます。
![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/85aad146-6754-7b8a-9a5e-e1af6bd8948d.png)

## VPC Lattice Service の作成
　・最後に、VPC Lattice上でのエンドポイントとなるServiceを作成していきます。
　　VPC格子(Lattice)の下の「サービス」画面に遷移し、「サービスを作成」をクリック。
![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/fd7c4305-a044-d434-3366-d3408043c898.png)

　・サービスの作成画面が開くので、サービス名を入力します。
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/3a672cc4-8361-85d6-2740-d04d0c14e435.png)

　・下にスクロールすると、ここでも認証タイプやモニタリングの設定項目があるので、サービスごとの認証タイプやモニタリングの設定もできるのかもしれませんね。
　　今回はとりあえずスルーして「次へ」をクリック。
![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/58668363-918a-17af-4372-c864dedebc01.png)

　・ルーティングの定義画面が開きます。
　　「リスナーの追加」をクリック。
![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/65f9fd4c-bacf-d68a-e52d-4a0fb438cdbe.png)

　・リスナーが開くので、プロトコルやポートを指定し、デフォルトのアクションで先ほど作ったターゲットグループを指定しましょう。
　　今回は、HTTPSのリスナーを作成しました。なお、VPC LatticeはCloudFrontなどと同じく、デフォルトのドメインに対してVPC Latticeによって生成された証明書が利用できます。
![018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/043b8da0-f064-cf4c-ff26-da0874edfa9a.png)

　・サービスネットワークの関連付けでは、最初に作ったVPC Lattice サービスネットワークを指定します。
![019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/18b56deb-feba-dc72-3024-de11d5927469.png)

　・確認と作成画面で問題なさそうなことを確認して、「VPC Lattice サービスを作成」をクリックします。
![020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/6cf37913-5bc1-987a-8329-7e1db27a383a.png)
![022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/cd80b8d5-2c3b-ff14-2344-11db9ac32bcf.png)

　・VPC Lattice サービスが作成できました。
![023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/5fe00d30-72b2-daf1-04b4-15e7a12cece9.png)

## 疎通確認
　・早速EC2インスタンスに Session Managerでログインして、curl で https://{VPCLatticeのサービスドメイン名} を叩いてみましょう。
![024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681482/dd17cfdd-4234-2c4b-cb55-1ee4af8670ae.png)
　　200番とデフォルトのレスポンスである"Hello from Lambda!"が返ってきています！
　　簡単でした！

# おわりに
　AWS Latticeはマルチアカウントやマルチクラスターなど、複数のサービス間で連携を行う必要が出てくる場面で今後有力な選択肢として挙げられるサービスとなると思います。VPCのネットワーク構造に依存しない設計となっているので、例えば今まで疎通させるには工夫が必要だった構成でも、簡単にサービス間連携を実現できるようになるかもしれません。
　今後、このサービスを使った様々なアーキテクチャが検討されると思いますが、まずは入口の触ってみた記事としてこの記事が機能すれば幸いです。