はじめに
今回はIBM Cloud Object Storage(ICOS)の異なるプランに対して同条件の操作を実施し、プランごとの料金を確認してみたので、その流れを作成しています。
本検証にはIBM Cloudアカウントが前提になっており、今回Macbook(MacOS)を利用しています。
ICOSの料金プランについて
ICOSでは以下の二つのプランを提供しています。
- Standard Plan
- 最も一般的なのは 標準プラン ・インスタンスであり、ほとんどのワークロードに推奨
- One Rate Plan
- 合計ストレージ容量に比べて大量のアウトバウンド帯域幅 ( IBM Cloud 外部のパブリックネットワークで転送されるデータ) を必要とするワークロードに推奨
- 保管費用が高い代わりに価格変動部分を抑えることが可能
一般的にICOSを利用する際にはほとんどがStandard Planで問題ありませんが、大量データかつ高頻度でデータにアクセスする必要があるなどの要件の場合には、One Rate Planを利用することによってコストの最適化や場合によってはStandard Planより安価に利用することが期待できます。
以下、簡単な比較表をまとめています。
| 項目 | Standard プラン | One Rate プラン |
|---|---|---|
| 課金方式 | 従量課金:容量 + リクエスト数に応じて課金 | 固定料金:リクエスト数の影響がほぼ固定、容量課金あり |
| 容量課金 | GB 単位で従量課金 | GB 単位で従量課金 |
| リクエスト課金(PUT/GET/DELETEなど) | 従量課金であり大量アップロード・ダウンロードで増える | 基本的に固定料金でリクエスト数の影響はほぼなし |
| 用途 | 小規模・中規模ストレージ、リクエスト数が少ない | 大量の PUT/GET がある場合やリクエスト課金を一定に抑えたい |
| メリット | 容量に応じた従量課金でコスト最適化可能 | リクエスト課金を気にせず大量ファイルアップロードが可能 |
| デメリット | PUT/GET が多い場合、課金が増えていく | 容量課金は同じで、料金は固定に近いため少量データでは割高になる可能性がある |
2025年9月25日現在、One-Rateインスタンスは、リージョナルおよびシングルデータセンターのロケーションでご利用いただけますが、クロスリージョンのロケーションではご利用いただけません。 ロケーションに基づく4つの価格設定層があります。
- 北アメリカ: us-south、 us-east、 ca-tor、 mon01、 sjc04
- ヨーロッパ: eu-de、 eu-gb、 eu-es、 ams03、 mil01、 par01
- アジア: au-syd、 jp-osa、 jp-tok、 che01、 sng01
- 南アメリカ: br-sao
検証の流れ
ICOSインスタンスおよびバケットの作成
まずは検証に利用するICOSのインスタンスを作成します。
Planはインスタンスごとに適用されるため、今回はStandard Plan用のインスタンスとOne Rate Plan用のインスタンスの2つが必要となります。
また、インタンス内で実際ログデータが保管される論理的区域であるバケットもそれぞれ作成する必要があります。
ICOS画面にてインスタンスの作成をクリックします。

インフラの選択やインスタンス名、リソースグループなどの設定を行ってインスタンスを作成します。
今回のインスタンス名はわかりやすくするために、moon-standard、moon-onerateで作成しています。
(以下の手順では例の画像を貼っており、インスタンス名などが異なる場合があります。)

ICOSのインスタンスが作成されたら、次は「バケット」を作成します。
バケットの作成をクリックします。

Quick Startテンプレートを含め、複数のテンプレートが用意されていますが、今回はカスタムテンプレートにて作成しました。

バケット名や可用性の設定、リージョン、Storage Tierなどを設定し、バケットを作成します。こちらの設定はバケット作成後には変更ができませんのでご注意ください。
なお、繰り返しとなりますが、今回バケット名もインスタンス名と同様にわかりやすく区別するためmoon-standard、moon-onerateとし、両方とも東京リージョンに作成しています。

以下、Standard PlanとOne Rate Planのそれぞれのインスタンスとバケットが作成されたことがわかります。


ダミーファイルの作成とバケットへのアップロード
次は各バケットにアップロードして課金を発生するための、ダミーファイルを作成します。
今回は10GBのファイル5個、合計50GBのダミーファイルを作成しました。
ターミナルにて以下のコマンドを入力します。
mkdir -p testfiles
cd testfiles
for i in {1..5}; do
dd if=/dev/urandom of=10GB_file_$i.bin bs=1G count=10
done
これでtestfilesというフォルダーの中に10GBのダミーファイル5個で合計50GBのファイルが作成されました。
以下のコマンドにて、10個のファイルが作成されているか確認します。
ls testfiles | wc -l
moonsy@moon ~ % ls testfiles | wc -l
5
次はICOSにアップロードするためにIBM Cloudにログインします。
IBM Cloud右上のプロフィールアイコンをクリックし、CLIとAPIにログインをクリックしますと、以下のログインCLIが表示されます。IBM Cloud CLIをコピーしターミナルにコマンド入力することで簡単にログインできます。
また、必要に応じてリージョンを選択しますが、今回はインスタンスやバケットの作成通り、東京(jp-tok)を選択します。


