AWSでEC2の定期的な起動停止を実装する際に、どのような方法が考えられるかメモ
EC2の起動停止について
- LambdaでEC2の起動停止を実装
- Systems Manager Automation ランブック(AWS-StartEC2Instance または AWS-StopEC2Instance)を利用して起動停止を実装
- AWS Step Functionから起動停止するよう実装
- 管理用のEC2を構築して起動停止を実行
- etcetc
Lambdaでコードを書いて起動停止を実装するか。
コーディングしなくてもSystems Manager Automation ランブックで用意されている起動停止のドキュメントを利用すればEC2の起動停止を実行できます。
また他にも管理用のEC2立てたりなんだりと、方法を考え出すと色々と思い当たる所があります。
なお今回はAWSサービスを利用してといった所が主眼となるため、AWS以外で起動停止するサービスは考慮外。
定期的な実行について
- EventBridgeルールからLambda、Systems Manager Automation ランブックを定期実行
- Systems Manager メンテナンスウィンドウからLambda、Systems Manager Automation ランブックを定期実行
- 管理用のEC2を構築してそこから定期実行
- etcetc
他にも色々と考えられる
AWSの各種サービスを組み合わせる事により。
AWS Step FunctionsからLambdaを呼び出したり
AWS Step Functionsの中でSystems Manager Automation ランブックを呼び出したり
Systems Manager Change Calendarを利用したり
それらをEventBridgeルールやSystemas Manager メンテナンスウィンドウから呼び出したり
また試したことはありませんがAWSサービスを組み合わせた実装された環境をAWS Instance SchedulerとしてCloudFormationで構築できるよう提供されていたり。
調べだすと一言に起動停止といっても、AWSの色々なサービスをそれぞれ組み合わせて実装でき、いくつものパターンがある事に気が付きます。
個人的にはちょっとした環境で起動停止を組むなら、Systems Manaer メンテナンスウィンドウとSystems Manager Automationを組み合わせて実装するのが、コーディングもなく、また手軽に実装できて気に入っています。
re:Postのナレッジセンターにあるドキュメント
re:Postのナレッジセンターにいくつか実装について説明している記事があるので紹介します。
Systemas Managerのメンテナンスウィンドウ & Systems Manager オートメーション
Systems Manager Maintenance Windows を使用して EC2 インスタンスを開始および停止するようにスケジュールするには、どうすればよいですか?
Systems Manager メンテナスウィンドウを設定して、そこからSystems Manager Automationを実行してEC2インスタンスを起動停止する方法について説明しています。
ドキュメントを読んでいけば実装できますが、個人的には一点だけ注意が必要で。
ターゲット登録の部分を紹介されている手順から変更して実装してみて動かない事象を確認しましたが、改めてドキュメントを読むとその選択肢では動かない事が書いています。
[インスタンスタグを指定] をターゲットオプションとして使用しないでください。このオプションではインスタンスを起動できません。
ドキュメントななめ読みして、改変して動かないなんて事があったのでその点だけは注意が必要かと思います。
EventBrdige & Lambda
Lambda を使用して Amazon EC2 インスタンスを定期的に停止し、起動する方法を教えてください。
EventBridgeとLambdaを利用するパターン。
こちらもドキュメントを読んで構築していけば簡単に実装できます。
総評
とあるAWSアカウントではAWSサービスを組み合わせて自動起動と自動停止が実装されていると話だけ聞いていて。
実際にその設定がどうなっているか確認したら、自分が想定したAWSサービスとは別サービスを組み合わせて実装されていたケースだった事がありました。
そういう事もあるよなって事を感じたのでまとめてみました。