[Autonomous Database]Data Transformsでプライベート・エンドポイントのBase Databaseにアクセスしてみる

# はじめに
Autonomous Databaseに付属するツールのData Transformsですが、プライベート・ネットワークにあるデータ・ソースを利用するには事前にこちらのドキュメント、Noteの設定が必要になります。

+ [15.6 Enable Access to Private Data Sources from Autonomous Database](https://docs.oracle.com/en/database/data-integration/data-transforms/using/enable-access-private-data-sources-autonomous-database.html#GUID-6C106C95-874C-4D49-90D7-646E9AD939C3)
+ How To Connect to Resources in a Private Network from Autonomous Database Data Transforms? (Doc ID 2977470.1)

そこで、プライベート・エンドポイントのAutonomous Database（ADB)のData Transformsから別のVCNのプライベート・エンドポイントにあるBase Database（BaseDB)に接続できるよう試してみました。

# 環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/17d958af-818d-6048-86f1-3600089440a8.png)

+ OCI Computeは必須ではなく、データベース接続確認のために作成しました。SQL*Plusを使うため、Oracle Linux Cloud Developerイメージを利用しています。

+ アクセス制御は考慮していません。実際にはセキュリティリストやACLなどは環境に合わせた設定が必要です。
+ 便宜上Data Transformsのコンソールにはインターネット経由でのアクセスができるようにしています。

# Autonomous Databaseの作成
プライベート・エンドポイントに作成する方法は[こちらのチュートリアル](https://oracle-japan.github.io/ocitutorials/adb/adb109-private-endpoint/)を参照してください。この記事ではData Transformsのコンソールはインターネット経由でアクセスさせたいため、「パブリック・アクセスを許可」にチェックをして、アクセスを許可するクライアントを設定します。また便宜上すべてからアクセスできるよう、CIDRブロックで0.0.0.0/0にしています。
もし「パブリック・アクセスを許可」しない場合は[チュートリアル](https://oracle-japan.github.io/ocitutorials/adb/adb109-private-endpoint/)の2-2,2-3の方法でアクセスが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2ed0c738-b4b6-833c-52ea-26a6516c7e25.png)


# プライベート・エンドポイントアクセスのための設定
ドキュメントに記載があるとおり、作成したAutonomous DatabaseにADMINユーザーで接続し、SQLで以下のコマンドを実行します。Noteによると2時間待つようにとあるのでそのまま放置します。

```
ALTER DATABASE PROPERTY SET ROUTE_OUTBOUND_CONNECTIONS = 'PRIVATE_ENDPOINT';
```
確認はこちらのコマンドで可能です。
```sql
SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'ROUTE_OUTBOUND_CONNECTIONS';
```

# VCNのローカル・ピアリング
VCN間のローカル・ピアリングの設定をします。ローカル・ピアリングについては[こちらのドキュメント](https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/localVCNpeering.htm#Local_VCN_Peering_Within_Region
)をご確認ください。
同じリージョン内のCIDERが重複していないVCN間でのみ可能です。

## ローカル・ピアリング・ゲートウェイ(LPG)の作成
OCIコンソールから、「ネットワーキング」 > 「仮想クラウド・ネットワーク」でAutonomous Databaseで利用しているVCNを選択し、「Resources」からローカル・ピアリング・ゲートウェイをクリックします。
ローカル・ピアリング・ゲートウェイの作成で以下を入力して作成します。

+ 名前：任意の名前
+ コンパートメントに作成：デフォルトで選択されているコンパートメント

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/fda696a6-8bb8-d595-96f5-975a829e8680.png)

同様にBase Databaseで利用しているVCNを選択してローカル・ピアリング・ゲートウェイを作成します。また、作成したローカル・ピアリング・ゲートウェイのOCIDをコピーしておきます。


## ピアリング接続の確立
Autonomous Databaseで作成したローカル・ピアリング・ゲートウェイ（ピアリング・ステータスが新規になっています）で「ピアリング接続の確立」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/5e978c70-d528-642d-22b2-ddccf5d73756.png)

