初めに
時はお金なり。使わないときにインスタンスを起動しっぱなしにするのはもったいないです。
インスタンスの停止忘れは、お金を落とすのと同じ!
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割)も節約できることになります。これは無視できない大きな差異です。
サポート対象リソース
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コンソールでの設定 | Yes | Yes | No |
| コーディング作業 | 不要 | 不要 | 必要 |
| 実施端末 | 不要 | 不要 | 必要 |
| 分単位で細かく設定 | Yes | No (時間単位のみ) | Yes |
| ローカルタイムゾーンの対応 | No (UTC時間) | No (UTC時間) | Yes |
この方法は、Oracle Base Databaseだけでなく、他の種類のインスタンスにも適用可能です。ぜひご参考になさってください。
リソース・スケジューラの使い方
事前準備
管理者以外のユーザーに、スケジュール作成の権限を付与してください。
IAMポリシーの例:(テナンシ・レベルにしてください)Allow group ResourceScheduleManagers to manage resource-schedule-family in tenancy
作成開始
ガバナンスと管理 > リソース・スケジューラ
「スケジュールの作成」を押す
基本情報
スケジュール名(必須):適当な名前を入力する
実行するアクション(必須):起動か停止を選択する
※、この例では、Computeインスタンスに対し、毎日の停止スケジュールを作成する。
リソース
リソースの選択方法:静的(デフォルトのまま)
一覧から対象のインスタンスを選択して、次へ。
スケジュール
間隔:選択肢は、"1回のみ"、"毎日"、"毎週"、"毎月"の4つがある。この例では、毎日のJST 18時を指定する。
時間: 入力はUTC時間となるので、ご注意を!
曜日を指定したい場合、次の例をご参照ください(平日のJST 18:30に停止する例)。
確認
入力した内容を確認し、「スケジュールの作成」を押す。
作成後
ステータスが、有効になることを確認する。
スケジュールの詳細画面に、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'}動作確認
予定の時刻になったら、インスタンスが停止されることを確認します。
スケジュールの一覧:
作業リクエスト(スケジュールの詳細画面):
スケジュール設定と動作確認はここまで完了です。
トラブルシューティング
現象-1: スケジュールが作成できない

考えられる理由: ユーザーがスケジュールを作成する権限がない。
対策:次のようにIAMポリシーを作成する。
Allow group ResourceScheduleManagers to manage resource-schedule-family in tenancy現象-2:リソースが見つからない

考えられる理由: ユーザーがリソースを参照する権限がない。
対策:次のようにIAMポリシーを作成する。
Allow group ResourceScheduleManagers to read [resource_type] in tenancy※、[resource_type]を置き換えてください。
例:all-resources, instances, autonomous-databases, database-family
現象-3:スケジュールの実行が失敗した

考えられる理由: 関連する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!
以上