こんばんは!ヒカリです。
Webエンジニアを目指してプログラミングを勉強している初心者の方向けに情報を発信しています。
今流行の仮想通貨を自動売買してみました!
リモートワークでおすすめのグッズ紹介してみました!
業務時間中にしか使っていないのに検証用のインスタンスを常に起動している…
なんてことはありませんか?
EC2は使っていなくても起動しているだけでお金がかかってしまいます。
数日間であればまだ良いのですが、年単位になるとかなり大きな損失になってしまいます。
そこで、必要なときだけインスタンスを起動するように設定していきます!
- AWS
- EC2
- CloudWatch Events
- SSM
ECSの場合はこちら!
IAMロールの準備!
まずはCloudWatch EventsからSSMを操作するためのIAMを作成しておきます。
まずはIAMのロール→ロールの作成と進んでください。

ユースケースの選択でCloudWatch Eventsを選択します。

そしてあとはそのまま作成してください。
今回はec2-start-and-stop-roleという名前で作成しました。
その後、ロールの一覧画面から作成したロール(ec2-start-and-stop-role)を選択し、詳細ページを開きます。
次に ポリシーをアタッチします からAmazonSSMAutomationRoleをアタッチします。
AmazonSSMAutomationRole以外のポリシーは削除します。
最終的にはこのようなロールができていると思います。

CloudWatch Eventsだけで設定可能!
では実際に自動起動・自動停止の設定していきます。
今まではLambdaとCloudWatch Eventsを使う方法が主流だったみたいですが、今はCloudWatch Eventsだけで出来ちゃいます。
まずはCloudWatchのルール→ルールの作成と進んでください。

自動停止の設定
今回は平日の24時に停止するように設定してみます。
イベントソースはスケジュールのCron 式を選択し、クーロン式には 0 15 ? * MON-FRI *
を入力します。
Cron 式はUTCで入力する必要があるので日本時間(JST)の場合は9時間前となります。
ターゲットはSSM Automationを選択し、ドキュメントにAWS-StopEC2Instanceを設定します。
そして定数のInstanceIdに停止したいEC2インスタンスのIDを入力します。
ロールは既存のロールを使用を選択して先ほど作成したec2-start-and-stop-roleを選択しましょう。

そして設定の詳細へと進み、任意の名前と説明を入力してください。
有効化にチェックを入れると作成した時点で定期実行設定が有効化されます。
私は以下のように設定しました。
- 名前:StopEC2Instance
- 説明:平日の24時にEC2インスタンスを停止します。
- 有効化:✔
そして作成したら、設定を確認してみましょう。
ルールの一覧から作成したルールの詳細ページを開きます。
複数のインスタンスを指定した場合、入力の定数が以下のようになっているはずです。
{“InstanceId”:[“i-XXXXXXXX”,”i-XXXXXXXX”]}
この様になっていない場合はうまくInstanceIdを設定できていないので、編集画面からもう一度
[“i-XXXXXXXX”,”i-XXXXXXXXX”]
のように入力してみてください。
これで24時に自動停止する設定は完了しました。
自動起動の設定
次に8時に自動起動するように設定してみましょう!
手順はほぼ同じでCron 式とドキュメントの設定値を変えるだけです。
8時に設定する場合、9時間前だと日付を跨いでしまうのでSUN-THUとなります。
- Cron 式:0 23 ? * SUN-THU *
- ドキュメント:AWS-StartEC2Instance

そして名前と説明を入力してルールを作成します。
- 名前:StartEC2Instance
- 説明:平日の8時にEC2インスタンスを起動します。
- 有効化:✔
自動停止設定と同様に設定の確認を行ってください。
これで平日の8時に起動し、24時に停止する設定が完了しました。
不安な方はCron 式の設定を変えてみて動作確認してみてください!
あとがき
ドキュメントをAWS-StartRdsInstance、AWS-StopRdsInstanceにすることでRDSの自動起動・自動停止も可能です。
使わないときは停止して無駄のないような運用をしたいですね!