Oracle Database Service for Azure (ODSA)でBase Databaseを構築しAzureからOCIに接続する

# はじめに
Oracle Database Service for Azure (ODSA)構築からAzureとOCIのマルチクラウド間疎通を実装したので手順と結果をまとめます。

事前に構築手順を確認済の方は『構築-ODSAポータルからOCIリソース作成』からご参照ください！

* ODSAの公式ドキュメントはこちら
[Oracle Database Service for Azureについて](https://docs.oracle.com/ja-jp/iaas/Content/multicloud/intro.htm)

* ODSAのWebinerスライドはこちら
[【Oracle Cloud ウェビナー】一目瞭然！Microsoft Azureから使える、新しいOracle DatabaseのPaaSサービスを使ってみよう！](https://speakerdeck.com/oracle4engineer/oracle-cloud-uebina-mu-liao-ran-microsoft-azurekarashi-eru-xin-siioracle-databasenopaassabisuwoshi-tutemiyou-2022nian-9yue-21ri)


* @tkonishi さんのODSA構築手順紹介Qiita（一部引用させていただいております）
[ Oracle Database Service for Azure (ODSA)でOCI上にBase Databaseを作ってみる。](https://qiita.com/tkonishi/items/37d4f9e85bea56929890)


<!-- 各チャプター -->

<a id="#Chapter1"></a>
# 作成したODSA構成
AzureADにインスタンスを作成し、そこからOCIのBaseDBに接続する構成を作成します！

以下は手動で作成しておきます。
Azureのテナント、Vnet、インスタンス、OCIのテナント

以下はODSAが自動で作成します。
OCIのコンパートメント、VCN、DRG、BaseDB、ODSA回線（Azure Interconnect＋FastConnect）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/1a920fda-e9f6-e992-3b42-ee0fca37f321.png)


<a id="#Chapter1"></a>
# 事前準備①-ODSAポータルへのログイン確認
事前に作成済のアカウントでODSAポータルにログインできることを確認しておきます。
https://console.multicloud.oracle.com/azure

ここでAzureのアカウントとOCIのアカウントを紐づけるアカウントリンクを構築します。
手順はページ上部のドキュメント、もしくはWebinerスライドをご参照ください。

:::note warn
OCI側のユーザーはテナント管理者の権限が必要になります。
例）allow group 〇〇group to manage all-resources in tenancy
:::

<a id="#Chapter2"></a>
# 事前準備②-Azureリソースの作成
データベースを作成する前に、必要となるAzureリソースを作成しておきます。
最低限必要なのは、リソースグループ と VNET（仮想ネットワーク） です。


<dl>
  <dt>リソースグループ</dt>
  <dd>Azureのサブスクリプションの下に紐づく、リソースをグルーピングしたもの。リソース作成時には必ず一つリソースグループを指定する必要がある。ライフサイクルが同じリソースを同一のリソースグループ上にまとめたりする。</dd>
  <dt>VNET</dt>
  <dd>Azure上で論理的に分離したプライベートなネットワーク。OCIだとVCN（Virtual Cloud Network）に相当する。</dd>
</dl>

手順はこちらのQiitaをご参照ください。
[ 事前にAzureリソースの作成](https://qiita.com/tkonishi/items/37d4f9e85bea56929890#%E4%BA%8B%E5%89%8D%E3%81%ABazure%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90)

:::note info
Azureで作成したリソースグループ名はそのままOCIのコンパートメント名になります。
:::

<a id="#Chapter3"></a>
# 構築-ODSAポータルからOCIリソース作成
ODSAポータルでOCI上のデータベースを構築します。
今回はBase Database Enterprise Edition 19c を選択しました。

ODSAポータルより構築をリクエストするとODSAが自動でOCI側のリソース（VCN、サブネット、DRGなど）を作成し、
AzureのVnetとOCIのVCNを自動でNetwork Linkしてくれます。
Network Link後OCIにてデータベースの構築が始まります。





1 ODSAポータルにログインしOCIに作成するデータベースサービスを選択選択します。今回はBase Databaseを選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/5b5b1957-1de3-601c-f5f7-175b2202239b.png)

2 Azureで事前に作成したリソースグループとBase Databaseのインスタンス名を指定します。
　・Resource group：Azureで作成したリソースグループを選択
　・Name：任意の名前を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/4771451a-2ff9-48f8-cd5b-edd94d674c29.png)

3 Base Databaseの設定を行います。
　・Shape Selection：Base Databaseを動かすシェイプを選択
　・Total node count：ノード数を選択（今回RACではないので1）
　・Available data storage (GB)：ストレージサイズを選択
　・Software edition：利用するエディションを選択
　・License type：サブスクリプション or BYOLを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/55698485-26c7-4d59-2051-d2f454ce2418.png)


