OCIの「拡張リソース問合わせ機能」を活用

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

__目次__
- [例-1. コンパートメント内のリソース検索](#例-1-コンパートメント内のリソース検索)
- [例-2. DRG使用量の確認](#例-2-drg使用量の確認)
- [例-3. 夜間停止対象のリソースの検出](#例-3-夜間停止対象のリソースの検出)

# 例-1. コンパートメント内のリソース検索

<font color=blue>コンパートメント単位でエンドユーザーを分ける</font>のは、SaaS提供者やISV（独立系ソフトウェアベンダー）にとって一般的な利用ケースです。特定のコンパートメント内のすべてのリソースを確認したい場合、「<strong>拡張リソース問合せ</strong>」を利用することで迅速に表示できます。

※ コンパートメントを削除する際、空の状態でないと削除できません。削除前に残っているリソースを確認したい場合、この機能が非常に役立ちます。

__1. OCIコンソールを使う__
OCIコンソールの上部にあるサーチボックスにマウスを置いて、「拡張リソース問合せ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/94b46456-8224-eaed-294f-b104ab5b9047.png)

「<font color=blue>コンパートメント内のすべてのリソースの問合せ</font>」を指定し、compartmentOcidを入れ替えて、「検索」をクリックします。
検索条件：`query all resources where compartmentId = 'compartmentOcid'`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/93d27993-a157-3cd4-c3b7-3a8f9ff16066.png", width="500">

数秒後、リソース検索結果が表示されます（画面を表略）。

__2. OCI CLIを使う__
コマンドの出力はJSONフォーマットで表示されるため、grepで出力を絞り込み、見やすくします。

コマンド例：oci search resource structured-search --query-text "<font color=blue>query all resources where compartmentId</font> = 'compartmentOcid'" | grep "resource-type"

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/957c8b79-a440-36d4-9de3-3a8c8efe650a.png)

# 例-2. DRG使用量の確認
DRG (Dynamic Routing Gateway)は、<font color=blue>SaaS提供者向けのネットワーク アーキテクチャの設計</font>において重要な役割を果たします。主な利用シナリオは以下の通りです。

- SaaS提供者と各エンドユーザが、オンプレミスからIPSec VPNまたはFastConnectを使用してOCIに接続する。
- SaaS提供者の管理用VCNから、DRGを経由してエンドユーザー用の各VCNに接続する。

詳細は、次の記事をご参照ください。
[OCI シングル・テナンシで複数エンドユーザー共同利用のSaaSモデル -- ネットワーク設計編](https://qiita.com/liu-wei/items/1bb4aa2c4885e50b12e0)

通常のネットワークリソースであれば、次の画面で上限値と現在の使用量が確認できますが、DRGはこの画面では確認できません（VCN以外を指定しても表示されません）。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/89fabe41-538f-e14c-89cb-aa9f31ebb3c3.png", width="550">

__「拡張問い合わせ機能」でDRGの使用量を確認する手順__

__1. OCIコンソールを使う__
「拡張リソース問い合わせ」の画面で以下の条件を入力し、「検索」をクリックします。
検索条件：`query drg resources`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f328a762-2e09-ae5e-4d6b-11889859cc82.png", width="500">

DRGの使用量がすぐに表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/847a9fd5-76da-6b98-8ee1-57f2d92f0a25.png", width="600">

__2. OCI CLIを使う__
コマンド例：
oci search resource structured-search --query-text "<font color=blue>query drg resources</font>" | grep "display-name"

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/bc5fcb08-82ce-d9eb-5825-b5ebbd77e51b.png)

# 例-3. 夜間停止対象のリソースの検出
対象リソース（Compute、DB、ADBなどのインスタンス）を毎晩自動で停止させることは、一般的な要件です。これを実現する方法はいくつかありますが、フリーフォームタグとOCI CLIコマンドを組み合わせて利用するのも一つの方法です。

__事前準備__
停止対象のリソースに対して、フリーフォーム・タグを付けています。
参考例（自由に指定できる）：
タグ・キー：<font color=blue>daily_auto_stop</font>
タグ値：<font color=blue>Yes</font>

__1. OCIコンソールを使う（画面上の確認）__
「拡張リソース問い合わせ」の画面で以下の条件を入力し、「検索」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/56c30969-5bb4-938e-03c1-7ad476f0f6f1.png", width="600">

__2. OCI CLIを使う（スクリプト）__
コマンド例：
oci search resource structured-search --query-text "query all resources where (compartmentId = '\<Your_Compartment_OCID>' && <strong>freeformTags.key</strong> = '<font color=blue>daily_auto_stop</font>' && <strong>freeformTags.value</strong> = '<font color=blue>Yes</font>' )"

対象のリソースを検出したら、インスタンス停止用のCLIコマンドと組み合わせてスクリプトを作成します。これをLinuxの<strong>crontab</strong>またはWindowsの<strong>タスク・スケジューラ</strong>)と連携させれば、リソースの定時自動停止が実現可能です。

以上

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[便利なOCI CLIコマンド例](https://qiita.com/letian/items/ed30da7a4d37a56ba8bc)

__ドキュメント__
[検索言語の構文](https://docs.oracle.com/ja-jp/iaas/Content/Search/Concepts/querysyntax.htm#Search_Language_Syntax)
[サンプル問合せ](https://docs.oracle.com/ja-jp/iaas/Content/Search/Concepts/samplequeries.htm)
[フリーフォーム・タグの理解](https://docs.oracle.com/ja-jp/iaas/Content/Tagging/Concepts/understandingfreeformtags.htm)