4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Cloudで誰が(自分が)作成したサービスをリストするCLIスクリプトをCopilotに生成させた

Last updated at Posted at 2025-08-15

6onoda は IBM Cloud の複数のアカウントで権限を持っています。今回棚卸しのため、自分が作成したサービスをリストする必要がありました。
IBM Cloud CLI で可能なのはわかっていましたが、今回は Copilot にそのスクリプトを生成させてみました。
いったん、アクセス可能な全アカウント、全サービスを csv に吐き出させます。そこから、作成者の ID でフィルターして自分が作成したサービスを確認します。
まあ、csv を grep してもいいけど、今回のコードはそこまで書いていません。
Excel フィルターでも csv - grep でもお好きな方へどうぞ。

なお、IAM ベースなので、Classic 環境には有効ではないと思います。
(現在、Classic 環境にリソースを持っていないので、確認していません。)

完成したスクリプトはこちら

Windows の WSL と Mac の両方で稼働確認しています。

コメントにあるとおり、IBM Cloud CLI と jq がインストールされていることが前提です。
IBM Cloud の CLI 導入の情報は、こちらにあります。
Windows WSL 環境には Linux 用を導入してください。

また、このスクリプトの実行前に「ibmcloud login (-sso)」のように、CLI から IBM Cloud にログインしてください。複数のアカウントにアクセスできる場合、どのアカウントにアクセスしても構いません。

list_ibmcloud_services_all_accounts.sh
#!/bin/bash

# IBM Cloud CLI にログイン済みであることを前提とします
# jq がインストールされている必要があります

echo "すべてのアカウントとリソースグループにあるサービスインスタンスを取得してCSV形式で出力します..."

# CSVヘッダーを出力
echo "Account GUID,Account Name,Resource Group,Service Name,Service Type,Plan,Region,Created By" > ibmcloud_services_all_accounts.csv

# 全アカウントを取得
ibmcloud account list --output json > accounts.json
account_count=$(jq length accounts.json)

if [ "$account_count" -eq 0 ]; then
  echo "アクセス可能なアカウントが見つかりません。"
  exit 1
fi

for i in $(seq 0 $(($account_count - 1))); do
  account_guid=$(jq -r ".[$i].Guid" accounts.json)
  account_name=$(jq -r ".[$i].Name" accounts.json)

  echo "アカウント: $account_name ($account_guid) に切り替え中..."
  ibmcloud target -c "$account_guid" > /dev/null

  # 全リソースグループを取得
  resource_groups=$(ibmcloud resource groups --output json | jq -r '.[].name')

  for rg in $resource_groups; do
    echo "リソースグループ: $rg を処理中..."
    ibmcloud target -g "$rg" > /dev/null

    ibmcloud resource service-instances --output json | jq -r --arg rg "$rg" --arg aguid "$account_guid" --arg aname "$account_name" '
      .[] | select(.created_by != null) |
      [$aguid, $aname, $rg, .name, .resource_name, .resource_plan_name, .region_id, .created_by] |
      @csv
    ' >> ibmcloud_services_all_accounts.csv
  done
done

rm -f accounts.json

echo "CSVファイル ibmcloud_services_all_accounts.csv に出力が完了しました。"

作成者 ID

csv に表示される 作成者 の ID は、メールアドレスではなく、IBMid-xxxxx という形式で表示されます。

これは、下記から、ユーザーの詳細を開くと、

こちらで確認できるものです。

image.png

csv を Excel などで開いて、自分の ID でフィルターしてくだい。
もちろん、csv を開く前に grep してもいいです。

なお、Windows WSL の場合、下記で WSLホルダーをエクスプローラで開けます。

explorer.exe .

Copilot との対話

アカウントの切り替え

最初に生成されたコードはアカウントの切り替えに「ibmcloud account switch」を使おうとしていました。
そのようなオプションは無く、正しくは「ibmcloud target -c 」なので、それを指示して、修正してもらいました。
しかしアカウントの取得が、それでも出来ませんでした。

アカウント ID と名前の取得

ibmcloud account list --output json > accounts.json

何回かの試行のうちに、上記のようにいったんアカウントを json ファイルに吐き出して、そこから、下記のように「id」と「name」でアカウント ID と名前の取得をするコードを生成してきました、

for i in $(seq 0 $(($account_count - 1))); do
  account_id=$(jq -r ".[$i].id" accounts.json)
  account_name=$(jq -r ".[$i].name" accounts.json)

しかし、実際の属性は、上記のコードのように「Guid」と「Name」です。

試しに「ibmcloud account list --output json には、idアトリビュートはありません。Guidに書き換えてください」と指示してみましたが「Guid」ではなく、小文字の「guid」に変更しただけでした。
ここは、指示をあきらめ自分でスクリプトを書き換えました。

修正しなかった点

「Service Type」と「Plan」というカラムがありますが、ブランクになります。
スクリプトを生成させた目的は達したのと、適当な情報が「ibmcloud resource service-instances --output json 」から、取得でき無さそうだったので、修正をやめました。
ちなみに「type」という属性はあるのですが、特定のアカウントでみると、すべてに「service_instance」と入っていました。
何時、作成して変更したかの「created_at」とか「updated_at」の属性はありますので、そちらを追加する方が、有用かもしれません。

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?