[OCI][Windows]コンピュートインスタンスの自動起動/停止を、外部の常時起動Windows機から制御する


例えば、昼のビジネス時間だけコンピュートインスタンスを動かしておきたいというニーズはあると思います。
そこで、稼働場所はどこでも良いですが、常時起動しているWindows機から、タスクスケジューラーを使って自動でOCIコンピュートインスタンスの起動停止をする仕組みを作ってみたいと思います。

設定手順

1.OCI CLIの設定

PowerShell版のOCI CLIが設定済みであることが前提となります、
https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm
などを参考にOCI CLIをWindowsにインストールします。

2.インスタンス起動/停止コマンドの作成

制御対象のコンピュートインスタンスの起動コマンドと停止コマンドを作成します。
まず制御対象のコンピュートインスタンスのOCID を確認します。

そのOCID を使って、以下の2つのPowerShellコマンドを作成します。

startInstance.ps1

$instanceid = "ここに管理対象コンピュートインスタンスOCIDを貼り付ける"
oci compute instance action --instance-id $instanceid --action START

stopInstance.ps1

$instanceid = "ここに管理対象コンピュートインスタンスOCIDを貼り付ける"
oci compute instance action --instance-id $instanceid --action STOP 

3.インスタンス起動停止コマンドの動作確認

起動と停止の両方のコマンドが用意できたので、交互に起動して、対象インスタンスが動いたり止まったりすることを確認します。

4.タスクスケジューラーへの登録

Windowsの検索バーで“tasks” などの文字列でタスクスケジューラーを探して起動します。
アプリケーション毎にフォルダーを作るお作法なようなので、ここではOracleCloudというフォルダーを作ります。

続いて、「基本タスクの作成」で操作の名前に "startInstance" (任意)と、説明"start OCI Instance"(任意)を登録します。

続いて時間で動作するトリガーの設定をします。

「タスクトリガー」は毎日
起動時間は任意、最初は動作確認するので、現在時間に近い時間で良いと思います。
タイムゾーン間で同期はチェックしません、これをチェックするとUTCの時間とみなされます。

上記と同様にstopInstanceも登録します。

これで、自動でCompute Instanceの自動起動停止ができるようになりました。
インスタンスを放っておいても夜には止まります。

Tips

この方法以外には、Loadbalancerの稼働インスタンス数を変化させる方法もあります。
なので、ここに記載した方法は、単純に一台のインスタンスを管理したい時に適したものだと思います。