AWS LambdaのPrivateLinkを試してみた

# 概要

2020/11/02のアップデートで、「AWS LambdaのPrivateLink対応」の発表がありました。
LambdaのPrivateLinkを試してみたいと思います。

[AWS PrivateLink を使用してプライベート AWS ネットワーク経由で AWS Lambda にアクセスする](https://aws.amazon.com/jp/blogs/news/new-use-aws-privatelink-to-access-aws-lambda-over-private-aws-network/)

# AWS Lambda Private Linkとは

VPCエンドポイントを作成してVPCからインターネットを経由せずに
Lambda関数を管理および呼び出すためのサービスです。

# イメージ図

### PrivateLink
![lambda_privatelink_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/d4ddfb72-476a-ac28-60fa-d2f71b8dd342.png)
### インターネット経由
![lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/c1d76301-22e6-fca1-1a63-becf3f886c9a.png)


# やってみた

マネジメントコンソールからVPCの管理画面を開き、左メニューの「エンドポイント」をクリックします。

|![lambda_privatelink_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/afb1623e-5784-3a13-353e-6bb4fc5402a0.png)|
|:-:|

「エンドポイントの作成」ボタンを押します。

|![lambda_privatelink_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/cf93e649-ef0a-3e74-d5f7-2f747b184b81.png)|
|:-:|

エンドポイントの作成画面に移動するので、サービスカテゴリは「AWSサービス」を選択した状態でサービス名の検索バーに「lambda」を入力すると以下の状態になるため、サービス名を選択し、インターフェースエンドポイントを作成するVPCを選択します。

|![lambda_privatelink_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/426a3edd-882e-a5dd-f77a-c32181f819e6.png)|
|:-:|

エンドポイントを作成する可能性があるサブネットを指定します。

|![lambda_privatelink_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/e9d25e49-4eb5-7787-f58a-a4c20579e59a.png)|
|:-:|

必要に応じて、DNSオプションを有効にします。
エンドポイントに独自のDNSオプションを名を指定出来るようです。（未検証）

|![lambda_privatelink_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/e5ffa617-6e65-5b5f-3f45-00d02b52f7c6.png)|
|:-:|

セキュリティグループを指定します。
プロトコル、ポート、および送信元/送信先のIPアドレス制限が可能です。

|![lambda_privatelink_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/1e237966-fc01-3aab-c53f-1ad30ed3b42b.png)|
|:-:|

VPCエンドポイントにアクセス可能なユーザを制御するポリシーを設定します。
今回は検証のためデフォルトの「完全アクセス」を選択しました。
[Amazon Web Servicesブログ](https://aws.amazon.com/jp/blogs/news/new-use-aws-privatelink-to-access-aws-lambda-over-private-aws-network/)にIAMユーザ、ファンクションを指定するサンプルがありますので制限する場合はそちらを参考にしてください。

|![lambda_privatelink_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/8fc14dcf-20af-b7b8-f4d7-3d872cfc59b8.png)|
|:-:|

「エンドポイントの作成」ボタンを押します。

|![lambda_privatelink_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/50c6a866-9350-917c-1bba-5c1db2535810.png)|
|:-:|

以下のような成功メッセージが表示されればエンドポイントの作成が完了です。

|![lambda_privatelink_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/d259690a-5482-8245-aca9-31f2994ef1f9.png)|
|:-:|

# 設定後の確認

次に設定前後でどのように変わったのかをlambdaのエンドポイントにdigを実行して確認してみます。

### 設定前のlambdaエンドポイント
![lambda_privatelink_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/59bebaed-c8a0-7e03-04a8-663b96d0874c.png)
### 設定後のlambdaエンドポイント
![lambda_privatelink_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/be2fd297-ae1c-e063-246c-0593f629d1f0.png)

lambdaのエンドポイントのIPアドレスがグローバルIPからプライベートIPに変わっていることがわかります。

# ちなみに

Lambdaには、VPC内Labmdaと呼ばれる利用方法も可能です。

[[発表] Lambda 関数が VPC 環境で改善されます](https://aws.amazon.com/jp/blogs/news/announcing-improved-vpc-networking-for-aws-lambda-functions/)

# イメージ図

![lambda_vpc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/acd143c8-9512-728d-69c7-bccf98c19e2d.png)

# 所感

今までNATゲートウェイなどで実現していた部分が不要になるので運用、コスト面での削減が可能になり、また、異なるアカウント間でのプライベートアクセスも簡単に可能となるため、利用場面が増えるのではないでしょうか。

誰かのご参考になれば幸いです。