Oracle Database@Google CloudでADBのDatabase Actionsに接続してみた

## はじめに
今回は、**Oracle Database@Google Cloud**のAutonomous Database (ADB)でDatabase Actionsに接続してみたいと思います。
通常だと、自身のPCからインターネット経由でOCIコンソールのDatabase Actionsをクリックしても以下のように表示されてしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/aee4bc2b-cd3a-1dd1-39f3-f4633de924b3.png)
踏み台 (Bastion)サーバーを作成して、Database Actionsを利用できるように設定していきたいと思います。

Database Actionsについて詳細を知りたい方は、以下をご参照ください。
[Autonomous Database - Database Actions 機能概要](https://speakerdeck.com/oracle4engineer/autonomous-database-database-actions-ji-neng-gai-yao)

## 今回構成するアーキテクチャ
今回は、下記のように自身のPCからインターネット経由で、踏み台サーバーをSSH ポート・フォワードの中継として利用し、ADBにアクセスしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/e846997f-5870-462b-a05f-c77b26f7407c.png)


## 前提条件
事前にOracle Database@Google CloudでADBを作成していることを前提としています。
また、今回は**Google Cloud CLI**を利用してポートフォワーディングを行いますので、事前に以下のリンクのガイドを参考にして、ご自身のローカルPCにインストールしてください。
なお、コマンドプロンプトやターミナルを使用して直接ポートフォワーディングを設定することも可能ですので、お好みの方法をお選びください。

https://cloud.google.com/sdk/docs/install-sdk?hl=ja

## Database Actionsに接続するまでの手順
### ①踏み台サーバーの作成
Google Cloudのコンソール上から、「Compute Engine」⇒「VMインスタンス」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/997ff93c-1a74-a2e0-1cea-a4e63151a894.png)

「インスタンスを作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/7992df46-7fbf-6754-2552-a73ada04f591.png)

今回は「新規VMインスタンス」を選択し、一からインスタンスを作成していきます。
* 名前：インスタンスの名前を設定します。
名前に使用できるのは、英小文字 (a～z)、数字、ハイフンのみで、末尾は小文字または数字である必要があります。
* リージョン：作成したADBと同じリージョンを選択します。
* ゾーン：今回は特に指定しません。
* マシンの構成：特に指定はありませんが、今回は「汎用」で低コストな「E2」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/04366a08-8c36-4a98-6820-1c461a39dd9d.png)

* マシンタイプ：低コストな「e2-micro」を選択。
* 可用性ポリシー：今回は、「標準」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/18bb2076-ec6c-b524-0ec5-3f715f66735d.png)

* コンテナ：今回はデプロイしません。
* ブートディスク：今回はデフォルトのまま変更はしませんが、「変更」を選択し表示を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/a9b1e4a1-690f-2686-6c5e-a5d1b99abdad.png)

このような画面が表示されるので、OSやブートディスクの種類、サイズを変更する場合は、こちらの設定を調整することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/757229c3-59c2-1e38-1cd9-3ef38783b9fd.png)

今回は以下の項目はデフォルトの設定のままにしておきます。
最後に「作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/f6a0f970-fd9a-9447-0c3d-cdcfe2a2584e.png)

1分もしない内に無事VMインスタンスが立ち上がりました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/d35cfcc4-93a7-4753-0a4d-4d6baacd0df4.png)

### ②ネットワークのアクセス用ルールの設定
Google Cloudのコンソール上から、「VPCネットワーク」⇒「ファイアウォール」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/49d85a73-e5c8-ece4-74a9-5b531bdf1a76.png)

「ファイアウォール ルールを作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/1a8b9ca1-9fa4-c474-4a14-57859ed9bb60.png)

### 踏み台サーバーへのSSHでのアクセスルール設定
下記の項目にないものはデフォルトの設定で問題ありません。
設定を終えたら最後に「作成」を選択します。
|項目  |設定例|
|---|---|
|名前|allow-ssh|
|ネットワーク|default (今回使用するVPC)|
|優先度|0～65535を指定。値が小さいルールほど優先順位が高くなる。|
|トラフィックの方向|上り (内向き)|
|一致したときのアクション|許可|
|ターゲット|ネットワーク上のすべてのインスタンス|
|ソースフィルタ|IPv4範囲|
|送信元IPv4範囲|接続元のIPアドレスを指定する（[確認くん](https://www.ugtop.com/spill.shtml)などのサイトで調べられる）|
|プロトコルとポート|指定したプロトコルとポート（TCP、22）|

### 踏み台サーバーからADBへ出ていくアクセスルール設定
同様にアクセスルールを作成していきます。
|項目  |設定例|
|---|---|
|名前|allow-bastion-egress|
|ネットワーク|default (今回使用するVPC)|
|優先度|0～65535を指定。|
|トラフィックの方向|上り (外向き)|
|一致したときのアクション|許可|
|ターゲット|ネットワーク上のすべてのインスタンス|
|ソースフィルタ|IPv4範囲|
|送信先IPv4範囲|ADBのプライベートIPアドレスを含む形に設定|
|プロトコルとポート|指定したプロトコルとポート（TCP、443）|

### 踏み台サーバーからADBに入っていくアクセスルール設定
|項目  |設定例|
|---|---|
|名前|allow-adb-ingress|
|ネットワーク|default (今回使用するVPC)|
|優先度|0～65535を指定。|
|トラフィックの方向|上り (内向き)|
|一致したときのアクション|許可|
|ターゲット|ネットワーク上のすべてのインスタンス|
|ソースフィルタ|IPv4範囲|
|送信元IPv4範囲|踏み台サーバーのプライベートIPアドレスを含む形に設定|
|プロトコルとポート|指定したプロトコルとポート（TCP、443）|

これでネットワークのアクセスルールの設定は完了です！

### ③Google Cloud CLIでポートフォワーディングを行う
事前に設定を終え、自身のGoogleアカウントと紐づけているGoogle Cloud CLIを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/4a174e30-8777-e0b8-f9ea-88faae14a665.png)

