はじめに
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:TerminateInstances
とec2:RebootInstances
と権限が付与されますので、不要の場合は修正しましょう。
EventBridge SchedulerからEC2のAPIを呼ぶ
EventBridge Schedulerを用いた方法については、既にブログ記事が存在します。以下のリンクをご覧ください。
タグ指定はできません。
参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-action-executeAwsApi.html