Private Subnet に作成した DBCS に Public Subnet の Network Load Balancer経由 で接続してみる。(Oracle Cloud Infrastructure)

表題の通り Private Subnet に作成した DBCS に、Public Subnet の NLB経由 で接続してみるやで。
彡(ﾟ)(ﾟ)

# 1. 接続トポロジー／検証環境

接続トポロジーは以下の通りです。

```
PC -> (Internet) -> NLB(Public Subnet) ┬-> RAC #1(Private Subnet)
　　　　　　　　　　　　　　　　　　　     └-> RAC #2(Private Subnet)
```

検証環境は下記記事の構成を使います。

> 検証によく使う Oracle Cloud Infrastructure(OCI) の 環境構成
> (VCN, Seculity List, 各種Gateway, Route Table, Subnet, Compute)まとめ
> https://qiita.com/ora_gonsuke777/items/08e4781af8c4f7e114ff


# 2. DBCS(EEHP, RAC) の作成

詳細は省略します。DBCS RAC(EEEP) を Private Subnet に作成します。
![NLB001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/53c81db1-2887-166f-12f0-6fa7651692e4.jpeg)



作成後に DBノード の 物理IP を確認します。
![NLB002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/d18bd23c-a8c9-0ead-5a13-ba79ce230a2d.jpeg)



# 3. NLB(Network Load Balancer) の作成

作成する LB は NLB を選択します。
![NLB003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/b68c81a1-a56e-38a3-68e2-d89433ed4ddc.jpeg)

LB名は任意、Visibility Type は Public、Public IP は Ephemeral、VCN と Subnet は予め作成しておいたものを選択します。
![NLB004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/680d8c27-0dde-5fba-a871-90dda925c7be.jpeg)


Listener名は任意、プロトコルはTCP、ポートは1521を指定します。
![NLB005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/41a243a4-8299-4521-8f3d-945d20fe0390.jpeg)

Backends名は任意、この時点で Backend Servers は指定せず、Health Check のポートは TCP/1521 に変更します。
![NLB006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/e28ad7ae-48e7-97e4-6974-96ce78d78bb2.jpeg)

レビュー画面になるので、Submitボタンを押します。
![NLB007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/57ae5b9a-8138-d4bc-d86d-3b8d8340d500.jpeg)

作成が終わりましたが、この時点では Backend Server が無いので追加で設定します。
![NLB008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/487fe9f6-cfce-29e9-a0b0-394ddd4f9f54.jpeg)

Backend Sets の画面に遷移して Add Backends ボタンを押します。
![NLB009.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/a50201d4-68f9-08fa-3654-d522d530eea3.jpeg)


RAC DBノード #1 の 物理IP を指定して追加します。
![NLB010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/86bb88aa-0d10-df79-6210-c3e8f01ff9d6.jpeg)


RAC DBノード #2 の 物理IP も追加します。
![NLB011.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/51f47654-92d7-fdef-4a43-3d4aee5d1df3.jpeg)


上手く行くと Backends の Health が OK になります。
![NLB012.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/f8b941d0-9857-d85f-01ef-0e3c6d4c2c9d.jpeg)


# 4. PC から NLB経由 で DBCS に接続

まず Pluggable Database の画面に遷移して、PDB のサービス名を確認します。
![NLB013.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/e8e0a9bc-45f6-b479-4b88-35973627f4f6.jpeg)



PC から NLB経由 で DBCS に接続します。今回は SQL Developer を使用彡(ﾟ)(ﾟ)

> ホスト名：NLB の Public IP Address
> ポート　：1521
> サービス名：上記で確認した PDB のサービス名

![NLB014.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2e593db0-9d94-ded3-9fc7-7dd2ef8a9640.jpeg)


テストに成功したので接続して SQL を実行すると……。
![NLB015.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/f407cf92-2157-0a61-b073-62ba7b5a6fb8.jpeg)

上手くいきました。


# 5. 注意事項

Backend Sets の IP に RAC DBノード の 物理IP を指定しているので、Oracle MAA には沿っていません。
今回の要件で Oracle MAA準拠するには Compute に CMAN(Connection Manager) を構成して、
NLB の Backends に CMAN を2台以上配置して NLB⇒CMAN経由でDBに接続するのがエエかと思います(未検証)
彡(ﾟ)(ﾟ)

> 5.6 Oracle Connection Managerのアーキテクチャの理解
> https://docs.oracle.com/cd/F19136_01/netag/understanding-oracle-net-architecture.html#GUID-AAEEC927-9A69-4012-AC2C-8423274F94C6
> 
> (※CMANの参考記事) How to create a database link from Oracle Autonomous Database to a private on-premise DB 
> https://qiita.com/RexZheng/items/92fb55686fff9811bfbe

# 6. まとめ

注意事項があるとは云え NLB構成による Public接続化 はお手軽です。
セキュリティに留意して、ご活用下さいね彡(^)(^)