[AWS][Node.js]WorkSpacesでUnhelthyになったら、自動再起動するようにした

WorkSpacesがUnhelthyになってしまう、ログインできなくなる事象に出くわしたので、CloudWatchでWorkSpacesのステータス監視をして、Unhelthyになったら自動再起動するプログラムを作りました。

流れ

CloudWatch監視→Unhelthyを検知→SNS(Lambdaを発火)

プログラム

const AWS = require('aws-sdk');
const workspaces = new AWS.WorkSpaces({region: 'ap-northeast-1'});
const co = require('co');

exports.handler = (event, context, callback) => {
  co(function *() {

    // workspacesのクライアント一覧を取得
    let workspacesClientList = yield describeWorkspaces();

    // クライアント台数分ループ
    for(let i = 0; i < workspacesClientList.length; i++){

      // Unhealthyの場合はOS再起動
      if(workspacesClientList.Workspaces[i].Status === 'UNHEALTHY'){

        //対象クライアントを再起動
        yield rebootWorkspace(workspacesClientList.Workspaces[i].WorkspaceId);

        console.log('リブート対象:' + workspacesClientList.Workspaces[i].WorkspaceId);
      }
    }
  });
};
function describeWorkspaces() {
  return workspaces.describeWorkspaces().promise();
}

function rebootWorkspace(workspaceId) {
  let params = {
    RebootWorkspaceRequests: [
      {
        WorkspaceId: workspaceId
      }
    ]
  }
  return workspaces.rebootWorkspaces(params).promise();
}