「ローカル・ピアリング・ゲートウェイOCIDの入力」を選択して、コピーしておいたBase DatabaseのVCNのローカル・ピアリング・ゲートウェイのOCIDを入力して、「ピアリング接続の確立」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f84bb23e-dc0e-a417-e7e2-b51fe34b8317.png)

接続が確立できると、Base DatabaseとAutonomous Database両方のローカル・ピアリング・ゲートウェイのピアリング・ステータスがピアリング済みとなります。

## ルート表の設定
それぞれのVCNのプライベート・サブネットが使用しているルート表にローカル・ピアリングでアクセスするためのルールを設定します。使用しているルート表は、プライベート・サブネットのサブネット詳細画面で確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/6ee33063-d567-7a01-5b2e-1fbb6459f890.png)

表示されているルート表名をクリックすると、そのルート表の詳細画面になりますので、ルート・ルールの追加をクリックしてルールを追加します。

+ ターゲットタイプ：ローカル・ピアリング・ゲートウェイ
+ 宛先/CIDRブロック：先方（Autonomous Database側ならBase Database側、Base Database側ならAutonomous Database側）のVCNのCIDR
+ ターゲット・ローカル・ピアリング・ゲートウェイ: 作成したローカル・ピアリング・ゲートウェイ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2c3795fe-7b93-78cc-d748-ab9dbfab5dd1.png)


## Base Databaseのホスト名の解決
Data Transformsのプライベート・ネットワークのソースへの接続はFQDN名での接続が必要です。
Base Databaseのホスト名の解決のために、Autonomous Database側のVCNのDNSリゾルバにプライベート・ビューとしてBase Database側のデフォルト・プライベート・ビューを追加します。詳細は[こちらのチュートリアル](https://oracle-japan.github.io/ocitutorials/intermediates/private-dns/#3-%E5%90%8C%E4%B8%80%E3%83%AA%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%95%B0%E3%81%AA%E3%82%8Bvcn%E3%81%A7%E3%81%AE%E5%90%8D%E5%89%8D%E8%A7%A3%E6%B1%BA)をご確認ください。

Autonomous Database側のVCNの詳細画面でDNSリゾルバを確認し、名前をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/85cba623-4d27-f492-21a4-7c49b58d34c1.png)

プライベート・リゾルバの詳細画面でプライベート・ビューの管理をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/3d9c11c4-6853-363a-9256-9858fc5fb083.png)

コンパートメントの変更で、コンパートメントをBase DatabaseのVCNのコンパートメントに変更し、利用しているプライベート・ビューを選択して、保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/9f98ab89-0426-f862-6cc1-777481dda9dd.png)

## セキュリティ・リストの編集
Base Database側のプライベート・サブネットのセキュリティ・リストのイングレス・ルールにAutonomous Database側からBase Databaseへの接続を許可するように設定をします。

+ ソース：10.0.0.0/16 Autonomous Database側VCNのCIDER（Public SubnetのComputeからの接続テストをしたいため）
+ 宛先ポート：1521 (Base Databaseのリスナーポート）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/7866c57f-716d-18d2-72fd-e71d2599aea4.png)

## Computeで確認
Autonomous DatabaseのVCNのパブリック・サブネットに作成したComputeからSQL*PlusでBaseDBへの接続を確認してみます。接続文字列はOCIコンソールのプラガブル・データベース詳細のPDB接続で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/80f2eb50-9c7f-1ba3-cd13-75096fea405c.png)

簡易接続でSYSTEMユーザで接続確認します。
```
[oracle@compute1 ~]$ sqlplus system/WelCome12345##@basedb19c.private1.vcn1.oraclevcn.com:1521/pdb1.private1.vcn1.oraclevcn.com

SQL*Plus: Release 21.0.0.0.0 - Production on Mon Oct 7 09:13:49 2024
Version 21.13.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Last Successful login time: Mon Oct 07 2024 09:08:50 +00:00

Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.24.0.0.0
```
接続できました！

# Data Transformsで接続の作成
2時間経過していることを確認して、OCIコンソールのAutonomous Databaseの詳細画面からData Transformsを起動します。ツール構成タブからデータ変換のパブリック・アクセスURLをブラウザで開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/e9467f2b-03b3-671d-4d8d-1bf8b683c3f5.png)

