OCI「プライベートエンドポイントアクセスのみ」で作成したAutonomous Databaseにインターネット経由で接続する方法（ネットワークロードバランサー（NLB）経由でADBに接続）

## はじめに
こんにちは。NTTデータ先端技術の@EumJinmanです。
本記事は、Oracle Cloud Infrastructure（OCI）「プライベートエンドポイントアクセスのみ」で作成したAutonomous Database（ADB）にインターネット経由で接続する方法の１つとして<b>方法その2 : ネットワークロードバランサー（NLB）経由でADBに接続</b>を紹介します。

その他接続方法や、全体の概要については以下のリンクをご確認ください。

全体の概要：[全体の概要](https://qiita.com/EumJinman/items/e9e63b5804e8634e0543)

方法その1：[コンピュートインスタンス経由でADBに接続](https://qiita.com/EumJinman/items/b35ffe06776d82cfe255)

方法その3：[Bastionサーバ経由でADBに接続](https://qiita.com/EumJinman/items/cf427aa588b8540ff9c3)

## 目次
1. 概要及び、構成
2. 環境情報
3. 前提条件
4. ADB 用バックエンドの追加
    4-1. バックエンド・セットの作成
    4-2. バックエンドの追加
    4-3. リスナーの作成
5. クライアント環境での設定及び、接続確認
    5-1. ホストファイルの編集
    5-2. SQL DeveloperでADBに接続
6. まとめ

## 1. 概要及び、構成
![構成図ネットワークロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/09b5c6c0-d6ac-46af-a25b-4db161ce24e7.png)
ネットワークロードバランサー（NLB）を利用し、プライベートエンドポイントのADBにトラフィックを転送する方法です。<b>NLBの設定が必要ですが、NLBを通じて接続を管理することで設定や、運用がシンプルになります。</b>
※NLB自体の使用料金は発生しない。

## 2. 環境情報
#### クライアント環境
OS：Windows 10
接続ツール：SQL Developer 24.3.1

#### OCI環境
リージョン：ap-northeast-1（アジアパシフィック (東京)）

#### ADBの情報
ワークロード・タイプ：Oracle Autonomous JSON Databases
データベースのバージョン：19c
アクセスタイプ：プライベートエンドポイント

## 3. 前提条件
#### クライアント環境
①SQL Developerがインストールされていること
②クライアント環境からNLBが作成されているパブリックサブネットに接続できること

#### OCI環境
①ネットワークロードバランサーが作成されていること
②ADBが作成されていること
③パブリックサブネットのセキュリティリストにクライアント環境から接続するための適切なイングレスルールが設定されていること。（例:ADBポート1522など）
④プライベートサブネットのセキュリティリストにNLBから接続するための適切なイングレスルールが設定されていること。（例:ADBポート1522など）
⑤クライアント環境の任意の場所にWalletがダウンロードされていること

## 4. ADB 用バックエンドの追加

### 4-1. バックエンド・セットの作成
実際にトラフィックを処理するバックエンドを追加・管理するためのバックエンドセットを作成します。

OCIコンソールページ左上から「ナビゲーション・メニュー」→「ネットワーキング」→「ロードバランサ」→「ネットワークロードバランサ」→「対象のネットワークロードバランサ」順にクリックし、ネットワークロードバランサ詳細ページに移動から「バックエンド・セットの作成」をクリックします。
![スクリーンショット (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/0c758969-4160-46ed-adbd-e7fa28147e24.png)

バックエンド・セットの作成ページから以下の情報を入力し、「バックエンド・セットの作成」をクリックします。

・バックエンド・セット名：バックエンド・セットの名前
・ソースIPの保持：チェックを外す
・プロトコル：TCP
・ポートオプション：1522

<b>※ソースIPの保持がチェックされている場合、バックエンド・タイプがIPアドレスのバックエンドが追加できなくなります。</b>（デフォルトではチェックされている）

![スクリーンショット (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/cb0f2a83-7f90-49f0-948d-6a0d303f48f4.png)

### 4-2. バックエンドの追加
ネットワークロードバランサーから対象のADBにトラフィックを転送するためのバックエンドを追加します。

4-1で作成したバックエンドセットページに移動し、「バックエンドの追加」をクリックします。
![スクリーンショット (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/f9c0d301-a0b2-4c31-a050-871c47a4bf95.png)

バックエンドの追加ページから以下の情報を入力し、「バックエンドの追加」をクリックします。

・バックエンド・タイプ：IPアドレス
・IPアドレス：ADBのプライベートIPアドレス
・ポート：1522

![スクリーンショット (65).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/fe06b019-199c-4c3c-b5c1-76a804cbba11.png)

### 4-3. リスナーの作成
クライアントからのリクエストを受け付け、適切なバックエンドセットに転送するためのリスナーを作成します。

4-1でバックエンド・セットを作成したネットワークロードバランサの詳細ページに移動し、「リスナーの作成」をクリックします。

![スクリーンショット (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/34ef0387-664b-4af1-a2d1-8c99cbc4e7f1.png)

リスナーの作成ページから以下の情報を入力し、「リスナーの作成」をクリックします。

・リスナー名：リスナーの名前
・プロトコル：TCP
・ポートを指定：1522
・バックエンド・セット：4-1で作成したバックエンドセット

![スクリーンショット (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/f2446335-f1f3-47a0-bfe1-5313157b4d1a.png)

## 5. クライアント環境での設定及び、接続確認

### 5-1. ホストファイルの編集
#### 5-1-1. ホストファイルを編集する理由
SQL DeveloperはWalletのtnsnames.oraの中に記載されているADBのホスト名を参照し、ADBに接続します。しかし、プライベートエンドポイントのADBはインタネットから直接接続できないプライベートネットワークに配置されているため、クライアント環境から正しく名前解決できず、接続失敗することになります。

クライアント環境のホストファイルを編集し、ADBのホスト名をNLBのIPアドレスにマッピングすることでクライアント環境から正しく名前解決できるようになります。

#### 5-1-2. ホストファイルの編集
クライアント環境のホストファイルにADBのホスト名をNLBのIPアドレスにマッピングする設定を追加します。

ホストファイル：C:\Windows\System32\drivers\etc\hosts
追加する設定：< NLBパブリックIPアドレス > < ADBプライベート・エンドポイントURL >
<b>※追加する設定の例：xxx.xxx.xxx.10 xxxxx.adb.ap-tokyo-1.oraclecloud.com</b>

### 5-2. SQL DeveloperでADBに接続
SQL Developerメイン画面から左上の「+」→「新規データベース接続」をクリックし、データベース接続の作成/選択画面に移動します。
![スクリーンショット (46).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/8349e579-60ad-4a12-86cf-b27d7604e886.png)

データベース接続の作成/選択画面から以下の情報を入力し、「テスト」をクリックします。

Name：接続名
ユーザー名：admin
パスワード：adminのパスワード
接続タイプ：クラウド・ウォレット
構成ファイル：Walletファイル（.zip）
サービス：接続文字列

※構成ファイルはダウンロード済みのWalletファイルをzipファイルのまま選択します。
※サービスは任意の接続文字列を選択します。（例：<小文字のADB名>_high、<小文字のADB名>_low、<小文字のADB名>_mediumなど)

![スクリーンショット (48).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/aa678e2f-cc1e-4a4f-a33d-e05ba3d874e4.png)

テスト完了し、ステータスが成功になった場合、「接続」をクリックし、対象のADBに接続します。
![スクリーンショット (50).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/d1c060e6-ae12-4e9c-a38d-6215991375bc.png)


## 6. まとめ
今回は、「プライベートエンドポイントアクセスのみ」で作成したADBにネットワークロードバランサー経由でインタネットから接続する方法について紹介しました。

ネットワークロードバランサー経由でADBに接続する方法は、NLBの設定が必要ですが、NLBを通じて接続を管理することで設定や、運用がシンプルになります。