Amazon EventBridge と AWS Systems Manager オートメーション を使用したEC2インスタンスの起動、停止の自動化
はじめに
自動的にEC2インスタンスを起動、停止することでEC2インスタンスの停止忘れや、 使わない時間は停止することにより使用量を減らすことができます。
今回は、Amazon EventBridge を使用したトリガーでAWS Systems Manager オートメーションを実行しEC2インスタンスの起動と停止する方法をご紹介します。
事前に、自動化したいEC2インスタンスを準備しておきます。 US West (Oregon) us-west-2で作成しました。 また、作業はAdministrator権限を持つIAMユーザーを使用しています。
IAM ロールを作成する
AWS managedのポリシーのAmazonSSMAutomationRole
を持つIAMロールを作成し、
EventBridgeがこのロールを実行できるようにTrust relationshipsを設定します。
Identity and Access Management (IAM)のコンソールで Roles -> Create Role から IAMロールを作成します。
Step 1 Select trusted entity
- Trusted entity type:
AWS service
- Use case:
EventBridge
を選択したいところですが、Step2の Add permissions でAWS managed policyを選択できないので、EC2
を選択しNext
をクリック。
Step 2 Add permissions
検索バーにAmazonSSMAutomationRole
と入力し、
AWS managedのポリシーのAmazonSSMAutomationRole
にチェックを入れNext
をクリック。
Step 3 Name, review, and create
Role name: ec2-start-stop-role
を入力し Create role
をクリック。
IAM Roleが作成されたら、 View role をクリック、もしくは、Roles で ec2-start-stop-role
を検索しクリック、 Amazon EventBridge がこのロールを使うことができるように Trust relationships を変更します。選択します。
Trust relationships -> Edit trust policy をクリック。
"Service": "ec2.amazonaws.com"
から、
"Service": "events.amazonaws.com"
に変更し、Update policy
をクリック。
こちらで、IAMロールの作成は完了です。
Amazon EventBridge を設定する
次に、Amazon EventBridgeコンソールに移動してEventBridgeの設定をします。
平日9時にEC2インスタンスを起動するルールを作成します。
ナビゲーションペインで、Rules
-> Create rule
をクリック。
Step 1 Define rule detail
- Name:
EC2-start-weekdays
- Description - optional:
Start EC2 at 9:00 a.m. on weekdays
Schedule
を選択し、Next
Step 2 Define schedule
Cron Expressionsを参考に平日9時に起動するcronを設定します。UTCで設定しますが入力するとLocal time zone
でNext 10 trigger date(s)
をローカル時間で確認することができます。
問題なければNext
をクリックします。
0 16 ? * MON-FRI *
Step 3 Select target(s)
- Target types:
AWS service
- Select a target:
System Manager Automation
- Document:
AWS-StartEC2Instance
を選択します。 - InstanceId: 複数インスタンスの場合は配列で入力します。
["i-***","i-***","i-***"]
- Execution role: 先ほど作成したIAM Role
ec2-start-stop-role
を選択し、Next
Step 4 - optional Configure tags
Next
Step 5 Review and create
設定を確認してCreate rule
をクリックして完了です。
同様に毎日17時にEC2インスタンスを停止するルールを作成します。
こちらは設定内容だけ記載します。
Rules -> Create ruleをクリックし設定していきます。
Step 1 Define rule detail
- Name:
EC2-stop-weekdays
- Description - optional:
Stop EC2 at 5:00 p.m. on weekdays
Schedule
を選択
Step 2 Define schedule
- 平日5時に停止するcronを設定します。
0 0 ? * TUE-SAT *
Step 3 Select target(s)
- Target types:
AWS service
- Select a target:
System Manager Automation
- Document:
AWS-StopEC2Instance
- InstanceId:
["i-***","i-***","i-***"]
- Execution role: 先ほど作成したIAM Role
ec2-start-stop-role
を選択
Step 4 - optional Configure tags
Next
Step 5 Review and create
Create rule
これで、起動、停止の Amazon EventBridge ルールの作成完了です。
実行確認
AWS Systems Managerコンソールで確認してみます。
AWS Systems Manager -> Automation から確認。
CloudTrail -> Event history から確認。
停止
起動
まとめ
Amazon EventBridgeとAWS Systems Manager オートメーションを使用したEC2インスタンスの自動化についてご紹介しました。 AWSナレッジセンターには Lambda を使用したEC2 インスタンスの起動、停止の方法がありますので 興味がある方はこちらもご覧ください。
ありがとうございました。