EC2の起動/停止処理をカレンダーでスケジュール設定する方法

この記事は約9分で読めます。

皆さんは普段AWSを利用していて、EC2の起動/停止処理をGUIのカレンダー形式でスケジュール設定できたらいいなと思うことはありませんか?

今回は、Systems Managerの”Change Calendar”、ならびに”Automation”を利用してEC2の起動/停止処理を下記の画像のGUIでスケジュール設定できるようにする方法を解説します。

環境構築手順

本記事は、起動停止処理の対象となるEC2が立ち上げ済みの状態であることを前提として解説します。EC2の立ち上げ方法は、下記のリンク等をご参照ください。

1. IAMロールを作成する

Systems ManagerでEC2を起動するときに必要となる下記のIAMロールを作成します。

Systems Managerドキュメント用IAM Role

  • ロール名:任意
  • ロールを引き受けることができるエンティティ:Systems Manager(SSM)
  • 許可ポリシー:”AmazonSSMAutomationRole”(AWS管理ポリシー)
    ※ EC2起動/停止処理時に、他のAWSサービスと連携した処理を実行したい場合は、連携サービスに基づく許可ポリシーを追加します。

Event Bridge用IAM Role

カレンダーによるEC2起動/停止処理のトリガーとなるEventBridgeに割り当てるロールを作成します。

  • ロール名:任意
  • ロールを引き受けることができるエンティティ:events.amazonaws.com
  • 許可ポリシー:
    – “AmazonEventBridgeApiDestinationsServiceRolePolicy”(AWS管理ポリシー)
    – 下記のインラインポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ssm:StartAutomationExecution",
            "Resource": [
                "arn:aws:ssm:ap-northeast-1:{AWSアカウントID}:automation-definition/*:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

2. EC2起動/停止用ドキュメントを作成する

Systems ManagerにてEC2起動/停止時の処理を定義したドキュメントを作成します。本手順では、EC2起動後に任意の処理をシェルスクリプトで実行する前提で記載していますが、御自身が実行したい処理に合わせて、適宜読み替えてください。

EC2起動用ドキュメント

  1. AWS 管理コンソールの検索窓に”Systems Manager”と入力して、Systems Manager管理画面を開きます。
  2. サイドメニューの”変更管理ツール”内にある”ドキュメント”を選択します。
  3. “ドキュメント”画面の”自己所有”タブを開き、”ドキュメントの作成”ボタンを押します。展開されるドロップダウンリストから、”オートメーション”を指定します。
  1. ランブック作成画面が開くので、”ランブック属性”のロール割り当て項に、Systems Managerドキュメント用IAMロールを指定します。
  1. サイドメニューの”AWS API”タブからAmazon EC2 StartInstancesをワークフローにドラック&ドロップします。EC2 StartInstancesのインプットタブを開き、APIパラメータにYAMLのリスト形式で、起動対象となるEC2 インスタンスIDを入力します。
  1. 次に”アクション”タブ内の”aws:waitForAwsResourceProperty”をドラック&ドロップします。アクションの設定は下記の通りとします。
    • Service:EC2
    • API:DescribeInstanceStatus
    • Property selector:$.InstanceStatuses[0].InstanceState.Name
    • Desired values:running(YAMLリスト形式で記述)
    • InstanceIds:対象EC2のインスタンスIDを入力
      ※ InstanceIdsは”その他の入力”から”入力を追加”ボタンを押して作成
    • タイムアウト:60秒(“設定”タブ内で入力)
  1. “アクション”タブ内の”aws:runCommand”をドラック&ドロップします。RunCommandのParametersにEC2起動時に実行したい処理を記述します。
    • ドキュメント名:AWS-RunShellScriptを選択
    • InstanceIds:起動対象のインスタンスIDを指定
    • パラメータ>コマンド:起動時の実行シェルスクリプトを記載
      ※ 上記以外の設定値はデフォルトの状態で問題ありません。
  1. 画面左上のランブック名を任意の名称に修正して、”ランブックを作成”ボタンを押します。

EC2停止用ドキュメント

  1. EC2起動用ドキュメント作成手順の1.~4.を実行します。
  2. サイドメニューの”AWS API”タブからAmazon EC2 StopInstancesをワークフローにドラック&ドロップします。EC2 StopInstancesのインプットタブを開き、APIパラメータにYAMLのリスト形式で、停止対象となるEC2 インスタンスIDを入力します。
  1. EC2停止時に実行したい処理がある場合は、
  2. 画面左上のランブック名を任意の名称に修正して、”ランブックを作成”ボタンを押します。

3. Systems ManagerのChange Calendarを作成

  1. Systems Manager管理画面のサイドメニューから”カレンダーの変更”を選択して、”変更カレンダーを作成”ボタンを押す。
  2. 下記の設定を行い、”保存”ボタンを押す。
    • カレンダー名:任意
    • カレンダータイプ:デフォルトで閉じる
    • Change management events:チェックを入れる

4. EC2起動/停止用EventBridge Ruleを作成する

  1. AWSの管理コンソールにて、EventBridge管理画面を開きます。
  2. サイドメニューから”ルール”を選択し、ルール一覧画面の”ルールを作成”ボタンを押します。
    ※ イベントバスは、”default”の状態としてください。AWSサービスが発行した通知は、”default”のイベントバスでないと受け取れません。
  1. EC2起動/停止のトリガーとなるEventBridge Ruleを下記の設定で作成します。
    ※ 記載していない設定値はデフォルトの状態で問題ありません。
EC2起動用EventBridge Rule
  • 名前:任意
  • イベントバス:default
  • ルールタイプ:イベントパターンを持つルール
  • イベントソース:AWSイベントまたはEventBridgeパートナーイベント
  • イベントパターン:パターンフォームを使用する
    • イベントソース:AWSのサービス
    • AWSのサービス:Systems Manager
    • イベントタイプ:Calendar State Change
    • イベントタイプの仕様1:特定リソース(ARN別) ※ Change Calendarのarnを指定
    • イベントタイプの仕様2:特定の状態 ※ OPENを指定
    • イベントタイプの仕様3:任意のイベント
  • ターゲット1
    • ターゲットタイプ:AWSのサービス
    • ターゲットを選択:Systems Manager オートメーション
    • ドキュメント:EC2起動用ドキュメントを選択
    • 実行ロール:既存のロールを使用
    • ロール名:EventBridge用IAMロールを選択
EC2停止用EventBridge Rule
  • 名前:任意
  • イベントバス:default
  • ルールタイプ:イベントパターンを持つルール
  • イベントソース:AWSイベントまたはEventBridgeパートナーイベント
  • イベントパターン:パターンフォームを使用する
    • イベントソース:AWSのサービス
    • AWSのサービス:Systems Manager
    • イベントタイプ:Calendar State Change
    • イベントタイプの仕様1:特定リソース(ARN別) ※ Change Calendarのarnを指定
    • イベントタイプの仕様2:特定の状態 ※ CLOSEDを指定
    • イベントタイプの仕様3:任意のイベント
  • ターゲット1
    • ターゲットタイプ:AWSのサービス
    • ターゲットを選択:Systems Manager オートメーション
    • ドキュメント:EC2起動用ドキュメントを選択
    • 実行ロール:既存のロールを使用
    • ロール名:EventBridge用IAMロールを選択

環境構築手順は以上です。

動作の確認

上記の環境構築が完了したら、下記の手順でEC2起動/停止処理のスケジュール設定を行います。

  1. Systems Manager管理画面のサイドメニューから、”変更管理ツール”>”カレンダーの変更”を選択し、環境構築手順で作成したカレンダーを開きます。
  2. カレンダー右上のイベントを作成ボタンを押します。
  3. イベント登録画面にて、EC2の起動時間を設定します。下の図では、東京時間で7/16の9:00~18:00の期間のみEC2を稼働させる設定となっていますが、画面下部の”繰り返し”トグルをONにすると、日次・週次・月次や”平日のみ”といった稼働設定が可能です。設定が完了したら、画面右下の”予定されたイベントを作成”ボタンを押します。

EC2の稼働設定手順は以上です。設定した時間通りに起動/停止処理が行われているかは、Systems Manager管理画面のサイドメニューから”変更管理ツール”>”自動化”を選択すると開く、Systems Manager Automationの実行ログから確認できます。下記の画像では、EC2起動/停止処理の実行ステータスがSuccessとなっているので、問題なく処理が実行されたことがわかります。ステータスがFailedの場合は、Execution IDをクリックして実行時の詳細ログを確認してください。

EC2の起動/停止処理をカレンダーでスケジュール設定する方法の説明は以上です。本記事が皆さんのお役に立てれば幸いです。

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