リソースが増えてくるとたいへん
どのクラウドもそうですが、リソースが増えてくると、どこに何があるかわからなくなってきます。
管理者としてはできるだけ野良リソースを避けたいところではありますが、コンパートメントが階層化していたり、知らないリージョンに知らないリソースがあったりと、なかなか一筋縄ではいきません。
今回は Oracle Cloudのリソース一覧のCSVリストを作成する方法をメモしておこうとおもいます。
そんなにリソースが多くない場合のかんたんなリソースの確認方法
リソースが少なければWeb UIのテナンシ・エクスプローラーで見えます。

リージョンを横断的に検索してくれて、リソースの種類でフィルタリングもできるので、サクッと確認するにはこれが便利です。
リソースが多い…
リソースが多かったり「サブコンパートメントのリソースを表示」したりすると、リソースの検索が終わるまで数分かかったりします。

また、テナンシ・エクスプローラーでは名前と場所くらいしかパッと見てわからないので、コア数やストレージサイズなどコストに影響してくる箇所を調べたいとなるとちょっと面倒です。
コスト分析の画面で極端にコストが発生しているリソースのピンポイントの確認はできますが、そうでもない野良リソースの確認は手間がかかります。
また、管理者としてはリソースを台帳化して、エクセルなどで自由にフィルタリングしたりすることが求められたりします。
ですので、今回は全リソースのCSV化を行う方法を記載します。
概要
OCIのPython SDKのサンプルに含まれている、showociというスクリプトを利用します。
基本的な利用方法は @sugimount さんの下記記事に記載されていますが、本稿はこちらの最新版となります。
Cloud Shell を使う方法
リソースが比較的少ない場合は Cloud Shell を利用する方法が一番手っ取り早いです。
リソース検索に1時間以上かかる場合はOCI WebコンソールやCloud Shell のタイムアウトが発生するので、後述のComputeインスタンスを利用する場合を検討いただく方がよいです。

画面右上の Cloud Shell から

ここに前述した oci-python-sdk の showoci.py をgitでcloneします。
git clone https://github.com/oracle/oci-python-sdk
もしくは、examplesのディレクトリを直接アップロードします

ファイル転送が終わったら、showoci.pyがある場所に移動します。
# git cloneした場合は下記ディレクトリ
cd oci-python-sdk/examples/showoci
Cloud Shellにはこのスクリプトを実行するのに必要なライブラリは全て入っているので、ここで下記コマンドを実行するだけでリスト化できます。
# 出力ディレクトリが無いと怒られます
mkdir ~/output
# -dt : Cloud Shellの場合の認証
# -ani : Identity 以外の全リソースの出力
# -cp : 対象コンパートメント
# -csv : CSVとして後述ディレクトリにファイル出力
python3 showoci.py -dt -ani -cp hogehoge -csv $HOME/output/output
OCIに怒られない速度で全リソースを順番にスキャンしていくので結構時間がかかります。
リソースが多かったり、定期実行したいなどであれば、後述のComputeインスタンスを利用する方がおすすめです。
出力されたファイルは下記のように作成されます
output_advisor_recommendations.csv
output_advisor_resource_actions.csv
output_all_resources.csv
output_announcements.csv
output_announcements_detailed.csv
output_api_gateways.csv
output_block_volumes_backups.csv
output_block_volumes.csv
output_certificates.csv
output_compute.csv
output_containers.csv
output_database_autonomous.csv
output_database_backups.csv
output_database.csv
output_database_db_all.csv
output_database_db_exascale.csv
output_database_db_exascale_vaults.csv
output_database_db_pdbs.csv
output_database_db_vm_bm.csv
output_database_goldengate_deployments.csv
output_database_mysql_backups.csv
output_database_mysql.csv
output_data_catalog.csv
output_data_flow.csv
output_data_science.csv
output_errors.csv
output_file_storage.csv
output_functions_apps.csv
output_functions_fns.csv
output_genai_agent.csv
output_genai_agent_kb.csv
output_identity_compartments.csv
output_limits.csv
output_load_balancer_backendset.csv
output_load_balancer_listeners.csv
output_load_balancers.csv
output_monitor_alarms.csv
output_monitor_db_managements.csv
output_monitor_events.csv
output_monitor_topics_subs.csv
output_network_dhcp_options.csv
output_network_drg_ipsec_tunnels.csv
output_network_drgs.csv
output_network_drg_virtual_circuits.csv
output_network_firewalls.csv
output_network_firewalls_policies.csv
output_network_routes.csv
output_network_security_group.csv
output_network_security_list.csv
output_network_subnet.csv
output_network_subnet_prv_ips.csv
output_network_vcn.csv
output_object_storage_buckets.csv
output_paas_devops.csv
output_paas_oac.csv
output_paas_opensearch.csv
output_security_bastions.csv
output_security_cloud_guards.csv
output_security_kms_vaults.csv
output_security_loggings.csv
output_streams_queues.csv
全体概要のcsvと個別のリソースのcsvが作成されます。
簡単にリソース整理するのであれば、全体概要のcsvでも充分かと思います。
output_all_resources.csv をダウンロードして中身を精査してみます。


output_all_resources.csvはこんなかんじです。

例えばコスト削減したいとします。
"resource_type" でフィルタをかけると、

Compute Volume Not Attached というのがあります。
これはコンピュートにアタッチされていないボリュームということで、意図的に残していないのであれば野良ストレージということになり、比較的大きいストレージを優先的に削除していけば少しずつコストを削減できます。
resource_typeでフィルタリングして、

なんだか怪しそうなストレージを見つけて所有者と思われる人に確認を行う、という感じでコストを削っていきます。
output_all_resources.csv以外にも、リソースごとに詳細情報が記載されているcsvが出力されますので、Computeなどの細かい情報のリストは output_compute.csv に記載されています。
Computeインスタンスを利用する方法
Cloud Shellのセッション制限を超えそうなリソース数の場合や、定期実行などを想定している場合はComputeインスタンス上もしくはローカルPCでshowoci.pyを実行する事が考えられます。
その場合、oci cliは入っていない可能性もあるので、インストールします。
oci cliの初期設定を実施します
oci setup config
完了するとoci cli の config ファイルが作成されます。
デフォルトでは、configファイル内 [DEFAULT] に設定が記載されます。
今回は [DEFAULT] の認証情報を利用してテナンシ内をスキャンします。
Cloud Shellの時と同様に、gitなりファイル転送なりでスクリプトを転送します
git clone https://github.com/oracle/oci-python-sdk
cd oci-python-sdk/examples/showoci
実行コマンドがCloud Shellの場合と異なり、先ほど作成した認証情報を利用するという引数に変更します。
ついでにnohupもつけてバックグラウンド実行するようにします。
# 出力ディレクトリが無いと怒られます
mkdir ~/output
# -t DEFAULT: configファイルの[DEFAULT]の認証情報を使う
# -ani : Identity 以外の全リソースの出力
# -cp : 対象コンパートメント
# -csv : CSVとして後述ディレクトリにファイル出力
nohup python3 showoci.py -t DEFAULT -ani -csv $HOME/output/output &
あとはCloud Shellの場合と同様です。
まとめ
クラウド利用するにあたり、構築の自由度が上がるという便利な反面、野良リソースは常に課題となります。
定期的にリソースの確認を実施することをおすすめします。