フロッピーディスクの残骸

フロッピーディスクを分解するのって楽しいよね

EC2インスタンス(開発環境)を夜間停止し、さらに祝日にも対応させる

EC2インスタンスを利用しない夜間と祝日は停止させて、平日の朝に起動する
というのをやりたくていろいろググってました。

どっかでcron的なものを回さなければならないんだけど、
どうやらみなさんLambdaを利用しているらしい。

EC2の起動・終了

dev.classmethod.jp

これだけやれば、夜間停止と朝の起動はできそうだ。

後は祝日対応なんだけど、このスクリプトに付け足していろいろ頑張ってみようと思う。

祝日判定

これ利用すれば良さそう。

qiita.com

DebugMessageをSlackに流したい

これを利用すると良い

www.npmjs.com

最終的なソース

function slack_post(message) {
  var Slack = require('slack-node');
  webhookUri = "__WebHookURL__";

  slack = new Slack();
  slack.setWebhook(webhookUri);

  slack.webhook({
    channel: "#general",
    username: "LambdaNotification",
    text: message,
  }, function(err, response) {
    console.log(response);
  });
};

function holiday_check() {
  var JapaneseHolidays = require('japanese-holidays');
  var today = new Date();
  var holiday = JapaneseHolidays.isHoliday(today);
  if(holiday) {
    return true;
  } else {
    return false;
  }
};



function ec2_start() {
var AWS = require('aws-sdk');
AWS.config.update({region: 'ap-northeast-1'});

var ec2 = new AWS.EC2();

var params = {
  InstanceIds: [
    'INSTANCE_ID',
    'INSTANCE_ID'
  ]
};
ec2.startInstances(params, function(err, data) {
  if (!!err) {
      console.log(err, err.stack);
      slack_post(err);
  } else {
      console.log(JSON.stringify(data));
      slack_post(JSON.stringify(data));
  }
});
};


exports.handler = function(event, context) {
  var holiday = holiday_check();
  var message = "";

  if (holiday) {
      message = "今日は祝日のため、サーバーの起動は行いません。"
      console.log(message);
      slack_post(message)
    return ;
  } else {
      message = "今日は平日です。サーバーの起動を行います。"
      console.log(message);
      slack_post(message)
      ec2_start();
  }
}

停止する場合は、ec2.startInstancesec2.stopInstancesに変更するだけで停止処理にできます。
functionの名前も変えて利用してくださいね。


おまけ

沖縄は6/23に慰霊の日というものがあって、その日は祝日になったりします。
(企業さんによっては仕事なんだけど)

japanese-holiday-jsでは、日本の祝日は網羅してあるんだけど、
地方で定められた祝日は対応できないので、どうにかしてがんばってみる。

ソフトウェア/javascript/japanese-holidays - 武内@筑波大

japanese-holiday-jsの開発者さんのページに山の日を追加したときの対応が書かれてて
これなら楽にメンテできそうだったので、uchina-holidays-jsを作成して公開しました。

www.npmjs.com

作成後に気づいたけど、
慰霊の日は普通に仕事だった...(ToT)