カテゴリー
Automation AWS EC2 Event Bridge System Manager(SSM)

AWS EventBridgeでSSM Automationを使用してEC2の開始と停止をスケジューリングする

今回のゴール

コスト削減の目的で、夜間使用しない時間帯にEC2を自動で停止・開始したい事があります。

今回はLambdaで実装するのではなく、SSM Automationを使用してEC2インスタンスの開始と停止をスケジューリングしたいと思います。

EC2インスタンス停止の設定

EventBridgeサービスの[イベント]-[ルール]より「ルールの作成」ボタンをクリックします。

【ルールを作成】
[名前]:ec2-stop(任意)
[イベントパターン]:スケジュール、Cron式を選択
[Cron式]:0 14 * * ? * を入力(毎日23時)

[ターゲット]:EC2 StopInstances API 呼び出し
[インスタンスID]:該当のEC2インスタンスを入力

EC2インスタンス開始の設定

EC2インスタンスの開始にはSystemManagerのAutomationを使用しますので、先にIAMロールを作成します。

IAMロールの作成

IAMサービスのロールのロールの作成で、[EC2]を選択します。

AmazonSSMAutomationRoleのポリシーをアタッチします。

[ロール名]:SSMAutomationRole(任意)

作成されたロールを選択して、「信頼関係の編集」をクリックします。

Principalに”ssm.amazonaws.com”を追加して下記のようにします。
Service部は配列になるので、[]で囲みます。

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

これでロールの作成は完了です。
後で使用するのでロールのARNコピーしておきます。

補足

CMKで暗号化されたEBSをもつEC2インスタンスの場合は、kms:CreateGrantのポリシーを付与します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant"
            ],
            "Resource": "KMSのCMKのARN"
        }
    ]
}
ルールの作成

EC2停止と同じくEventBridgeサービス よりルールを作成します。

[名前]:ec2-start(任意)
[イベントパターン]:スケジュール、Cron式を選択
[Cron式]:0 22 * * ? * を入力(毎日7時)

[ターゲット]:SSM Automation
[ドキュメント]:AWS-StartEC2Instance
[InstanceId]:対象のEC2インスタンスID
[AutomationAssumeRole]: SSMAutomationRole (先ほど作成したロールのARN)

確認

指定された時間にEC2インスタンスが停止・開始されることを確認しました。

EventBridgeではCloudTrailの”StartAutomationExecution” APIが実行されますので、実行結果はCloudTrailで確認できます。

意図したように動作しない場合はCloudTrailで確認すればよいかと思います。