フェイス・ソリューション・テクノロジーズ株式会社 IS 本部 OS ユニットの Saki@猫好き です。AWS 活用していますか?
例えば、検証環境の EC2 インスタンスを立ち上げっぱなしにしておくと、どんどん課金されてしまいます。複数プロジェクトが進行していて、複数のインスタンスが無駄に起動している状態となってしまうと、経理チームから指導が入ることになります。
今日は、そんな事態を防ぐために、EC2 インスタンスの自動起動、自動停止について書きたいと思います。
はじめに
数年前、とあるプロジェクトで、検証環境を毎日定時に起動し、毎日定時に停止させる、という要件がありました。当時は、特定のタグがついているインスタンスの起動、停止を行う Lambda を作成して、その Lambda を実行する CloudWatch Event を作成した記憶があります。
自由度は大きかったのですが、初心者には簡単ではありません。
実際、すべてのインスタンスを停止させてしまうという事故も発生したことがあります・・・。
また、私のような AWS 好きは、インスタンスが動いているなら何かしたい、と思ってしまい、時間を忘れて検証環境を触ってしまうものです。機械的に停止してくれれば諦めがつくってもんで、仕方ないから帰ろうか、ってなります。(断じて社畜ではない)
設定方法
今回は、出来る限りポチポチとボタンを押していくだけで設定可能な方法にしてみました。
実際に何かを入力する場面は「ロール名」や「イベント名」の設定と、まだコンソールに実装されていない設定を追加するくらいです。
検証環境に無駄なお金を費やしている方は、是非お試しください!
前提条件
自動起動、自動停止をさせるためのインスタンスをご用意ください。そして、そのインスタンスのインスタンス ID をお手元にご用意ください。
ロールの作成
IAM のコンパネに進み、ロールを作成します

【ハマりどころ】後ほど修正します
他の AWS のサービスのユースケースから、「CloudWatch Events」を選択します

「AmazonSSMAutomationRole」をアタッチします

ロール名を入力します。今回は「ssmEventsRole」としました

このままでは確実にエラーが発生するのですが、反省の意味も込めて、このまま進めさせてください。
EventBridge での作業

EventBridge でルールの作成を行います

ルールの名前を適当につけて、「スケジュール」を選択します

今回は、毎日 10 時にインスタンスが起動する設定としています
rate や cron の書き方については公式をご参考ください。

ターゲットは「すべての API」から「Amazon EC2」を選択します

検索窓に「start」と入力し、「StartInstances」を選択します

下部の「InstanceIds」パラメータに、用意したインスタンス ID を入力します

アクセス許可で「既存のロール」→先ほど作成したロールを選択します

エラーが発生しました

The execution role you povide must allow AWS EventBridge Scheduler to assume the role.
EventBridge Scheduler がロールを引き受けられないよって怒られます。
※※ 作成した IAM ロールの信頼関係を修正します ※※
「events.amazonaws.com」となっているものを、「scheduler.amazonaws.com」に変更します。

スケジュールが作成されました

10 時になりました

無事、インスタンスが起動した模様。
自動停止もポチポチで作れます!




無事、インスタンスが停止した模様。
最後に
ちょっとしたハマりどころはありましたが、本当に簡単に自動起動、自動停止の設定を作ることができました。Lambda でやっていた頃が懐かしい。
Amazon CloudWatch Events の機能を拡張して作られた Amazon EventBridge ですが、日に日に存在感を増しているように感じています。最近まで Lambda を作成して Amazon CloudWatch Events で動かすようなことを多くやっていましたが、Amazon EventBridge が登場して以降、私の中での開発の容易さとスピードが加速しました。
少し目を離した隙に連携可能なサービスが増えていたり、コンパネの見た目が変わっていたり、追いかけるのは大変ですが、今後も、Amazon EventBridge を活用していきたいです。
どなたかの参考になれば幸いです。
引き続き、よろしくお願いいたします!
コメント