先日の記事にて、Always FreeのAmpere A1インスタンスにMySQLサーバーをインストールし、Oracle Cloudのデータベース・ツールの接続サービスより利用できるようにしました。
Peter O'Brienさん(米国オラクル社の開発者)が、彼のブログ記事How to use the Oracle Database Tools Service to provide data to APEXで説明していますが、Oracle Cloudが提供しているSQLワークシートやデータベース・アクションは、ORDSの機能であるREST対応SQLサービス(REST対応SQLサービス自体はAPEXではなく、ORDSが実装している機能)経由で、データベースにSQLを発行しています。つまり、データベース・ツールの接続よりSQLワークシートが使えるのであれば、REST対応SQLサービスを通してSQLを実行することも可能です。APEXからもREST対応SQLサービスをデータ・ソースとして、レポートやチャートを作成することができます。Peter O'Brienさんの記事によると、データベース・ツールの接続のREST対応SQLサービスのエンドポイントの形式は以下になります。< region >はap-tokyo-1やus-ashburn-1といったリージョンの名前、< connection ocid >は接続対象の接続のOCIDです。エンドポイントURLの形式については、Oracle Cloud Infrastructure DocumentationのREST APIsのセクションにて説明されています。20201005はAPI Versionになります。
(APEXでのREST対応SQLサービスのエンドポイント指定では、末部の/_/sqlは省略されます。)
リソースのAPIキーを選択し、APIキーの追加をクリックします。
これから、Oracle Cloud側での準備として、IAMユーザーの作成、APIキーの追加、グループの作成、ポリシーの作成を行います。Oracle APEXでは、Web資格証明の作成とREST対応SQLサービスの作成を行い、動作確認を実施します。
Oracle Cloud側の準備
データベース・ツールの接続によって提供されるREST対応SQLサービスの呼び出しは、APIキーによって保護されています。そのため、APIキーを持つIAMユーザーを作成します。
Oracle Cloudのコンソールよりアイデンティティのユーザーを開き、ユーザーの作成を実行します。
ユーザー・タイプの選択として、IAMユーザーを選択します。名前はMySQLAccessUser、説明にはMySQLへの接続ユーザーと記述します。
以上で、作成をクリックします。
ユーザーMySQLAccessUserはすぐに作成されます。ユーザー機能の編集をクリックします。
APIキーによるアクセスのみに使用するため、APIキーだけにチェックを入れ、それ以外の機能はすべてチェックを外します。
変更の保存をクリックします。
APIキーの追加を行うダイアログが開きます。
方法にはいくつかの選択肢があります。今回は、事前の作業が不要な手順であるAPIキー・ペアの生成を選択します。秘密キーのダウンロードをクリックすると、秘密キーがファイルとしてダウンロードされます。ダウンロードされた秘密キーのファイルは、大事に保管してしておきます。
秘密キーをダウンロードした後に、追加をクリックします。
構成ファイルがプレビューされます。ここでプレビューされている情報は、APEXのWeb資格証明を作成する際に使用するので、コピーをクリックします。後で参照できるように、コピーした内容をファイルなどに保存しておきます。
閉じるをクリックします。
APIキーが登録されると、ユーザーの準備は完了です。
続いてアイデンティティのグループを開き、グループの作成を実行します。
グループMySQLAccessGroupが作成されます。リソースのグループ・メンバーを開き、ユーザーをグループに追加をクリックします。
ユーザーにMySQLAccessUserを選択し、追加をクリックします。
グループMySQLAccessGroupに、APIキーを持ったユーザーMySQLAccessUserが追加されました。
このグループMySQLAccessGroupに、データベース・ツールの接続の利用を許可するポリシーを定義します。
アイデンティティのポリシーを開き、ポリシーの作成を実行します。今回の作業はFree Tierアカウントで行っており、コンパートメントは積極的に使っていません。MySQLへの接続もルート・コンパートメントに作成しているため、ポリシーもルート・コンパートメントに作成します。
Allow group MySQLAccessGroup to use database-tools-connections in tenancy
Allow group MySQLAccessGroup to read secret-family in tenancy
Allow group MySQLAccessGroup to read database-tools-connections in tenancy
以上を設定し、作成をクリックします。
以上で、Oracle Cloud側の準備は完了です。
Web資格証明の作成
作成したユーザーMySQLAccessUserを使って、Oracle APEXのWeb資格証明を作成します。Web資格証明はワークスペースに作成します。そのため、アプリケーションが無くても作成できます。
作成するWeb資格証明の名前は、MySQL Accessとします。認証タイプにOracle Cloud Infrastructure (OCI)を選択します。
IAMユーザーMySQLAccessUserにAPIキーを追加した際に表示された、構成ファイルのプレビューを参照します。
OCIユーザーIDとして、user=で指定されているocid1.userで始まる値を入力します。OCI秘密キーとして、APIキーの追加を行なったときにダウンロードした秘密キーを貼り付けます。OCIテナンシIDとして、構成ファイルのtenancy=として指定されているocid1.tenancyで始まる値を指定します。OCI公開キー・フィンガープリントとして、fingerprint=で指定されている値を入力します。
以上の設定を行い、作成をクリックします。
REST対応SQLサービスの作成
最初にデータベースの接続より、REST対応SQLサービスでアクセスする対象の接続のOCIDを取得しておきます。
ワークスペース・ユーティテリティのREST対応SQLサービスを開きます。
REST対応SQLサービスの名前をMySQLとします。エンドポイントURLは、本記事の一番最初に紹介している以下の形式で指定します。
https://sql.dbtools.< region >.oci.oraclecloud.com/20201005/ords/< connection ocid >
https://sql.dbtools.< region >.oci.oraclecloud.com/20201005/ords/< connection ocid >
次へ進みます。
資格証明として、先ほど作成しているMySQL Accessを指定します。
作成をクリックします。
エンドポイントURLおよび資格証明が正しく設定されていると、REST対応SQLサービスの作成に成功します。
デフォルト・データベースとしてsakilaを選択し、デフォルト・データベースの設定をクリックします。
REST対応SQLサービスの一覧に、MySQLが表示されます。
以上で、MySQLにアクセスするOracle APEXのアプリケーションを作成する準備ができました。
REST対応SQLサービスは、その接続先がOracle DatabaseであるかMySQLであるかに関わらず、APEXのデータ・ソースとしては同様に扱うことができます。ただし、記述するSQL自体はMySQL向けにする必要があります。例えば、MySQLでは大文字と小文字が区別されます。
完