Azure AppServiceとMongoAtlasをPrivateLink安全に接続する

# 目的
AppServiceはIPが固定されたいないので、MongoAtlas側でのFWでAppServiceのみ接続可能にできません。
そこでPrivateEndpointを使ってAppServiceと安全に接続をし、MongoAtlasをロックダウンします
PrivateEndpoint接続はAzure内での経路を使うので安心です

# 全体図
AppServiceとMongoAtlasをVNet経由で接続します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/e2aa4b4c-efd1-19ea-67f0-537b3c190cbf.png)


# 流れ
1. AppService作成(すでにあるものとします）
1. VNet作成
1. MontoAtlas作成
1. VNetにAppServiceを接続

それでは準備をしていきましょう。
## VNet作成
VNetはAppServiceと同じリージョンにある必要があります。

PrivateEndpointなどを作成するといろいろなリソースが作成されますので、VNet用のリソースグループ作成をお勧めします
### リソースグループ作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/15ec0ed5-cc61-bedb-5695-89390f92ccd0.png)

### VNet作成
VNetの名称をVNetとしました（ややこしい？）

リージョンはJapan Eastです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/d826f599-ab91-1da1-bea6-6d41a642e785.png)

Monto用のサブネットを追加しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/2c8fb452-2a21-c1ab-09d7-2995a0f89ccd.png)
VNetのアドレスが10.3.0.0なのでサブネットは10.3.1.0/24としました

## MontoAtlasのPrivateEndpoint接続
NetworkAccessを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/a34a43b9-b880-de8e-14ae-dc64f84a0978.png)

PrivateEndpointを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/b45add54-c5f3-4aa1-d74c-bb5c843520d5.png)

Azureを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/ecc78041-e52e-9036-5052-7bb1bab5c51a.png)

リージョンを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/4883c15f-af5e-63d9-aef3-93b1eaeff094.png)

PrivateEndpoint作成のコマンド生成(画面の項目を埋めるとEndPoint作成コマンドが生成されます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/8a9e0824-a878-5616-b984-0b9ae18f48d8.png)

リソースグループ、VNet名、サブネット名は上記で作成したVNetの名称をコピペ
PrivateEndPointNameはこれから作成するので入力します

入力が完了すると"Create your Private Endpoint”という領域にazのコマンドが作成されるので、迷わずコピーしましょう

CloudShellを開き上記でコピーしたコマンドを貼り付け実行しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/d0b1a5dc-43d5-f84d-c417-d582afabd76e.png)

作成完了後PrivateLinkを表示しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/837dba32-4481-0e41-37af-790a6741e99d.png)

先ほど作成したPrivateEndPointができているので、プロパティを表示し、リソースIDをコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/b6c6fe35-88a5-2b10-ba4a-04749b54f81c.png)

MongoAtlasに戻り
Private Endpoint Resource IDにリソースIDをペースト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/80434a76-6cf1-646b-bd55-396f8bad51cf.png)

IPアドレスはPrivateEndPointの概要に戻りネットワークインターフェースを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/5fdec428-85aa-f74d-9a09-5002207a9b7d.png)

プライベートIPをコピーしMongoAtlasに貼り付け、Createを押しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/ab510210-0934-7e98-34eb-167c719c5b1c.png)

するとEndpointStatusがAvailableになるのでしばらく待ちましょう。

データベースに戻ると枠線が点滅してると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/c183b006-2ddd-0e9d-12e9-4000aecd9243.png)

点滅が終わったら、Connectを押します。
PrivateEndpoint用の接続先が出現しますので、アプリケーションではこの接続先を使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/84e5492d-086b-e6d5-003e-71363a29682a.png)


## AppServiceのVNet接続
AppServiceのネットワークを選択（VNetに接続するにはPremium以上が必要です）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/433c27c0-1921-49af-8894-5123cad33f3d.png)

VNet統合を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/74235016-6aa3-43c8-e3a8-b71a37529071.png)

VNetをサブネットを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136187/9361b2b7-707e-8aee-411c-7bc6160dd8e4.png)

以上でMongoAtlasとAppServiceのPrivateEndPoint接続が完了です