Oracle APEX 22.1を使ってOCI MySQL Database Serviceのデータを表示 (2022/08/31)

Oracle Application Express (APEX) 22.1では、Oracle Cloud Infrastructure（OCI）のMySQL Database Service（MDS）をベースにしたアプリケーションを直接構築するために使用できるな機能がリリースされました。Autonomous DatabaseのOracle APEXを使ってOCI MDSの表データを表示してみました。Oracle APEXのORDSの「REST対応SQLサービス」を活用することで実現できます。



# 作業ステップ

- （事前準備）
    - （Oracle APEX環境としての）Autonomous Databaseの作成
    -  MySQL Database Service(MDS)の作成
    -   パスワードシークレットの作成
- OCIデータベース・ツールでMDSへの接続の作成
    - プライベート・エンドポイント
    - 接続
- Oracle APEXのアプリケーション作成
    - Oracle APEX でWeb資格認証の作成
    - REST対応SQLサービスの作成
    - Oracle APEXアプリケーションの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/bfe788d6-c420-4b98-21f1-9de204d4da4d.png)


# 事前準備
#### （Oracle APEX環境としての）Autonomous Databaseの作成
OCIチュートリアル：[101: ADBインスタンスを作成してみよう](https://oracle-japan.github.io/ocitutorials/database/adb101-provisioning/) を参考にAutonomous Databaseを作成します。
Oracle APEXの利用が目的なのでワークロード・タイプ「APEX」として少ないコストで構成することもできます。

#### MySQL Database Service(MDS)の作成
OCIチュートリアル：[その9 - クラウドでMySQL Databaseを使う](https://oracle-japan.github.io/ocitutorials/beginners/creating-mds/) を参考にMySQL Database Serviceインスタンスを作成します。

#### パスワードシークレットの作成
MySQLのデータベースユーザのパスワードを格納するパスワードシークレットをOCI VaultのOCIシークレットとして作成します。
[[OCI] OCIシークレットを使ってOracle FunctionsからAutonomous DBに接続してみた。](https://qiita.com/kenwatan/items/5867a06ef6a00749dcf0) の前半部分が参考になります。


# OCIデータベース・ツールでMDSへの接続の作成
## プライベート・エンドポイントの作成
- OCI Webコンソールで「開発者サービス」から[データベース・ツール]:[プライベート・エンドポイント]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/2e97ca33-4796-b532-3e0e-e7d471ac0e30.png)

- [プライベート・エンドポイントの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/c9047534-37f9-d7d5-9b4b-89cdadf0db72.png)

- プライベート・エンドポイントの名前を入力
    - プライベート・エンドポイントの名前を入力
    - 「ネットワーク情報の入力」を選択し、MDSインスタンスが属しているプライベートサブネットを選択
    - 「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/06a3b227-cd41-2dea-b67f-7a4fdffa51d7.png)


## 接続の作成
- OCI Webコンソールで「開発者サービス」から[データベース・ツール]:[接続]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/524e7b3b-5d80-4548-48b5-039ed1328c2f.png)

- [接続の作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/29c2786c-ca85-d035-6d71-055999c23d9c.png)
- 接続詳細 で以下の入力
    - 接続の名前
    - 「データベースの選択」を選択
    - データベース・クラウド・サービス：「MySQLデータベース」を選択
    - 作成済みのデータベース・システムを選択
    - ユーザー名：MySQLデータベースのユーザ名を入力
    - ユーザー・パスワード・シークレット：MySQLユーザのパスワードを格納したシークレットを選択
    - プライベート・エンドポイント：作成済みのプライベート・エンドポイントを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/4913410f-6b4e-14d8-af33-88ad3093fbf9.png)
- SSL詳細 で SSLモード「必須」を選択し「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/16464cc6-019c-a258-36a9-4835bf284641.png)




# Oracle APEXのアプリケーション作成
## Oracle APEX でWeb資格認証の作成
#### 資格認証情報の収集
- APIキーの生成
OCI Webコンソールからユーザ名の「ユーザー設定]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/53bb8541-ef4e-6b7b-f483-c7ffe37f13be.png)

｢APIキー｣の「APIキーの追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/f147145f-66a0-a2bb-79db-d284169d3366.png)


表示されたAPIキーの追加画面で「APIキー・ペアの生成」新規にキーペアを生成し、「秘密キーのダウンロード」ボタンをクリックし、秘密キーファイルを保存(既存のpem フォーマットの秘密鍵・公開鍵のキーペアの使用も可能)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/39d7cb7e-fada-4e2e-0027-450067ab6457.png)

