Serverless frameworkを使ってスケジュールでEC2インスタンスの起動・停止するようにした
About
Serverlessを最近ちょこちょこ触るようになったので、lambda経由でEC2インスタンスのスケジュール起動・停止するやつを作りました。
やったこと
以前下の記事でRedashインスタンスの自動起動・停止の設定していたので、それをServerlessを使ってやってみたという感じです。
簡単な使い方
Serverlessの導入
npmが事前に入っていれば、installするだけで可能です。
$ npm -g install serverless
AWSのcredentialを用意
IAMの画面からcredential keyを発行してメモしておいてください。細かく考えるのが面倒なので、権限は雑にPowerUserとかにしています。。。
deployする
$ git clone git@github.com/tjinjin/serverless-sandbox.git $ cd schedule-instance $ vim serverless.yml functions: ec2Start: handler: handler.ec2Start events: - schedule: cron(0 0 ? * MON-FRI *) # ここで起動時間を設定UTC environment: instance: ${env:INSTANCE_ID} ec2Stop: handler: handler.ec2Stop events: - schedule: cron(0 10 ? * MON-FRI *) # ここで停止時間を設定UTC environment: instance: ${env:INSTANCE_ID}
どのインスタンスを対象にするかは環境変数で設定できるようにしてあるので、停止したいインスタンスのidをコンソールなどから確認して設定します。
export INSTANCE_ID=XXXXX
設定が終わればdeployして終わりです!
$ sls deploy
あとは時間になればcloudwatch eventがlambdaに送られ、lambdaがEC2の起動・停止命令を出してくれます。
まとめ
既に同じ仕組みは誰か作ってそうな気もしますが、勉強のためplugin化までできたらいいなーと思っています。
Serverless便利なので、皆さんやっていってください!