moonsy@moon ~ % ibmcloud login -a https://cloud.ibm.com -u passcode -p xxxxxxxxxx
API エンドポイント: https://cloud.ibm.com
認証中です...
OK
ターゲットのアカウント itz-cp-jpn (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx
リージョンを選択します (または Enter キーを押してスキップします):
1. au-syd
2. in-che
3. jp-osa
4. jp-tok
5. eu-de
6. eu-es
7. eu-gb
8. ca-tor
9. us-south
10. us-south-test
11. us-east
12. br-sao
数値を入力してください> 4
ターゲットのリージョン jp-tok
API エンドポイント: https://cloud.ibm.com
Region: jp-tok
ユーザー: S.Moon@ibm.com
アカウント: itz-cp-jpn (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx
リソース・グループ: リソース・グループがターゲットになっていません。'ibmcloud target -g RESOURCE_GROUP' を使用してください
アップロードの際にはICOS CLIを利用しますが、CLIがインストールされていない場合は以下のコマンドにてインストールを行なってください。
ibmcloud plugin install cloud-object-storage
moonsy@moon ~ % ibmcloud plugin install cloud-object-storage
リポジトリー 'IBM Cloud' から 'cloud-object-storage' を検索しています...
プラグイン 'cloud-object-storage[cos] 1.10.0' がリポジトリー 'IBM Cloud' 内で見つかりました
バイナリー・ファイルをダウンロードしようとしています...
19.92 MiB / 19.92 MiB [===========================================================================================================] 100.00% 0s
20887330 バイトがダウンロードされました
バイナリーをインストールしています...
OK
プラグイン 'cloud-object-storage 1.10.0' は /Users/moonsungyun/.bluemix/plugins/cloud-object-storage に正常にインストールされました。 'ibmcloud plugin show cloud-object-storage' を使用して詳細を表示してください。
ICOS CLIが利用できるようになりましたら、まずはStandard Plan用のインスタンスにアップロードします。
Standard Plan用インスタンスにアップロードしますが、ICOSの操作対象としてCRNで紐づける必要がありますが、Standard Plan用のインスタンスに入り、詳細にて確認、コピーします。


ターミナルに戻り、以下のコマンドを入力します。その後、コピーしたCRNを入力します。
ibmcloud cos config crn
moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> <Standard Plan用インスタンスのCRN>
新しいサービス・インスタンス ID/CRN を保存しています...
OK
サービス・インスタンス ID/CRN を正常に保存しました。
CRNを指定する際にはバケットの固有CRNではなく、ICOSのインスタンスCRNを入力する必要があります。
CRN設定が完了したら以下のアップロードコマンドを入力します。
for f in ./testfiles/*; do
ibmcloud cos upload --bucket moon-standard \
--region jp-tok \
--key "testfiles/$(basename "$f")" \
--file "$f"
done
moonsy@moon ~ % for f in ./testfiles/*; do
ibmcloud cos upload --bucket moon-standard \
--region jp-tok \
--key "testfiles/$(basename "$f")" \
--file "$f"
done
OK
オブジェクト 'testfiles/10GB_file_1.bin' がバケット 'moon-standard' に正常にアップロードされました。
OK
オブジェクト 'testfiles/10GB_file_2.bin' がバケット 'moon-standard' に正常にアップロードされました。
OK
オブジェクト 'testfiles/10GB_file_3.bin' がバケット 'moon-standard' に正常にアップロードされました。
OK
オブジェクト 'testfiles/10GB_file_4.bin' がバケット 'moon-standard' に正常にアップロードされました。
OK
オブジェクト 'testfiles/10GB_file_5.bin' がバケット 'moon-standard' に正常にアップロードされました。
コンソール上のバケットでもファイルが格納されたことがわかります。

次はStandard Planと同様にOne Rate Plan用のバケットにも同じダミーファイルをアップロードします。
ibmcloud cos config crn
moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> <One Rate Plan用インスタンスのCRN>
新しいサービス・インスタンス ID/CRN を保存しています...
OK
サービス・インスタンス ID/CRN を正常に保存しました。
CRN設定が完了したら以下のアップロードコマンドを入力します。
for f in ./testfiles/*; do
ibmcloud cos upload --bucket moon-onerate \
--region jp-tok \
--key "testfiles/$(basename "$f")" \
--file "$f"
done
moonsy@moon ~ % for f in ./testfiles/*; do
ibmcloud cos upload --bucket moon-onerate \
--region jp-tok \
--key "testfiles/$(basename "$f")" \
--file "$f"
done
OK
オブジェクト 'testfiles/10GB_file_1.bin' がバケット 'moon-onerate' に正常にアップロードされました。
OK
オブジェクト 'testfiles/10GB_file_2.bin' がバケット 'moon-onerate' に正常にアップロードされました。
OK
オブジェクト 'testfiles/10GB_file_3.bin' がバケット 'moon-onerate' に正常にアップロードされました。
OK
オブジェクト 'testfiles/10GB_file_4.bin' がバケット 'moon-onerate' に正常にアップロードされました。
OK
オブジェクト 'testfiles/10GB_file_5.bin' がバケット 'moon-onerate' に正常にアップロードされました。
コンソールを確認したらファイルがアップロードされたことがわかります。

格納データのダウンロード
それぞれのバケットにダミーファイルのアップロードが完了したら、今度はバケット内のダミーファイルをローカルPCにダウンロードすることによってアウトバウンド料金を発生します。
以下のコマンドにて転送先インスタンスのcrnを指定します。まずはStandard Plan用のバケットからダウンロードするため、Standard PlanのインスタンスのCRNを指定します。
ibmcloud cos config crn
moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> <Standard Plan用インスタンスのCRN>
新しいサービス・インスタンス ID/CRN を保存しています...
OK
サービス・インスタンス ID/CRN を正常に保存しました。
次は以下のスクリプトにてローカルPCにバケット内のデータをダウンロードします。
以下のスクリプトには、私が検証に使ったPCではディスク容量が足りず検証できなかったため、ダウンロードが完了したら一度削除する命令も含めています。
#!/bin/bash
# ==============================
# IBM Cloud Object Storage Downloader with Auto Delete
# ==============================
BUCKET="moon-standard"
REGION="jp-tok"
FILES=("10GB_file_1.bin" "10GB_file_2.bin" "10GB_file_3.bin" "10GB_file_4.bin" "10GB_file_5.bin")
LOCAL_DIR="$HOME/download_test"
REPEAT=20
MAX_RETRY=3
echo "=== IBM Cloud Object Storage Downloader ==="
echo "保存先: $LOCAL_DIR"
echo "バケット: $BUCKET"
echo
# 繰り返し実行
for round in $(seq 1 $REPEAT); do
echo "=== Round $round/$REPEAT ==="
for file in "${FILES[@]}"; do
TARGET="$LOCAL_DIR/$file"
# 既存ファイルがあればスキップ
if [ -f "$TARGET" ]; then
echo "⚠️ $file はすでに存在します。削除して次に進みます。"
rm -f "$TARGET"
continue
fi
echo "⬇️ ダウンロード開始: $file"
success=false
for attempt in $(seq 1 $MAX_RETRY); do
ibmcloud cos download \
--bucket "$BUCKET" \
--key "$file" \
--region "$REGION" \
"$TARGET"
result=$?
if [ $result -eq 0 ]; then
echo "✅ $file のダウンロード完了。"
success=true
break
else
echo "❌ $file のダウンロードに失敗 (試行 $attempt/$MAX_RETRY)。再試行します..."
sleep 10
fi
done
if [ "$success" = true ]; then
# ダウンロード成功時に削除
echo "🧹 $file を削除します..."
rm -f "$TARGET"
echo "✅ $file を削除しました。"
else
echo "🚫 $file のダウンロードに $MAX_RETRY 回失敗。スクリプトを終了します。"
exit 1
fi
echo
done
done
echo "🎉 すべてのラウンドが完了しました。"
次は以下のコマンドでスクリプトの実行権限を付与します。
chmod +x download_standard.sh
最後に以下のコマンドでスクリプトを実行すると、ファイルのダウンロードが開始されますが、スクリプトの内容通り一度ダウンロードが完了したらフォルダー内のダミーファイルが削除され、自動的に2回目のダウンロードが開始されることがわかります。
なお、今回はdownload_standard.shという名前のスクリプトを作成しました。
caffeinate -i ./download_standard.sh
moonsy@moon download_test % caffeinate -i ./download_standard.sh
=== IBM Cloud Object Storage Downloader ===
保存先: /Users/moonsungyun/download_test
バケット: moon-standard
=== Round 1/20 ===
⬇️ ダウンロード開始: 10GB_file_1.bin
OK
'10GB_file_1.bin' がバケット 'moon-standard' から正常にダウンロードされました
10.00 GiB ダウンロードされました。
✅ 10GB_file_1.bin のダウンロード完了。
🧹 10GB_file_1.bin を削除します...
✅ 10GB_file_1.bin を削除しました。
⬇️ ダウンロード開始: 10GB_file_2.bin
OK
'10GB_file_2.bin' がバケット 'moon-standard' から正常にダウンロードされました
10.00 GiB ダウンロードされました。
✅ 10GB_file_2.bin のダウンロード完了。
🧹 10GB_file_2.bin を削除します...
✅ 10GB_file_2.bin を削除しました。
⬇️ ダウンロード開始: 10GB_file_3.bin
OK
'10GB_file_3.bin' がバケット 'moon-standard' から正常にダウンロードされました
10.00 GiB ダウンロードされました。
✅ 10GB_file_3.bin のダウンロード完了。
🧹 10GB_file_3.bin を削除します...
✅ 10GB_file_3.bin を削除しました。
.
.
.
=== Round 20/20 ===
⬇️ ダウンロード開始: 10GB_file_5.bin
OK
'10GB_file_5.bin' がバケット 'moon-standard' から正常にダウンロードされました
10.00 GiB ダウンロードされました。
✅ 10GB_file_5.bin のダウンロード完了。
🧹 10GB_file_5.bin を削除します...
✅ 10GB_file_5.bin を削除しました。
🎉 すべてのファイルのダウンロードが完了しました。
Standard Plan用のバケットから全てのダウンロード(合計1TB)が完了したら、次は同じ方法でOne Rate Plan用のバケットを指定し、ダウンロードを実施します。
ibmcloud cos config crn
moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> <One Rate Plan用インスタンスのCRN>
新しいサービス・インスタンス ID/CRN を保存しています...
OK
サービス・インスタンス ID/CRN を正常に保存しました。
次はStandard用のファイルと同様にスクリプトでダウンロードしますが、上記のスクリプトのバケット名を変更するだけで、同様に動作します。なお、今回はdownload_onerate.shという名前でスクリプトを作成しました。
BUCKET="moon-standard" →(変更)→ BUCKET="moon-onerate"
スクリプトの修正後、同様に以下のコマンドにてスクリプトの実行権限を付与します。
chmod +x download_onerate.sh
最後に以下のコマンドにてスクリプトを実行したらダウンロードが開始されます。
caffeinate -i ./download_onerate.sh
moonsy@moon download_test % caffeinate -i ./download_onerate.sh
=== IBM Cloud Object Storage Downloader ===
保存先: /Users/moonsungyun/download_test
バケット: moon-onerate
=== Round 1/20 ===
⬇️ ダウンロード開始: 10GB_file_1.bin
OK
'10GB_file_1.bin' がバケット 'moon-onerate' から正常にダウンロードされました
10.00 GiB ダウンロードされました。
✅ 10GB_file_1.bin のダウンロード完了。
🧹 10GB_file_1.bin を削除します...
✅ 10GB_file_1.bin を削除しました。
⬇️ ダウンロード開始: 10GB_file_2.bin
OK
'10GB_file_2.bin' がバケット 'moon-onerate' から正常にダウンロードされました
10.00 GiB ダウンロードされました。
✅ 10GB_file_2.bin のダウンロード完了。
🧹 10GB_file_2.bin を削除します...
✅ 10GB_file_2.bin を削除しました。
⬇️ ダウンロード開始: 10GB_file_3.bin
OK
'10GB_file_3.bin' がバケット 'moon-onerate' から正常にダウンロードされました
10.00 GiB ダウンロードされました。
✅ 10GB_file_3.bin のダウンロード完了。
🧹 10GB_file_3.bin を削除します...
✅ 10GB_file_3.bin を削除しました。
.
.
.
=== Round 20/20 ===
⬇️ ダウンロード開始: 10GB_file_5.bin
OK
'10GB_file_5.bin' がバケット 'moon-onerate' から正常にダウンロードされました
10.00 GiB ダウンロードされました。
✅ 10GB_file_5.bin のダウンロード完了。
🧹 10GB_file_5.bin を削除します...
✅ 10GB_file_5.bin を削除しました。
🎉 すべてのラウンドが完了しました。
使用料の確認
今回利用したICOSインスタンスの利用料を確認するために、コンソールの管理→請求および使用料にアクセスします。

使用量カテゴリーにてCSVのエクスポートをクリックします。なお、使用量の対象期間を間違わないようにご注意ください。

CSVファイルを対象ICOSインスタンスにソート(moon-standard、moon-onerate)すると、以下のパラメータで料金が表示されます。なお、料金に関する詳細はこちらのDocsをご確認ください。
- GIGABYTE:主にストレージに保存されている実データ容量に対する課金
- API CALLS:データの書き込み、読み取り(Class A B)に対する課金
今回の検証に使ったバケットで上記パラメータの合計を確認したところ、Standard Plan(102.04ドル)に比べてOne Rate Plan(51.04ドル)がほぼ半額の料金しか発生していないことがわかりました。
そのため、今回ダウンロードを行なったファイル数は10TBですが、10TBぐらいの容量でも使い方によってはOne Rate Planの方がコストの最適化を期待することができるかと思います。