以下のコマンドを入力していきます。
```
gcloud compute ssh --zone "<踏み台サーバーのゾーン名>" "<踏み台サーバー名>" --project "<プロジェクトID>" -- -L <踏み台サーバーのポート>:<ADBのプライベートエンドポイントIP>:<ADBのポート>
```
:::note 
* **踏み台サーバーのゾーン名**：Google Cloudのリソースが配置されているゾーン（例: us-east4-a）
* **踏み台サーバー名**：SSH接続を行う踏み台サーバーの名前（例: bastion-server）
* **プロジェクトID**：Google Cloud プロジェクトのID（例: my-gcp-project）
* **踏み台サーバーのポート**：ポート番号は443
* **ADBのプライベートエンドポイントIP**：ADBのIPアドレスまたはURL（例: 10.0.43.204）
* **ADBのポート**：ポート番号は443
:::

踏み台サーバーのゾーン名に関しては、作成したVMインスタンスの詳細から確認可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/5bbade84-af26-56b3-39bd-8f0921f2e9a0.png)

ADBのプライベートエンドポイントIPに関しては、Autonomous Databaseの詳細のネットワークの欄から確認可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/1945d64c-e12b-edcd-a7dc-24d323ba866a.png)

コマンドを実行すると下記のようなコマンドが立ち上がるので、この状態になればポートフォワーディングは完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/4da2f8e3-2140-f562-bdc0-e206be9dd720.png)

### ④Database Actionsへの接続
ポートフォワーディングが完了したら、以下のリンクにアクセスします。
https://localhost/ords/sql-developer
ログイン画面が出てきたら以下の項目を入力します。
* ユーザー名：ADMIN
* パスワード：ADBを構築する際に設定したもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/79987fe7-6b49-6075-3d2d-4841416be66f.png)

無事ADBのDatabase Actionsに接続することができました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3072173/9a6af4d6-eed8-11ab-c515-092addeb603f.png)

## まとめ
今回は、Oracle Database@Google CloudのAutonomous Database (ADB)でDatabase Actionsに接続してみました。
最初はWindows Serverを構築しRDPで接続しようとしたのですが、Windows Serverは無償トライアルの範囲内では使えず断念。。。
なので、今回はGoogle Cloud CLIを使ってポートフォワーディングする方法を試してみました！
他にもOracleのマルチクラウドに関する記事を発信しているので、以下の関連記事も合わせてご参考ください。

## 関連記事
:::note info
**Oracle Database@Googleに関して**
* [Oracle Database@Google Cloudについてまとめてみた](https://qiita.com/yunagash/items/478e9a10f80ebcc45804)
* [Oracle Database@Google CloudでADBをプロビジョニングしてみた](https://qiita.com/yunagash/items/e44bde42f1bcebacceba)
* [Oracle Database@Google CloudでADBのDatabase Actionsに接続してみた](https://qiita.com/yunagash/items/c9443e866bbaa15d4ce8)
* [Oracle Database@Google CloudのADBでコンソール上でできる操作をまとめてみた](https://qiita.com/yunagash/items/5eb02f8482c5724582dd)
* [Oracle Database@Google CloudでCloud DNSの課金が発生する理由](https://qiita.com/yunagash/items/899b05803aae4103c042)
:::

:::note info
**Oracle Database@AWSに関して**
* [Oracle Database@AWSについてまとめてみた](https://qiita.com/yunagash/items/5f6565db017e20d20a34)
:::

:::note info
**Oracle Database@Azureに関して**
* [Oracle Database@Azureについてまとめてみた](https://qiita.com/yunagash/items/e603ef227928824921a3)
* [Oracle Database@AzureをPAYGで利用する手順](https://qiita.com/yunagash/items/1073a8a69cf4f0448960)
* [Oracle Database@AzureでADBをプロビジョニングしてみた](https://qiita.com/yunagash/items/4e17c84c8af4335f8465)
* [Oracle Database@AzureでADBのDatabase Actionsに接続してみた](https://qiita.com/yunagash/items/27001de1a602a59d9225)
* [Oracle Database@AzureのADBへData Pumpで移行してみた](https://qiita.com/yunagash/items/037d00df68d8f17fc144)
* [Oracle Database@Azureでのリージョン数のService Limit引き上げ方法](https://qiita.com/yunagash/items/60036ef2f585d8ab75bf)
* [Oracle Database@AzureでExaDB-XSをプロビジョニングしてみた](https://qiita.com/yunagash/items/cd848c4a9b585be561e6)
* [Oracle Database@AzureのExaDB-XSへData Pumpで移行してみた](https://qiita.com/yunagash/items/e8886945aa33e249132d)
:::

## 編集履歴
* 2024/12/3 記事公開