Oracle Graph をクラウド上で構築（ADB 編）

![cloud-adb.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/1907ebdc-f066-57e4-8f4b-0ec1686bcd70.jpeg)
Oracle Graph を Oracle Cloud の Always Free Services 上に構築する手順は[こちら](https://apexapps.oracle.com/pls/apex/dbpm/r/livelabs/view-workshop?wid=686)のワークショップで詳しく説明されていますが、日本語で簡潔に書かれている記事もあると便利かと思いますので、こちらにまとめたいと思います。

Oracle Cloud 上では Graph Server の Marketplace イメージが提供されているのでこちらを使うのが簡単です。Always Free Services に含まれる Compute インスタンスを使って起動すれば常時無料で使うことができます。

Oracle Graph はオンプレ／クラウドを問わず全ての Oracle Database のエディション（ただし、12.2 以降）で使うことができます。Oracle Cloud 上では、フルマネージドサービスである Autonomous Database (ADB) が Always Free Services に含まれています。Database Cloud Service (DBCS) を使う場合には [こちらの記事](https://qiita.com/ryotayamanaka/items/ef3c7bef872daf276979) を参考にしてください。

## ADB の作成

通常通りに ADB（Autonomous Transaction Processing または Autonomous Data Warehouse）を作成します。この手順については省略します。

ここでは `adb1` という名前で作成しているとします。
![adb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/8ac8d3bc-0703-2be2-1b26-3af3576c65ae.png)

## ネットワークの作成

ネットワークを作成して必要なポートを開放します。

Networking > Virtual Cloud Networks に進みます。
![Screen Shot 2022-11-24 at 10.54.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/0108ea82-17d3-c674-9788-9554e722bb46.png)

ウィザードを使用するのが簡単です。Start VCN Wizard > Create VCN with Internet Connectivity > Start VCN Wizard と進んで、特に設定を変更することなく新しい VCN を作成してください。
```
VCN Name: vcn1
その他の項目: 設定変更は必要ありません
```
![Screen Shot 2022-11-24 at 10.56.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/ee76ef35-2b44-aa0f-ae85-40fff82f5696.png)

ポート 7007 をアクセス可能にします。Virtual Cloud Networks > vcn1 > Public Subnet-vcn1 > Default Security List for vcn1 > Add Ingress Rules と進み、次のルールを作成します。実利用では、セキュリティを高めるためにクライアントの IP アドレスを制限してください。
```
Source Type: CIDR
Source CIDR: 0.0.0.0/0
IP Protocol: TCP
Source Port Range: (All)
Destination Port Range: 7007
Description: 例）Graph Server
```
![Screen Shot 2022-11-24 at 11.00.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/80a7f2c3-2514-2c9e-064b-d6fe7510c61b.png)

## Graph Server の作成

Marketplace タブに移動し「Graph Server and Client」を検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/59759cae-5656-0d60-3ae7-c5e28a19d2c3.png)

ここでは、バージョン 22.4.x を選択します。
![Screen Shot 2022-11-24 at 11.06.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/643c618b-2cec-5dc3-45dd-9485eceab103.png)

Stack Information は変更する必要はありません。
![Screen Shot 2022-11-24 at 11.10.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/e6c674e6-2d64-7b2f-f996-1809a2369a16.png)

Configure variables の画面に進み、作成する Compute インスタンスのシェイプを選択します。Always-free に含まれるシェイプは二種類あり、Use ARM-based compute にチェックをつけると VM.Standard.A1.Flex、つけないと VM.Standard.E2.1.Micro を選択できます。大容量のメモリを搭載できる A1.Flex が取得できればラッキーですが、リジョンによっては空きがないことも多いです。
![Screen Shot 2022-11-24 at 11.19.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/a12f55dd-1b7c-6ec1-fba2-c15ff09ce4b9.png)

まずは取得しやすい E2.1.Micro で作成手順を確認しておき、必要に応じて A1.Flex を取得できるかどうか試してみるのがおすすめです。
![Screen Shot 2022-11-24 at 11.20.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/ce0840cb-e6cb-6a99-ed6f-2de5f3d6737b.png)

後に SSH で接続するためにパブリックキーをアップロードして、先に作成した VCN とパブリック・サブネットを選択します。
![Screen Shot 2022-11-24 at 11.24.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/3d220124-ec66-07a1-27ac-22593dda96a3.png)

最後に、JDBC URL は次のように指定しておきます。Graph Server からデータベースへの接続のために Wallet と呼ばれる仕組みを使います。`adb1_low` の部分は作成した ADB の名前に合わせて変更してください。`/etc/oracle/graph/wallets` はこれから作成される Compute インスタンス上のディレクトリなので、このまま入力してください。後の手順でここに Wallet を格納します。
```
jdbc:oracle:thin:@adb1_low?TNS_ADMIN=/etc/oracle/graph/wallets
```
![Screen Shot 2022-11-24 at 11.25.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/ff52e39f-139d-8ff8-d792-4fc93884b513.png)

スタックを作成します。通常、数分で完了します。
![Screen Shot 2022-11-24 at 11.54.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/f6314907-0d60-31b2-15d2-6b85cf1d3615.png)

ログの最後に Compute インスタンスの IP アドレスやグラフ可視化アプリの URL が出力されています。
![Screen Shot 2022-11-24 at 11.55.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/f06bb8d1-d6ce-9d56-901b-717ed86d28ae.png)

無料インスタンスの空きがない場合には作成が失敗して、ログに「Out of host capacity」のメッセージが出力されます。Edit job でシェイプを変更して再度試してみてください。
![Screen Shot 2022-11-24 at 10.43.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/3dd2c3ff-bcdb-d230-61ac-8a75e32d1926.png)

## ADB Wallet の設置

Oracle Cloud コンソールから対象の ADB のページに移動します。
![database-atp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/82c35753-0c79-542b-6f8e-95f53c0e8a1c.png)

DB Connection をクリックします。
![wallet-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/8003929b-89f3-7a0b-190f-d240818d5a9e.png)

Instance Wallet を選択してダウンロードします。
![wallet-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/d168e6cc-e0d1-5450-d8e2-254f1db07c1c.png)

Wallet を保護するためのパスワードを入力します。
![wallet-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/1f626a51-bbaa-8555-d12f-3c4264169cf2.png)

ダウンロードした Wallet（ZIP ファイル）を Compute インスタンス上の `/etc/oracle/graph/wallets` ディレクトリ（イメージ起動時に指定した場所）にアップロードします。

```sh
scp -i <private_key> Wallet_<database_name>.zip opc@<public_ip_for_compute>:/etc/oracle/graph/wallets

例：
scp -i key.pem ~/Downloads/Wallet_adb1.zip opc@203.0.113.14:/etc/oracle/graph/wallets
```

Wallet を展開するため、Compute インスタンスにログインします。

```sh
ssh -i <private_key> opc@<public_ip_for_compute>

例：
ssh -i key.pem opc@203.0.113.14
```

ZIP ファイルを解凍し、グループ権限を変更します。

```sh
cd /etc/oracle/graph/wallets/
unzip Wallet_adb1.zip
chgrp oraclegraph *
```

## ユーザーの作成

管理者権限を用いて、上で作成したロールを持つユーザーを作成します。

メニューから Database Users を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/3f99b93f-6fc0-bc91-0f43-6b4d9333d03d.png)

