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 インスタンスの作りやすさ 空きが少なく作れないことが多い 作りやすい
必要なもの クレジットカード(本人確認用) クレジットカード(支払い用)

逆に言うと、無料枠を超えた分は普通に課金されます。無料アカウントなら「作れない」で済んだミスが、そのまま請求になるということです。だからこそ、次に紹介する「課金に気づく仕組み」が大事になります。

切り替え方

切り替えはコンソールから行います。

  1. Oracle Cloud のコンソールにログインする
  2. 画面上部のバナー、または「請求とコスト管理」から 「アカウントのアップグレード」 を選ぶ
  3. 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) という機能があり、利用料が設定した金額を超えたらメールで知らせてくれます。

  1. コンソールのメニューから 「請求とコスト管理」→「予算」 を開く
  2. 「予算の作成」 で、対象をルート・コンパートメント(テナンシ全体)にする
  3. 月額の予算を小さめの金額(たとえば 100円)で作る
  4. アラート・ルールで「実績が予算の 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 を試してみてください。