tjinjin's blog

さらなる高みに1nmずつ近づくブログ

Serverless frameworkを使ってスケジュールでEC2インスタンスの起動・停止するようにした

About

Serverlessを最近ちょこちょこ触るようになったので、lambda経由でEC2インスタンスのスケジュール起動・停止するやつを作りました。

やったこと

以前下の記事でRedashインスタンス自動起動・停止の設定していたので、それをServerlessを使ってやってみたという感じです。

cross-black777.hatenablog.com

簡単な使い方

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便利なので、皆さんやっていってください!