::: note info
Database Actionsからの起動も可能です。
:::

Autonmous DatabaseのADMINユーザーとそのパスワードでログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/86bafd4e-dc5a-3ae9-abcf-2541f7ab240b.png)

初回アクセスや事前に設定したアイドル時間終了後の場合は、2分程度プロビジョニングの時間が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/ddbb7052-c493-5bc7-c6e6-ac7e5512797c.png)

起動すると、Data Transformsのホーム画面となります。Data TransformsのメニューからConnectionsを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/4cda7dd7-c1b8-a67e-da42-c9a010073c1e.png)


Base DatabaseとAutonomous Databaseへの接続を作成します。Autonomous Databaseの接続はデフォルトで作成されていますが、接続サービスがLOWサービスでの固定となるため、他のサービスが利用できるよう別に作成をします。

Create Connectionをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/02d6c4f5-7cb1-bf90-2a48-f12c8258be22.png)

まずBase Databaseへの接続を作成します。DatabasesタブからOracleを選択し、Nextボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2f78d619-aad3-9018-a6dd-cc49f53706d0.png)

以下を設定します。Connectionsに指定する文字列は、Base Databaseのコンソールから接続したいプラガブル・データベースの接続文字列を@の後に指定します。

+ Connection Name：任意の名前
+ Connections：以下のいずれかのフォーマットで設定
    + jdbc:oracle:thin:@<host>:<port>:<sid>
    + jdbc:oracle:thin:@<host>:<port/ServiceName>
    + jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=<host>)(PORT=<port>)(CONNECT_DATA=(SERVICE_NAME=<Service Name>)))
+ User: 接続ユーザ名
+ Password: 接続ユーザのパスワード

例えば、簡易接続を使った場合は次のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/9d960fc7-d67f-6ebe-b6e0-883fa51cf1b0.png)

Test Connectionsで接続テストを行い、以下のように接続が成功すればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/567346d4-d610-c65d-08f7-5726e19dd9c5.png)

Autonomous Databaseの接続も同様に作成します。

::: note 
試してみたところ、ウォレットファイルのアップロードやTLSの接続文字列をそのまま利用してもエラーになったため、成功した方法を記載しています。（2024年10月時点）
:::

接続文字列はAutonomous Databaseのコンソールからデータベース接続で確認できます。TLS認証はTLS、アクセスはプライベート・エンドポイントを選択し、表示されるいずれかのTNS名の接続文字列をコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/287881ec-afd9-9fda-d16a-74c6cf387c18.png)

コピーした文字列をData Transformsの接続文字列のフォーマットの@の後に記述し、ホスト名のoraclecloud.comの部分をoraclevcn.comに変更します。
(host=xxxxxxxx.adb.ap-tokyo-1.oracle**cloud**.com))
→(host=xxxxxxx.adb.ap-tokyo-1.oracle**vcn**.com))

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/ba533116-74ca-eac9-24e9-da64f11f35ef.png)

Test Connectionsで接続が成功すればOKです。

ドキュメントを確認したところ、以下のようにoraclecloud.comは予約済みであるため利用できないとありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f201f0f9-f45b-fea7-e24f-6ac59035e909.png)

ただ、oraclevcn.comでの名前もAutonomous Databaseを作成時にデフォルトで利用VCNのプライベート・ゾーンとして作成されており利用ができそうなので、それで試したところ接続できました。


# おわりに
Data Transformsからプライベート・エンドポイントにあるデータ・ソースへのアクセスを試してみました。
Data Transformsでデータ・フローを作成する方法などについては[こちらのチュートリアル](https://oracle-japan.github.io/ocitutorials/adb/adb403-data-transforms/)を参考にしてください。


# 参考資料
+ [Data Transformsドキュメント](https://docs.oracle.com/en/database/data-integration/data-transforms/index.html)
+ [Autonomous DatabaseドキュメントのData Transformsについての章](
https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-data-transforms.html#GUID-CE0965B2-5F3C-4207-915F-B9BE15BEC135)