OCI リソース・スケジューラでインスタンスの自動起動と停止を設定(お金を節約したい方必見)

OCI General

初めに

時はお金なり。使わないときにインスタンスを起動しっぱなしにするのはもったいないです。

インスタンスの停止忘れは、お金を落とすのと同じ

2024年5月21日に、新しいサービスであるOCIリソース・スケジューラがリリースされました。これを利用することで、インスタンスの起動および停止のスケジュール設定がより簡単になります。待ちに待った機能がついに登場しました。

運用ケース:指定日付(曜日)に、指定したリソースを自動に起動・停止させる。

試算してみましょう。

1ヶ月を30日と仮定すると、1ヶ月は合計で30日 × 24時間 = 720時間になります。24時間稼働させる場合、インスタンスは1ヶ月720時間で課金されます。簡略のため、OCPU per hour以外の費用(ストレージ等)は考慮しないことにします。

例として、インスタンスを平日の毎日8:30から18:30まで(10時間)稼働させ、週末と祝日は稼働させないとします。

1ヶ月の稼働日数を22日と仮定すると、毎日定時に起動・停止させることで、1ヶ月で合計500時間 (720 - 22*10)を節約できます。つまり、OCPU per hourに関連する費用は、停止なしの場合から69.4%(約7割)も節約できることになります。これは無視できない大きな差異です。
Cost comparison

サポート対象リソース

2024年5月(サービス新規リリース時点)
Standard Computeシェイプ、Autonomous Database、Base Databaseの3種類でした。

2025年4月29日
Base Databaseがサポート対象外となり、非常に残念です(訳が分かりませんが、復帰してほしいです)。一方で、新たにインスタンス・プールとファンクションがサポート対象に追加されました。

他方法との比較

インスタンス・タイプリソース・スケジューラネイティブ
スケジュール機能
CLI/APIで実現
Computeサポート対象
(Standardのみ)
なし可能
Autonomous AI Databaseサポート対象あり可能
Oracle Base DBサポート対象外になった
(2025/4/29)
なし可能

Autonomous AI DBの自動起動・停止を例に、リソース・スケジューラの利点と制限事項を他の方法と比較してみます。

項目リソース・スケジューラネイティブ
スケジュール機能
CLI/API
OCIコンソールでの設定YesYesNo
コーディング作業不要不要必要
実施端末不要不要必要
分単位で細かく設定YesNo
(時間単位のみ)
Yes
ローカルタイムゾーンの対応No
(UTC時間)
No
(UTC時間)
Yes
Oracle Base Databaseはリソース・スケジューラのサポート対象から外れたため、自動起動・停止を行いたい方には、OCIインスタンスの自動起動・停止という代替手段をご紹介します。
この方法は、Oracle Base Databaseだけでなく、他の種類のインスタンスにも適用可能です。ぜひご参考になさってください。

リソース・スケジューラの使い方

事前準備
管理者以外のユーザーに、スケジュール作成の権限を付与してください。

IAMポリシーの例:(テナンシ・レベルにしてください)
Allow group ResourceScheduleManagers to manage resource-schedule-family in tenancy

作成開始
ガバナンスと管理 > リソース・スケジューラ
Select OCI resouce scheduler

「スケジュールの作成」を押す
Create schedule

基本情報
スケジュール名(必須):適当な名前を入力する
実行するアクション(必須):起動か停止を選択する
※、この例では、Computeインスタンスに対し、毎日の停止スケジュールを作成する。
Basic information of schedule

リソース
リソースの選択方法:静的(デフォルトのまま)
一覧から対象のインスタンスを選択して、次へ。
Select resouce

スケジュール
間隔:選択肢は、"1回のみ"、"毎日"、"毎週"、"毎月"の4つがある。この例では、毎日のJST 18時を指定する。
時間: 入力はUTC時間となるので、ご注意を!
Setup schedule

曜日を指定したい場合、次の例をご参照ください(平日のJST 18:30に停止する例)。
Setup schedule (Days of the week)

確認
入力した内容を確認し、「スケジュールの作成」を押す。
Confirm schedule

作成後
ステータスが、有効になることを確認する。
Schedule becomes active

スケジュールの詳細画面に、OCIDをコピーしてください。
Copy schedule's OCID

IAM ポリシーの作成

ポリシーを作成しないとスケジュールの実行が失敗しますので、ご注意ください。

ステートメント:

Allow any-user to manage [RESOURCE_TYPE] in compartment [COMPARTMENT_NAME] where all {request.principal.type='resourceschedule', request.principal.id='ocid_of_resourceschedule'}

※、[RESOURCE_TYPE][COMPARTMENT_NAME]とスケジュールのOCIDを置き換えてください。

例:

Allow any-user to manage instance in compartment PoC where all {request.principal.type='resourceschedule', request.principal.id='ocid1.resourceschedule.oc1.ap-tokyo-1.amaa...lkcza'}

動作確認
予定の時刻になったら、インスタンスが停止されることを確認します。
スケジュールの一覧:
Confirm execution time

作業リクエスト(スケジュールの詳細画面):
Confirm work request

スケジュール設定と動作確認はここまで完了です。

トラブルシューティング

現象-1: スケジュールが作成できない

Can not to create a schedule
考えられる理由: ユーザーがスケジュールを作成する権限がない。
対策:次のようにIAMポリシーを作成する。

Allow group ResourceScheduleManagers to manage resource-schedule-family in tenancy

現象-2:リソースが見つからない

Resouce not found
考えられる理由: ユーザーがリソースを参照する権限がない。
対策:次のようにIAMポリシーを作成する。

Allow group ResourceScheduleManagers to read [resource_type] in tenancy

※、[resource_type]を置き換えてください。
例:all-resources, instances, autonomous-databases, database-family

現象-3:スケジュールの実行が失敗した

Failed to run schedule
考えられる理由: 関連するIAM ポリシーがないか、ポリシーステートメントが正しくない。
対策:次のようにIAMポリシーを作成してから、再度試してみてください。

Allow any-user to manage instance in compartment PoC where all {request.principal.type='resourceschedule', request.principal.id='ocid_of_resourceschedule'}

楽しくお金を節約しましょう。Happy money saving!

以上

タイトルとURLをコピーしました