初歩的な内容となりますが、今回は「EventBridge」を利用して、任意EC2を任意時刻に停止させる方法をご紹介します。

昼間、不定期で開始させるEC2があるのだけど、停止忘れを防ぐために「毎日17時に必ず停止させたい・・・。」
Amazon EventBridge はサーバーレスイベントバスであり、アプリケーション、統合された Software-as-a-Service (SaaS) アプリケーション、および AWS のサービスから生成されたイベントを使用して、イベント駆動型アプリケーションを大規模に構築することを容易にします。


ということで、今回はEventBridge内のcronによってイベントを発火させて、任意EC2を停止させます。
設定方法
次の流れで進めます。
- EventBridgeのルールで利用するIAMロールを作成
- EventBridgeでルールを作成
EventBridgeのルールで利用するIAMロールを作成
事前に、ルール登録の際に必要なIAMロールを作成しておきます。(EventBridgeから呼び出せて、EC2停止操作等が行えるIAMロールとなります。)
★以降、実際の手順です。
IAMメニューより「ロールを作成」をクリックし、ステップ毎に進めていきます。
■ステップ1
- 信頼されたエンティティ:AWSサービス
- ユースケースの選択:EC2

■ステップ2
- ポリシー選択:AmazonSSMAutonationR

■ステップ3
お好みでタグを設定してください。
■ステップ4
ロール名を入力して作成を完了させます。
続いて、作成したIAMロールに対して信頼関係「events.amazonaws.com」を追加していきます。(本操作が抜けるとEventBridgeのルール作成におけるロール選択肢に表示されません。)
作成したロールを表示し「信頼関係」タブ→ 「信頼関係の編集」をクリックします。

以下のように「”Service”: “events.amazonaws.com”」を追加して信頼ポリシーの更新を行います。(直前の行に「,」も忘れずに追加します。)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
次のように「IDプロバイダー events.amazonaws.com」が追加されればOKです。


以上で「IAMロール」の作成完了です。
EventBridgeでルールを作成

続いて「Amazon EventBridge」サービスでEC2停止用のルールを作成していきます。
ルールメニューより「ルールを作成」をクリックします。

パターンを定義において、
- 「スケジュール」を選択します。
- 「Cron式」を選択してCRON式を入力します。「10 08 ? * * *」の場合は、毎日17時10分(JST)にルールが発動します。

「イベントバスを選択」は特に変更しません。

ターゲット選択では次のようにします。
- ターゲット:Systems Manager オートメーション
- ドキュメント:AWS-StopEC2Instance
- 定義@InstanceId:対象EC2のインスタンスIDを入力します。[“インスタンスID”] のように入力します。また、[“インスタンスID1”, “インスタンスID2”]のようにカンマ区切りで複数インスタンスを指定することも出来ます!

ロールの部分は「既存のロールを使用」を選択し、先ほど作成したIAMロールを選択します。(ここでロールが選択できない場合はIAMロールに信頼関係が与えられていません)


設定は以上となります。後は時間になると、EC2停止APIがコールされ、該当EC2が停止されます。

ありがたい(これで無駄に課金して怒られることも減るかな)
補足説明
・EC2「開始」の場合は別途イベントを作成し、ターゲットのドキュメント指定部で「AWS-StartEC2Instance」を選択して後は同じように設定すればOKです。IAMロールは使いまわし可能です。
・開始と停止用のイベントを組み合わせることで毎日決まった時間(営業時間など)にEC2を稼働させることが出来ます。
・停止済みEC2に対して、停止命令が発行されても問題は生じません。(逆に、開始済みEC2に対して、開始命令も同様に問題なし。)
まとめ
Amazon EventBridgeを利用したEC2停止方法について記載しました。簡単に設定できるため稼働時間管理の観点でも使いこなせるようになると便利です。

最後までご覧いただき、ありがとうございました。
コメント