
Oracle Cloud無料枠が作れない?|Pay As You Goに切り替えて「請求0円」で運用する方法
Oracle Cloud の無料枠(Always Free)は、Arm の 2 OCPU / メモリ12GB が無料で使える、かなり太っ腹なサービスです。
ところが、いざサーバを作ろうとすると 「Out of host capacity」 と言われて、何度やっても作れない…という話をよく聞きます。筆者もまさにそうでした。
結論から言うと、筆者は 有料アカウント(Pay As You Go)に切り替えたら、すぐに作れました。そして切り替えてからも、毎日の利用料をSlackで見ていますが、請求額はずっと0円です。
この記事では、
- なぜ Pay As You Go に切り替えると作れるようになるのか
- 切り替えても0円で使い続けるために、やっておくこと
- 毎日の利用料を Slack に通知する仕組み
を紹介します。
内容は2026年11月時点の Oracle 公式ドキュメントをもとにしています。無料枠の条件は変わることがあるので、最新の情報は必ず公式サイトで確認してください。
無料アカウントだと、なぜ作れないのか
Oracle の公式ドキュメントには、次のように書かれています。
「out of host capacity」エラーが出た場合は、ホームリージョンで Always Free のシェイプが一時的に足りていないことを意味します。別の可用性ドメインで作るか、しばらく待ってから再度作成してください。Pay As You Go などの有料アカウントにアップグレードすることもでき、より多くの種類のコンピュート・リソースを使えるようになります。
つまり、無料アカウント(Always Free だけのテナンシ)向けの空きが、そもそも少ないのです。特に東京・大阪のような人気リージョンの Arm インスタンスは取り合いになっていて、「深夜にスクリプトで何度もリトライする」といった方法が紹介されているほどです。
筆者も最初は無料アカウントのまま作ろうとしましたが、まったく作れませんでした。そこで Pay As You Go に切り替えたところ、その場で作成できました。
Pay As You Goにしても、無料枠は無料のまま
「有料アカウントにしたら、お金がかかるのでは?」と心配になりますが、公式ドキュメントにはこう書かれています。
アップグレード後も Always Free のリソースには課金されません。課金されるのは、Always Free の上限を超えた分の利用だけです。
Pay As You Go は最低利用料金や契約期間の縛りがない従量課金なので、無料枠の範囲に収まっていれば請求は0円です。
| 無料アカウント | Pay As You Go | |
|---|---|---|
| Always Free の範囲 | 無料 | 無料(変わらない) |
| 無料枠を超えた分 | 作れない/停止される | 課金される |
| Arm インスタンスの作りやすさ | 空きが少なく作れないことが多い | 作りやすい |
| 必要なもの | クレジットカード(本人確認用) | クレジットカード(支払い用) |
逆に言うと、無料枠を超えた分は普通に課金されます。無料アカウントなら「作れない」で済んだミスが、そのまま請求になるということです。だからこそ、次に紹介する「課金に気づく仕組み」が大事になります。
切り替え方
切り替えはコンソールから行います。
- Oracle Cloud のコンソールにログインする
- 画面上部のバナー、または「請求とコスト管理」から 「アカウントのアップグレード」 を選ぶ
- Pay As You Go を選び、支払い情報(クレジットカード)を確認して申し込む
申し込み後、審査が終わるまで少し時間がかかることがあります。切り替えが完了すると、メールで通知が届きます。
無料トライアル(最初の30日間のクレジット)の期間中に作った「無料枠外のリソース」は、アップグレードしないとトライアル終了時に回収されます。アップグレードすれば、そのまま使い続けられます。
0円で使い続けるために、やっておくこと
1. 無料枠の範囲を確認してから作る
2026年11月時点の、主な Always Free の範囲はこちらです。
| リソース | 無料の範囲 |
|---|---|
| Arm インスタンス(VM.Standard.A1.Flex) | 月1,500 OCPU時間・9,000 GB時間(2 OCPU / 12GB 相当) |
| AMD インスタンス(VM.Standard.E2.1.Micro) | 2台まで |
| ブロックストレージ(ブートボリューム含む) | 合計200GBまで |
| 外向きのデータ転送 | 月10TBまで |
インスタンスを作るとき、シェイプやイメージに 「Always Free 対象」(Always Free-eligible) のラベルが付いているかを確認しましょう。
特に注意したいのは次の3つです。
- Arm の OCPU・メモリの合計:2台に分けても、合計が 2 OCPU / 12GB を超えた分は課金されます。以前は 4 OCPU / 24GB まで無料だったので、古い記事のとおりに作ると超えてしまいます
- ブロックストレージの合計:ブートボリュームは1台あたり最低50GB前後あるので、4台作ると200GBを超えます。インスタンスを消したあとにブートボリュームだけ残っていないかも確認しましょう
- ホームリージョン以外で作らない:無料枠のコンピュートは、アカウント作成時に選んだホームリージョンでしか使えません
2. 予算アラートを設定する
Oracle Cloud には 「予算」(Budgets) という機能があり、利用料が設定した金額を超えたらメールで知らせてくれます。
- コンソールのメニューから 「請求とコスト管理」→「予算」 を開く
- 「予算の作成」 で、対象をルート・コンパートメント(テナンシ全体)にする
- 月額の予算を小さめの金額(たとえば 100円)で作る
- アラート・ルールで「実績が予算の 1%(=1円)を超えたら」のように設定し、通知先のメールアドレスを入れる
ただし、予算アラートの判定は 24時間ごと です。リアルタイムではないので、「気づいたら1日分課金されていた」ということはありえます。
3. 毎日の利用料を自分の目で見る
予算アラートは「超えたら知らせる」仕組みなので、アラートの設定ミスがあると気づけません。そこで筆者は、毎日の利用料を Slack に送るようにしています。
毎朝「昨日 0円、今月 0円」というメッセージが届くだけですが、0円であることを毎日確認できる安心感は大きいです。
毎日の利用料をSlackに通知する
ここでは、OCI CLI と Slack の Incoming Webhook を使って、無料枠のサーバ自身から毎日通知する例を紹介します。
仕組み
cron(毎朝) → OCI CLI で Usage API を呼ぶ → 昨日と今月の利用料を集計 → Slack に送る
Oracle Cloud には、利用料を取得できる Usage API があります。OCI CLI の oci usage-api usage-summary request-summarized-usages コマンドで呼び出せます。
準備するもの
- OCI CLI:サーバに入れて、
oci setup configで API キーを設定しておく - jq:JSON を集計するのに使う
- Slack の Incoming Webhook の URL:Slack アプリの設定画面で、通知先のチャンネルを選んで発行する
- テナンシの OCID:コンソールの「テナンシ詳細」で確認できる
管理者ユーザーの API キーを使うなら、権限の追加は不要です。通知専用のユーザーを作る場合は、そのユーザーのグループに次のポリシーを付けます。
Allow group cost-viewers to read usage-report in tenancy
スクリプトの例
#!/bin/bash
# oci-cost-to-slack.sh : 昨日と今月の Oracle Cloud 利用料を Slack に通知する
set -euo pipefail
TENANCY_ID="ocid1.tenancy.oc1..xxxxxxxx"
WEBHOOK_URL="https://hooks.slack.com/services/XXXX/YYYY/ZZZZ"
TODAY=$(date -u +%Y-%m-%d)
YESTERDAY=$(date -u -d yesterday +%Y-%m-%d)
MONTH_START=$(date -u +%Y-%m-01)
# 指定期間の利用料の合計を返す
sum_cost() {
oci usage-api usage-summary request-summarized-usages \
--tenant-id "$TENANCY_ID" \
--granularity DAILY \
--query-type COST \
--time-usage-started "$1" \
--time-usage-ended "$2" \
| jq '[.data.items[]."computed-amount" // 0] | add // 0'
}
YESTERDAY_COST=$(sum_cost "$YESTERDAY" "$TODAY")
if [ "$MONTH_START" = "$TODAY" ]; then
MONTH_COST=0 # 月初は今月分のデータがまだない
else
MONTH_COST=$(sum_cost "$MONTH_START" "$TODAY")
fi
TEXT="Oracle Cloud 利用料:昨日 ${YESTERDAY_COST} 円 / 今月 ${MONTH_COST} 円"
curl -fsS -X POST -H 'Content-Type: application/json' \
-d "$(jq -n --arg text "$TEXT" '{text: $text}')" \
"$WEBHOOK_URL"
ポイントは次のとおりです。
- 期間は UTC の日付 で指定します(日付だけを書くと UTC の0時になります)
--query-type COSTで、利用量ではなく金額を取得します- 通貨は、アカウントの支払い通貨(日本で作ったアカウントなら円)になります
毎朝実行する
cron に登録して、毎朝実行します。
# サーバのタイムゾーンが JST の場合、毎朝9時に実行
0 9 * * * /home/opc/bin/oci-cost-to-slack.sh
Oracle Linux などのイメージは、初期状態のタイムゾーンが UTC になっていることが多いです。その場合は 0 0 * * *(UTC の0時=日本時間の9時)にするか、timedatectl set-timezone Asia/Tokyo で変更しておきましょう。
利用料のデータは、実際の利用から反映されるまで数時間かかることがあります。「昨日分」の金額は、あくまで目安として見てください。
アイドル判定には引き続き注意
Oracle Cloud には、使われていない Always Free のインスタンスを回収するルールがあります。7日間、次の条件がすべて当てはまると「アイドル」と判定されます。
- CPU 使用率(95パーセンタイル)が20%未満
- ネットワーク使用率が20%未満
- メモリ使用率が20%未満(Arm インスタンスのみ)
公式ドキュメントには、有料アカウントならこのルールの対象外になる、とは書かれていません。テスト用に立てただけで何も動かしていないサーバは、回収される可能性があると考えておきましょう。
筆者のサーバでは Zabbix や Docker のコンテナを常時動かしているので、アイドル判定に引っかかる心配はあまりありません。何かしら常に動いているものを置くのが、いちばん確実な対策です。
無料枠のサーバで何を動かす?
メモリ12GBあると、かなりいろいろなものが動かせます。筆者は Zabbix で監視をしたり、Docker でちょっとしたサービスを動かしたりしています。
軽いものなら、たとえば筆者が作った DMARC レポートの分析ツール もおすすめです。毎時レポートを取りに行くので、アイドル対策にもなります。
👉 DMARCレポート、放置してない?|集計レポート(rua)の読み方と分析のすすめ方
Oracle Cloud 以外の無料枠(GCP)や、月500円前後の国内格安VPSとの比較は、こちらの記事でまとめています。
👉 無料・格安VPSサーバ比較【2026年版】|Oracle Cloud・GCP無料枠からワンコインVPSまで8社を比較
まとめ
- 無料アカウントで Arm インスタンスが「Out of capacity」で作れないなら、Pay As You Go への切り替えが近道。公式ドキュメントでも案内されている方法
- 切り替えても Always Free の範囲は無料のまま。最低料金や契約期間の縛りもない
- そのかわり、無料枠を超えた分は課金される。Arm の合計 2 OCPU / 12GB、ストレージの合計200GBは必ず守る
- 予算アラートに加えて、毎日の利用料を Slack に通知しておくと、「0円であること」を毎日確認できて安心
- 何も動かしていないサーバはアイドル判定で回収されることがあるので、常に動くものを置く
「無料なのに作れない」で諦めていた人は、ぜひ Pay As You Go を試してみてください。