OCIユーザの詳細画面で「構成ファイルの表示」をクリックし以下の情報を準備
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/3dacd6a4-27c5-ee8b-7af7-39893fcc4a43.png)

- ユーザーのOCID
- テナンシのOCID
- fingerprint
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/29de97cf-e61b-8869-160c-2da8f6eee442.png)


#### Web資格証明の作成
Oracle APEXのワークスペースにログイン
（OCIチュートリアル：[105: ADBの付属ツールで簡易アプリを作成しよう(APEX)](https://oracle-japan.github.io/ocitutorials/database/adb105-create-apex-app/) を参考）
- アプリケーション・ビルダーをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/4b9cc92f-7054-4870-f96f-14f722cd1adb.png)

- ワークスペース・ユーティリティをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/5a4f2717-a7ba-3cbb-4f72-a28a778c6a51.png)

- 「Web資格証明」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/9209f659-8b67-56a5-ba2d-abcee0212a91.png)

- 「作成」をクリック
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/aee62181-2445-c5c3-5b03-8cbc9a72110e.png)

- Web資格証明の名前を入力し、認証タイプを「Oracle Cloud Infrastructure(OCI)」を選択し以下を入力
    - 「認証タイプ」：Oracle Cloud Infrastruture(OCI)
    - 「OCIユーザーID」：OCIユーザのOCID
    - 「OCI秘密キー」：APIキー・ペアの生成で生成した秘密キーファイルの中身
    - 「OCIテナンシID」：テナンシのOCID
    - 「OCI公開キー・フィンガープリント」：fingerprint
- 「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/f8997b16-5296-99d1-1788-394bb9ae56ab.png)

## REST対応SQLサービスの作成
ワークスペース・ユーティリティから「REST対応SQLサービス」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/c4f8439b-fe68-315f-6339-5f0e0d72eb9c.png)

「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/dd75910c-1eca-daa3-af05-687569505e64.png)

REST対応SQLサービスの名前を入力
エンドポイントURLには データベース・ツールで作成した接続のOCIDを以下のように指定します。

```
https://sql.dbtools.<region>.oci.oraclecloud.com/20201005/ords/<データベース・ツールで作成したMDSへの接続のOCID>
```

例 東京リージョンの場合

``` 
https://sql.dbtools.ap-tokyo-1.oci.oraclecloud.com/20201005/ords/ocid1.databasetoolsconnection.oc1.nrt.XXXXXXXX
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/efa79479-265f-0c2c-3587-de1a01ac7ac0.png)

- REST対応SQLサービスの作成 - 認証
作成したWeb資格証明を選択し、「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/931678e5-2543-a584-8a26-8993840a26af.png)

作成後、自動でREST対応SQLサービスのテストが実行され、「成功」となることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/c871a5ee-7eed-90d9-a1ef-cf4fbfb16f77.png)

## Oracle APEXアプリケーションの作成
MySQL Database Service上の表を表示するAPEXアプリケーションとして対話モード・レポートを作成します。

- Oracle APEX アプリケーション・ビルダーをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/6434d94c-7172-f22a-4a9b-774918e4bb13.png)

- 「新規アプリケーション」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/76a2bbf7-808b-8283-0f6a-d6c0c9b21d4a.png)

- アプリケーションの「名前」を入力し「アプリケーションの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/39c6d72e-b295-bd47-7057-5fc5bcc2cd49.png)

- 「ページの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/3eb2c944-74e2-d65f-b4a8-b21cb4c844e0.png)

- 「対話モード・レポート」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/208f6d2d-63c7-b24b-b628-59ea2457406e.png)

- 対話モード・レポートの作成
    - ページの名前を入力
    - データ・ソース：「REST対応SQLサービス」を選択
    - 作成した「REST対応SQLサービス」を選択
    - MDSの表/ビューの所有者、表/ビューの名前を選択
    - 「ページの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/eeb9924e-7a22-a5f7-f6cb-eb389688759c.png)

- 「アプリケーションの実行」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/8f3b63b8-3d5f-135e-8ec2-30db8b8b8ad8.png)

MDS（MySQL Database Service）のデータをOracle APEXのアプリケーションで表示されていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/b2f99ac3-8188-e29c-eba6-a7c4596cb071.png)

# おわりに

Autonomous DatabaseのOracle APEX 22.1を使ってOCI MySQL Database Serviceのデータを表示することができました。

## 参考情報
- [Get Insight on MySQL data using APEX 22.1](https://medium.com/oracledevs/get-insight-on-mysql-data-using-apex-22-1-7fe613c76ca5)
- [APEX 22.1, ORDS and the MySQL Database Service](https://www.youtube.com/watch?v=z8Xr4AZ_nIc)