0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Autonomous Database]OCI API Gateway経由でOracle管理ORDSを使ったREST APIにアクセスしてログを取得する

Last updated at Posted at 2025-03-03

はじめに

Autonomous DatabaseにはOracle管理のORDSが付属しておりすぐにREST APIの開発ができます。しかしOracle管理のORDSではREST APIへのアクセスログを残す方法がありません。そこで、API Gatewayとの組み合わせを試しました。

前提条件

  • DEMOUSER1というユーザーのEMP表を利用
  • Autonomous Databaseはプライベート・エンドポイントを利用。ただし、インターネット経由で付属ツールのアクセスができるようパブリック・アクセスを許可済み
  • Autonomous DatabaseとAPI Gatewayは同じプライべート・サブネットに配置
  • プライベート・サブネットにアクセスできるコンピュート・インスタンスを同じVCNのパブリック・サブネットに作成済み

1.REST APIを作成する

Autonomous Database(というかOracle Database)は二通りの方法でREST APIを作成できます。

  • AutoRESTによるデータベース・オブジェクトのRESTfulサービス化
  • 手動によるRESTfulサービスの作成

データベース・オブジェクトでAutoRESTを有効化するとそのオブジェクトにRESTでのアクセスができるようになります。とても簡単にデータベース・オブジェクトをRESTデータソースとして公開ができるのですが、事前定義された形式になるため、目的にあわない場合はハンドラをSQL、PL/SQLで設定する手動による作成が選べます。
今回は検証ということでAutoRESTでREST APIを作成します。Autonomous Databaseの場合はGUIのDatabase Actionsでできるのでさらに簡単です。

DEMOUSER1でDatabase ActionsにログインしSQLにアクセスします。次にEMP表を検索し、右クリックしてREST→有効化を選択します。

image.png

image.png

オブジェクトのRESTの有効化の画面が表示されます。今回はデフォルトのまま有効化します。コードの表示で実行されるSQLを確認することも可能です。

image.png

image.png

有効化後は無効化のほかcURLコマンドの確認ができるようになります。

image.png

cURLコマンドは3つのターミナルでのコマンドが確認できます。

image.png

コマンドはメソッド別にあり、例えばGET Singleだと値を指定してコマンドの確認ができます。

image.png

試しにコマンドプロンプトで実行してみます。EMP表の内容はこちらです。

image.png

7788を指定したコマンドをコピーアンドペーストしたところ、正しく7788の新井さんの結果が表示がされました。

image.png

なお、AutoRESTで作成したREST APIはDatabase ActionsのRESTで確認もできます。認証設定などはこちらで行うことができます。

image.png

2.OCI API Gatewayを構成する

次に公開されているチュートリアルを参考にAPI Gatewayを構成します。
開発者サービス→API管理→ゲートウェイを選択し、ゲートウェイの作成をクリックします。

image.png

image.png

今回使用している検証環境の割り当て制限でパブリックIPが利用できなかったため、タイプはプライベートとし、ネットワークのサブネットはプライベート・サブネットを指定しました。

image.png

作成が成功しました。

image.png

次にデプロイメントを作成します。デプロイメントを選択して、デプロイメントの作成をクリックします。

image.png

基本情報名前パス接頭辞だけ指定して、後はデフォルトのままにします。

image.png

認証認証なしにします。

image.png

ルート単一バックエンドの追加を選択し、1のcURLコマンドで試したAutoRESTで作成したREST APIのGET SingleのURLにアクセスさせるように設定していきます。
バックエンド・タイプHTTPメソッドGETを選択します。パス/accessemp/{id} としてみました。URLアクセスするREST APIのURLになりますが、引数としてパスの{id}を渡したいので、コンテキスト変数を使って${request.path[id]}と指定します。API Gatewayのコンテキスト変数はこちらのドキュメントに記載があります。

image.png

設定を確認し、作成をクリックします。

image.png

アクティブになりました。

image.png

ログも有効化します。左のリソースからログを選択し、Access Logsログの有効化Onにします。

image.png

ログの有効化の画面が表示されます。今回はデフォルトのまま、ログの有効化をクリックします。

image.png

Access Logsのステータスアクティブになりました。ログ名をクリックしてログを確認することができます。

image.png

3.アクセスしてみる

アクセスするURLは、デプロイメントのエンドポイント+ルーティングで設定したパスになります。デプロイメントのエンドポイントゲートウェイの詳細、またはデプロイメントの詳細からコピーができます。

image.png

API Gatewayのタイプをプライベートにしたので、パブリック・サブネットに配置したコンピュート・インスタンスからアクセスします。

[opc@dev1 ~]$ curl --location "https://********************.apigateway.ap-tokyo-1.oci.customer-oci.com/v1/accessemp/7788"

{"empno":7788,"ename":"新井 敦子","job":"アナリスト","mgr":7566,"hiredate":"1982-12-09T00:00:00Z","sal":3000,"comm":null,"deptno":20,"links":[{"rel":"self","href":"https://sya6vphk3pzlkhq-araadw1.adb.ap-tokyo-1.oraclecloudapps.com/ords/demouser1/emp/7788"},{"rel":"edit","href":"https://sya6vphk3pzlkhq-araadw1.adb.ap-tokyo-1.oraclecloudapps.com/ords/demouser1/emp/7788"},{"rel":"describedby","href":"https://sya6vphk3pzlkhq-araadw1.adb.ap-tokyo-1.oraclecloudapps.com/ords/demouser1/metadata-catalog/emp/item"},{"rel":"collection","href":"https://sya6vphk3pzlkhq-araadw1.adb.ap-tokyo-1.oraclecloudapps.com/ords/demouser1/emp/"}]}

正しく応答が返りました!
ログを確認してみると出力がされていることが確認できました。

image.png

詳細を参照すると以下のような情報が取得されていました。

image.png

API Gatewayで扱えるデータサイズは最大20MBとなります。例えばデータ・ダウンロードの場合、データが20MBを超えているとエラーになりますので、データを直接返すのではなくObject Storageに出力するなどを検討してください。

おわりに

Oracle管理のORDSを使用したREST APIにOCI API Gateway経由でアクセスしてみました。 
API Gatewayを挟むと、REST APIのアクセス・ログからAPIの使用状況を把握することができるので、どのAPIが最も使用されているか、どのAPIが重要でないかなどといった分析が可能になります。また、ORDSのAPIをそのまま公開したくないという場合にもAPI Gatewayが利用できます。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?