Amazon EventBridgeからEC2インスタンスを起動•停止•再起動する簡易な方法5選

EventBridgeを使用して、タグ指定でEC2インスタンスの再起動や起動、停止をしたい場合、SSMオートメーション(自作ドキュメント)もしくは、Lambdaを利用する必要があります
2023.08.07

はじめに

Amazon EventBridgeは、イベント駆動アーキテクチャを実現するフルマネージドのサーバレスサービスです。

EventBridgeを使用して、特定のイベントをトリガーにしてEC2インスタンスを再起動や起動、停止させたいケースはあると思います。

本ブログでは、EventBridgeからEC2インスタンスを起動・停止・再起動させる方法について、以下の5つを紹介します。

各方法のメリットデメリットも含めて解説していきます。

  • EventBridgeのターゲットに、EC2を起動させるAWS Lambdaを指定
  • EventBridgeのターゲットにAWS Systems Manager Automation(以降、SSMオートメーション)のドキュメントを指定
    • AWS提供ドキュメントを利用する
    • 自作ドキュメントを利用する
  • EventBridgeがEC2のAPIを直接呼び出す
  • EventBridge SchedulerがEC2のAPIを直接呼び出す

それぞれの構成は、以下の通りです。

先にまとめ

以下は、5つの方法を比較してまとめた表です。

比較項目 Lambda SSMオートメーション
(AWS提供ドキュメント)
SSMオートメーション
(自作ドキュメント)
EventBridgeからEC2のAPIを呼ぶ EventBridge SchedulerからEC2のAPIを呼ぶ
EC2の起動可能 ×
EC2の停止可能
EC2の再起動可能
EC2のインスタンスIDを指定可能
EC2のタグ指定可能 × × ×
メリット タグ指定できる 設定が簡単 タグ指定できる 設定が簡単 設定が簡単
デメリット コード開発が必要 タグ指定できない ドキュメント作成が必要 タグ指定できない
EC2の起動ができない
タグ指定できない

EC2のインスタンスの指定方法

EC2のインスタンスの指定方法は、インスタンスIDを指定とタグ指定の2つがあります。

EC2インスタンスを削除することがなくインスタンスIDが変わらない場合は、インスタンスIDを指定するとよいですが、インスタンスIDが変わる可能性があれば、タグ指定を推奨します。

タグ指定が必要な場合は、LambdaあるいはSSMオートメーション(自作ドキュメント)のいずれかを選択します。

個人的には、まずSSMオートメーション(自作ドキュメント)を検討し、起動停止に関して複雑なことが必要な場合は、Lambdaを検討すると思います。

タグ指定でなく、インスタンスIDを指定する場合、まず「EventBridgeからEC2のAPIを呼ぶ」を検討するとよいです。

各方法の設定方法

次に、各方法の具体的な設定方法を簡単に説明します。

Lambda

すでにブログで解説が公開されているため、下記方法をご参照ください。

タグ指定やインスタンスIDで指定でき、コード次第で複雑なことも対応できます。

SSMオートメーション(AWS提供ドキュメント)

SSMオートメーション(AWS提供ドキュメント)を用いた方法についてもすでにブログで解説がありますので、以下をご参照ください。

こちらは、インスタンスIDの指定のみです。

SSMオートメーション(自作ドキュメント)

タグ指定もできる自作ドキュメントを用いたSSMオートメーションの方法を紹介します。

ここでは、タグを指定してEC2インスタンスを再起動する手順について説明します。

まず、SSMオートメーションがEC2を操作するためのIAMロールを作成します。

IAMロールの信頼関係は、次のように設定します。

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

IAMポリシーは、以下の2つをアタッチします

  • ResourceGroupsandTagEditorReadOnlyAccess
    • タグを読み取るためです。
  • AmazonSSMAutomationRole
    • SSMオートメーションがEC2を操作するためです。

EC2のタグは、キーをAutomation-Restart、値をONとしました。

次はSSMドキュメントの作成です。作成画面で[Create document]の[Automation]を選択します。

再起動の場合、ドキュメントには、以下の内容を記載します。

description: RestartEC2Instances
schemaVersion: '0.3'
assumeRole: arn:aws:iam::アカウントID:role/作成したIAMロール名
mainSteps:
  - name: RestartEC2Instances
    action: aws:executeAwsApi
    inputs:
      Service: ssm
      Api: StartAutomationExecution
      DocumentName: AWS-RestartEC2Instance
      TargetParameterName: InstanceId
      Targets:
        - Key: 'tag:Automation-Restart'
          Values:
            - 'ON'

EC2の起動の場合は、以下のドキュメントです。

description: StartEC2Instances
schemaVersion: '0.3'
assumeRole: arn:aws:iam::アカウントID:role/作成したIAMロール名
mainSteps:
  - name: StartEC2Instances
    action: 'aws:executeAwsApi'
    inputs:
      Service: ssm
      Api: StartAutomationExecution
      DocumentName: AWS-StartEC2Instance
      TargetParameterName: InstanceId
      Targets:
        - Key: 'tag:Automation-Restart'
          Values:
            - 'ON'

EC2の停止の場合は、以下のドキュメントです。

description: StopEC2Instances
schemaVersion: '0.3'
assumeRole: arn:aws:iam::アカウントID:role/作成したIAMロール名
mainSteps:
  - name: StopEC2Instances
    action: aws:executeAwsApi
    inputs:
      Service: ssm
      Api: StartAutomationExecution
      DocumentName: AWS-StopEC2Instance
      TargetParameterName: InstanceId
      Targets:
        - Key: 'tag:Automation-Restart'
          Values:
            - 'ON'

最後に、作成したSSMドキュメントとバージョンをEventBridgeのターゲットに指定すると、EC2インスタンスの再起動ができます

このとき、新たに作成されたIAMロールにアタッチされた権限は、以下でした。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:ap-northeast-1:*:automation-definition/RestartEC2Instances:1"
            ]
        }
    ]
}

ポリシーではSSMドキュメントのバージョンも指定されているため、もしバージョンを変更する際は、ポリシーの修正(RestartEC2Instances:1)も必要です。

EventBridgeからEC2のAPIを呼ぶ

EventBridgeのターゲットをEC2 StopInstances API 呼び出しEC2 RebootInstances API 呼び出しを選択することで、EC2の再起動や停止することができます。

実行ロールは新しいロールを作成を選択します。

EC2の停止する場合、IAMロールは、ec2:StopInstancesの権限のみでよいのですが、ec2:TerminateInstancesec2:RebootInstancesと権限が付与されますので、不要の場合は修正しましょう。

EventBridge SchedulerからEC2のAPIを呼ぶ

EventBridge Schedulerを用いた方法については、既にブログ記事が存在します。以下のリンクをご覧ください。

タグ指定はできません。

参考

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-action-executeAwsApi.html