　・Database version：Oracle Databaseのソフトウェアバージョンを選択
　・Database name：任意のデータベース名を入力
　・Pluggable database name：任意のPDB名を入力
　・Character set：文字セットを指定
　・National character set：各国語キャラクタ・セットを指定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/4cff92aa-bddf-08f0-b7dd-cc9a6684df46.png)


4 NWの設定を行います。
　・Hostname prefix：任意のプレフィックスを入力
　・Virtual network：Azureで作成したVnet名を選択
　・OCI CIDR：OCIで作成するVCNのCIDER範囲をここで入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/5d561664-f3b0-4dd5-029f-15e4b3843867.png)

5 セキュリティ設定を行います。
　・SSH public key source：新規作成 or 鍵持ち込み
　・Password：任意のPWを入力
　・Confirm password：PWの確認


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/7e2feb6d-d7c2-81f6-3ff3-053a667d566a.png)

:::note info
「大文字、小文字、特殊文字、数字をそれぞれ2つずつ」が要件です。
:::

6 Base Databaseの自動バックアップ設定を行います。今回は自動バックアップなしで作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/9b4deec4-968e-5417-8c10-27d3294493d3.png)

7 タグ付けを行います。今回はタグ無しで作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/aaebc0a4-819c-8e6d-9800-0988d014fcf5.png)

8 設定項目をODSAが検証し、利用者は入力内容に間違いがないかレビューします。問題なければページ下部のCreateを押下します。
　・レビュー画面①
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/81880cec-262b-bd54-1cc4-3d8ba504c978.png)
　・レビュー画面②
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/b7d12c7a-c0cb-bb28-2e35-1c9684deea9b.png)

9 Generate Key Pairを選択した場合はCreate押下後に秘密鍵をDLします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/bd114acd-aa53-5919-95dc-6705b5456ae0.png)

10 リクエストが成功するとNotificationsに通知され、デプロイの進捗がキューに入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/b27a054f-b808-86bd-4033-ad6d5cefb665.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/95af9d92-d1ad-576f-1c3e-aea534b7feb2.png)

11 network linkが進捗するとOCI側のリソース作成が始まります。コンパートメントとVCNができていることがアカウントリンクされているOCIテナント上で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/7df0fe9f-6520-4157-97ab-a5e04efcc416.png)

:::note info
AzureのリソースグループとOCIのコンパートメントが同じ名前で作成されていること
OCICIDERで指定したCIDERでVCNが作成されていることが確認できます。
:::

また、VCNの概要を見てみると自動でサブネットが構築され、ODSAで利用されるDRGなどのリソースがアタッチされていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/74e3650f-6b86-ae07-d1ce-2f225bd14984.png)

12 Network Link が完了すると続いてBase Databaseの構築が開始されます。
　　Network Linkの所要時間は20分程度でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/2712d026-d556-82d8-c1e4-c5e984127ac0.png)

OCIコンソール上でも作成されたコンパートメント配下でBase Databaseの作成が行われていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/e7fbd141-0534-3e4c-b85c-9c7f0301e524.png)

13 Base Databaseの作成が完了するとODSAの構築が完了です。
 Base Database構築の所要時間は70分程度でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/aa237db7-7a04-226f-80f6-e49ae19d0c9c.png)


おまけ①
　構築が完了するとODSAポータル上で作成したBase Databaseの概要が確認できたりしますます。
　ここではデータベースの起動・停止・バックアップ取得設定などの管理などが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/0dae54fb-bfe4-39b6-dcff-935f3af91f65.png)

