アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【Amazon/AWSUbuntuDebian
【Amazon/AWS】決まったスケジュールで自動的にインスタンスを起動・停止する〔改訂版〕
POSTED BY
2023-09-23

指定インスタンスを決まったスケジュールで自動起動または自動停止したい。そのメモ。

インスタンス一覧から、操作したいインスタンスのIDを把握しておく。

https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#Instances:

IAMを開く。

https://us-east-1.console.aws.amazon.com/iamv2/home?region=ap-northeast-1#/home

左タブのアクセス管理→「ロール」をクリック。「ロールを作成」する。

・信頼されたエンティティタイプは「AWSのサービス」
・ユースケースは「他のAWSのサービスのユースケース」→「CloudWatch Events」を選択、
CloudWatch Eventsラジオボタンを選択する。

「次へ」

・CloudWatchEventsBuiltInTargetExecutionAccess
・CloudWatchEventsInvocationAccess

がデフォルトで存在することを確認して「次へ」

ロールの詳細は「ロール名」だけ入力すればOK。ここでは「cloudwatch_events_for_auto_start_stop」と入力。

「ロールの作成」でロールの作成一旦完了。ロール一覧にcloudwatch_events_for_auto_start_stopが出現するのでクリックして選択。

ポリシーを追加するので「許可を追加」プルダウン「ポリシーをアタッチ」を選択。

「その他の許可ポリシー」で「AmazonSSMAutomationRole」と入力し一覧表示させ左チェックボックスをチェックし「ポリシーをアタッチ」する。

そうすると許可ポリシー一覧にAmazonSSMAutomationRoleが追加される。これが追加されれば、元々あった許可ポリシー

・CloudWatchEventsBuiltInTargetExecutionAccess
・CloudWatchEventsInvocationAccess

は不要となるので、左チェックボックスで選択して「削除」してしまってOK。以上でIAMの操作は完了。

<インスタンスの自動起動>

Amazon EventBridgeを開く。

https://ap-northeast-1.console.aws.amazon.com/events/home?region=ap-northeast-1#/

「ルールを作成」をクリック。まずはインスタンス自動起動のセットアップをする。

・名前(例):auto_start_instance
・ルールタイプ:「スケジュール」を選択して「次へ」

「スケジュールパターン」は「特定の時刻に実行されるきめ細かいスケジュール」を選択しcronの式を設定する。この設定スケジュールでルールが呼ばれることになる。

https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html#eb-cron-expressions

「毎週月~金曜日の朝9:00に起動」させたい場合、

年:*、曜日:MON-FRI、月:*、日付:?、時間:0、分:0とする。0はJSTでは9時であるからである。「次へ」。

「ターゲット」は「AWSのサービス」→「System Manager オートメーション」を選択、ドキュメントは「AWS-StartEC2Instance」を選択。

「自動化パラメータを設定」→「定数」InstanceIdに該当のインスタンスIDを貼り付ける。

「実行ロール」は「既存のロールを使用」でさきほどIAMで作成した「cloudwatch_events_for_auto_start_stop」を選択して「次へ」

タグは不要なのでそのまま「次へ」。最終確認して「ルールの作成」で完了。これで月~金の9:00にインスタンスが自動起動されるようになった。

<インスタンスの自動停止>

Amazon EventBridgeを開く。

https://ap-northeast-1.console.aws.amazon.com/events/home?region=ap-northeast-1#/

「ルールを作成」をクリック。自動起動と全く同じようにインスタンス自動停止のセットアップをする。

・名前(例):auto_stop_instance
・ルールタイプ:「スケジュール」を選択して「次へ」

「スケジュールパターン」は「特定の時刻に実行されるきめ細かいスケジュール」を選択しcronの式を設定する。この設定スケジュールでルールが呼ばれることになる。

https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html#eb-cron-expressions

「毎週月~金曜日の夜18:00に停止」させたい場合、

年:*、曜日:MON-FRI、月:*、日付:?、時間:9、分:0とする。9はJSTでは18時であるからである。「次へ」。

「ターゲット」は「AWSのサービス」→「System Manager オートメーション」を選択、ドキュメントは「AWS-StopEC2Instance」を選択。

「自動化パラメータを設定」→「定数」InstanceIdに該当のインスタンスIDを貼り付ける。

「実行ロール」は「既存のロールを使用」でさきほどIAMで作成した「cloudwatch_events_for_auto_start_stop」を選択して「次へ」

タグは不要なのでそのまま「次へ」。最終確認して「ルールの作成」で完了。これで月~金の18:00にインスタンスが自動停止されるようになった。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】