Create User ボタンをクリックして、ユーザー名とパスワードを入力します。Graph と Web Access を有効にして表領域のクォータを UNLIMITED に設定しておきます。
![Screen Shot 2022-11-24 at 12.10.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/47c91aa3-0926-c527-8279-17d787f76aba.png)

後々、ユースケースによっては「グラフを公開して他のセッションとシェアする」ことがあるため、Granted Roles タブから、このユーザーに PGX_SESSION_ADD_PUBLISHED_GRAPH ロールを追加しておきます。
![Screen Shot 2022-11-24 at 18.14.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/b34ba2a8-6a5b-fb9f-24d3-7b538cbca6df.png)

ユーザーを作成したら Database Actions にログインし直します。
![user-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/d9093708-67f0-000f-62ca-c26da977c108.png)

新しいユーザーでログインできることを確認します。
![user-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/23a731f6-0a1d-a063-07cb-f9b4637ee7d5.png)

## グラフ可視化アプリへのログイン

ウェブブラウザで、`https://<public_ip_for_compute>:7007/ui` を開きます。http ではなく https であることに注意してください。

Marketplace イメージは自己署名 SSL 証明書とともに配布されているため、実運用では独自の証明書に変更する必要があります。自己署名 SSL 証明書のまま使っている場合、ウェブブラウザには警告が表示されます。

Chrome の場合は、警告ウィンドウが出てきたら「thisisunsafe」とキーを打つと（これはどこにも入力されませんが）画面が遷移します。
![login-chrome.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/c6efd4b7-2c23-17b0-97f3-9b0d59b68a73.jpeg)

Firefox の場合 Advanced > Accept the Risk and Continue をクリックします。
![Screen Shot 2022-11-24 at 12.24.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/4b603592-3932-49d4-1a1a-2e47c7d1fd30.png)

先に作成したデータベースユーザーでログインします。
![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/a7c58e00-8f45-ebf6-baef-9603f464713b.png)

すでに「hr」というサンプルのグラフがロードされているので、そのままクエリの実行ボタンを押すと取得されたサブグラフが描画されます。
![Screen Shot 2022-11-24 at 12.20.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/047a39bb-50f7-a019-eb4b-86dd17773772.png)

以上で構築完了です。他の記事を参考に、様々なグラフの作成や描画を試してみてください！