おまけ②
　OCI側のAuditログを確認してみると、ODSAで自動生成したリソース群はリソースマネージャーの機能を使って構築されていることがわかります。
　リソースマネージャーを確認するとちゃんとスタックやログが残っています。
　万が一ODSA構築時にエラーが発生した場合はこちらを参照すると情報が得られる可能性がありますよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/14791482-873c-25cc-a626-37ac2670410a.png)

ご参考までにDRGのサービスリミットに引っ掛かりODSAの構築が失敗したときのスタックのログです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/489a8d0e-7087-a377-fb69-2cfaf7cfc4e8.png)

※入力内容の解説については@tkonishi さんのQiitaにも詳しく記載されていますのでご参照ください。
[ ODSAポータルからBase Databaseの作成](https://qiita.com/tkonishi/items/37d4f9e85bea56929890#odsa%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%AB%E3%81%8B%E3%82%89base-database%E3%81%AE%E4%BD%9C%E6%88%90)

<a id="#Chapter4"></a>
# 接続準備-Azureのインスタンスを作成しOracle Clientをインストール
1 Azureにインスタンスを作成します。
　インスタンス作成手順は割愛させていただきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/0a42dffe-a27c-a664-2b12-4e9b656172bf.png)

2 AzureにOracle Clientをインストールします。
　今回利用したコマンドはこちら
　こちらも手順詳細は割愛させていただきます。

```
wget https://download.oracle.com/otn_software/linux/instantclient/1916000/oracle-instantclient19.16-basic-19.16.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/1916000/oracle-instantclient19.16-sqlplus-19.16.0.0.0-1.x86_64.rpm

sudo yum install oracle-instantclient19.16-basic-19.16.0.0.0-1.x86_64.rpm
sudo yum install oracle-instantclient19.16-sqlplus-19.16.0.0.0-1.x86_64.rpm
```

<a id="#Chapter5"></a>
# 接続-AzureのインスタンスからOCIのDatabaseにリモート接続！
1 ODSAポータルのPDB管理のConnectionより接続文字列を参照し（超便利）
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/4a22f641-efdd-7ef7-4240-401e71b555f1.png)

tnsnames.oraを作成。

```
odsajpdb =
(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=xx.x.xx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=p_odsajpdb.customersubnet1.cvcn.oraclevcn.com)))
```
2 インストールしたOracle Client（SQLPlus）を使って接続！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139103/a8f6a91c-c4bd-b875-29d2-b528b66a527e.png)

接続できました、成功です。
ODSAポータル上のNetwork Link構築後特にNW設定などの対応なしで疎通できました。

ODSAポータルで確認できる接続文字列か、
ここで作成したtnsnames.oraを使えばアプリケーションからも簡単に接続できますね。

<a id="#Chapter4"></a>
# まとめ
コンソール作業のみでNW設定からOCI PaaSDBの作成までやってくれるのは非常に便利ですね！
ODSA使えば煩雑な構築作業から解放されて構築期間がぐっと短縮されるのでAzure⇔OCI間のマルチクラウドが捗りそうです。
（本手順全体の所要時間はキャプチャをとりながら2時間程度で完了しました。）
作業自体は簡単でしたので是非参考にしていただければと思います。

今回作ったデータベースはまだ空っぽで疎通までに留まっていますがこれからデモデータ入れて実際にAzureからテーブル操作していってみたいと思います。


<a id="#reference"></a>
# 参考文献

* ODSAの公式ドキュメントはこちら
[Oracle Database Service for Azureについて](https://docs.oracle.com/ja-jp/iaas/Content/multicloud/intro.htm)

* ODSAのWebinerスライドはこちら
[【Oracle Cloud ウェビナー】一目瞭然！Microsoft Azureから使える、新しいOracle DatabaseのPaaSサービスを使ってみよう！](https://speakerdeck.com/oracle4engineer/oracle-cloud-uebina-mu-liao-ran-microsoft-azurekarashi-eru-xin-siioracle-databasenopaassabisuwoshi-tutemiyou-2022nian-9yue-21ri)


* @tkonishi さんのODSA構築手順紹介Qiita（一部引用させていただいております）
[ Oracle Database Service for Azure (ODSA)でOCI上にBase Databaseを作ってみる。](https://qiita.com/tkonishi/items/37d4f9e85bea56929890)