AWS EC2 の自動起動・自動停止

Tech Knowledge
公開: 2023-06-07

はじめに

AWS EventBridge ルールとスケジュールの違い に記載したように、スケジュールドリブンになるものはタイムゾーンの指定が出来て実行時刻が分かりやすいので、EventBridge ルールではなく、EventBridge スケジュールを使用するほうが良い。

  1. EventBridge 用 IAM ロールの作成(EventBridge ルール向け)
  2. EC2 自動起動ルールの作成
  3. EC2 自動停止ルールの作成
  4. EventBridge 用 IAM ロールの変更(EventBridge スケジュール向け)
  5. EC2 自動起動スケジュールの作成
  6. EC2 自動停止スケジュールの作成

1. EventBridge 用 IAM ロールの作成

EventBridge用IAMロールの作成

  • IAM > ロール > ロールを作成
  • 信頼されたエンティティを選択
    • 信頼されたエンティティタイプ: AWS のサービス
    • ユースケース:Systems Manager(プルダウンから入力して検索 > Systems Managerを選択)
  • 許可を追加
    • 許可ポリシー:AmazonSSMAutomationRole
  • 名前、確認、および作成
    • ロール名: 任意(例:ec2-start-stop-role)
    • 「ロールを作成」ボタン

IAMロールの信頼関係を編集

  • 作成したIAMロールを選択 > 信頼関係タブ > 信頼ポリシーを編集
  • "ssm.amazonaws.com" → "events.amazonaws.com" に変更

修正前

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

修正後

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  • 「ポリシーを更新」ボタン

2. EC2 自動起動ルールの作成

  • EventBridge > ルール > 「ルールを作成」ボタン

  • 名前:任意

  • ルールタイプ:スケジュール

  • スケジュールを定義

    • Cron 設定(以下は月~金の08:30に EC2 を起動する設定)
    • ※設定はUTC時間で行うのでドロップダウンの「ローカルタイムゾーン」を選択して、日本時間でどの時刻に動くのか確認。
    • 曜日+午前中で指定する場合、時差の関係で曜日の指定をずらす必要あり ![image][pasted-2023.06.07-18.16.44.png]
  • ターゲットを選択

    • ターゲットタイプ: AWS のサービス
    • ターゲットを選択: System Manager オートメーション
    • ドキュメント: AWS-StartEC2Instance
    • 自動化パラメータを設定
      • InstanceId: 対象 EC2 の InstanceId
    • 実行ロール: 既存のロールを使用 「1. EventBridge 用 IAM ロールの作成」で作成したロールを設定(例:ec2-start-stop-role)
  • 「次へ」ボタン > 「ルールを作成」ボタン

3. EC2 自動停止ルールの作成

基本的な手順は「2. EC2 自動起動ルールの作成」と変わらない。 違う点は以下

  • ターゲットを選択
    • ドキュメント: AWS-StopEC2Instance

4. EventBridge 用 IAM ロールの変更(EventBridge スケジュールへの対応)

「1. EventBridge 用 IAM ロールの作成」で作成したロールを流用し、EventBridge スケジュールに対応させる。

  • IAM > ロール > 「1. EventBridge 用 IAM ロールの作成」で作成したロール(ec2-start-stop-role)を選択
  • 信頼関係 > 「信頼ポリシーを編集」ボタン
    • Principal.Service に "scheduler.amazonaws.com" を追加
  • 「ポリシーを更新ボタン」
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "events.amazonaws.com",
                    "scheduler.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

スケジュール作成にしか使用しないのであれば、"events.amazonaws.com" は不要。

5. EC2 自動起動スケジュールの作成

  • EventBridge > スケジュール > 「スケジュールを作成」ボタン
  • スケジュールの詳細の指定
    • スケジュール名: 任意(例:dev01-arc-start)
    • スケジュールのパターン
      • 頻度: 定期的なスケジュール
      • スケジュールの種類: cron ベースのスケジュール
      • cron 式: スケジュールの cron 式を定義
      • フレックスタイムウィンドウ: オフ
    • 「次へ」ボタン
  • ターゲットの選択
    • ターゲット API: Amazon EC2 > StartInstances
    • StartInstances
      • InstanceIds: EC2 のインスタンスID
    • 「次へ」ボタン
  • アクセス許可
    • 既存の役割を選択: 「4. EventBridge 用 IAM ロールの変更」のロール(ec2-start-stop-role)を指定
    • 「次へ」ボタン
  • スケジュールの確認と作成
    • 「スケジュールを作成」ボタン

6. EC2 自動停止スケジュールの作成

基本的な手順は「5. EC2 自動停止ルールの作成」と変わらない。 違う点は以下

  • ターゲットの選択
    • ターゲット API: Amazon EC2 > StopInstances
    • StopInstances
      • InstanceIds: EC2 のインスタンスID

参考

【AWS】EC2の起動・停止を自動化する