チャットボット、hubotでRedshiftを操作する

投稿者: | 2017年10月24日

hubotでRedshiftを操作できるようにしました。
前回作成したcoffeeスクリプトをhubotに組み込んでいます。
なお、チャットツールはRocketChatになります。
以下、チャットボットのスクリプトです。

module.exports = (robot) ->
  robot.hear /Redshiftのヘルプ$/i, (msg) ->
    message = "□□□□□ 以下の内容をチャットで発言してください □□□□□\n"
    message = message + "1.スナップショット一覧の表示\n"
    message = message + " Redshiftのスナップショット一覧\n"
    message = message + "2.クラスタ一覧の表示\n"
    message = message + " Redshiftのクラスタ一覧\n"
    message = message + "3.スナップショットからのリストア\n"
    message = message + " Redshiftの{スナップショット名}を{クラスタ名}の名前でリストア\n"
    message = message + "4.クラスタのバックアップ\n"
    message = message + " Redshiftの{クラスタ名}を{スナップショット名}の名前でバックアップ\n"
    message = message + "5.クラスタの削除\n"
    message = message + " Redshiftの{クラスタ名}を削除\n"
    msg.send "#{message}"
  robot.hear /Redshiftのスナップショット一覧$/i, (msg) ->
    AWS = require("aws-sdk")
    AWS.config.loadFromPath("/home/rocketchat/hubot/scripts/credentials.json")
    AWS.config.update({region: 'ap-northeast-1'})
    startDate = new Date();
    endDate = new Date();
    startDate.setDate(endDate.getDate() - 180);
    message = ""
    redshift = new AWS.Redshift();
    params = { EndTime: endDate, StartTime: startDate }
    redshift.describeClusterSnapshots params,(err,data) ->
      if err
        msg.send "API実行時にエラーが発生しました"
      else
        for i in [0..data.Snapshots.length]
          if (data.Snapshots[i])
            snapshot = data.Snapshots[i]
            message = message + "\n" + snapshot.SnapshotIdentifier
        msg.send "180日前までのスナップショット一覧 #{message}"
  robot.hear /Redshiftのクラスタ一覧$/i, (msg) ->
    AWS = require("aws-sdk")
    AWS.config.loadFromPath("/home/rocketchat/hubot/scripts/credentials.json")
    AWS.config.update({region: 'ap-northeast-1'})
    message = ""
    redshift = new AWS.Redshift();
    params = { }
    redshift.describeClusters params,(err,data) ->
      if err
        msg.send "API実行時にエラーが発生しました"
      else
        for i in [0..data.Clusters.length]
          if (data.Clusters[i])
            cluster = data.Clusters[i]
            message = message + "\n" + cluster.ClusterIdentifier
        msg.send "クラスタ一覧 #{message}"
  robot.hear /Redshiftの(.*)を(.*)の名前でリストア/i, (msg) ->
    AWS = require("aws-sdk")
    AWS.config.loadFromPath("/home/rocketchat/hubot/scripts/credentials.json")
    AWS.config.update({region: 'ap-northeast-1'})
    cluster = msg.match[1]
    snapshot = msg.match[2]
    redshift = new AWS.Redshift();
    params = {
      ClusterIdentifier: cluster,
      SnapshotIdentifier: snapshot
    }
    redshift.restoreFromClusterSnapshot params,(err,data) ->
      if err
        msg.send "API実行時にエラーが発生しました"
      else
        msg.send "#{msg.match[1]}を#{msg.match[2]}の名前でリストア開始"
  robot.hear /Redshiftの(.*)を(.*)の名前でバックアップ/i, (msg) ->
    AWS = require("aws-sdk")
    AWS.config.loadFromPath("/home/rocketchat/hubot/scripts/credentials.json")
    AWS.config.update({region: 'ap-northeast-1'})
    cluster = msg.match[1]
    snapshot = msg.match[2]
    params = {
      ClusterIdentifier: cluster,
      SnapshotIdentifier: snapshot
    }
    redshift = new AWS.Redshift();
    redshift.createClusterSnapshot params,(err,data) ->
      if err
        msg.send "API実行時にエラーが発生しました"
      else
        msg.send "#{msg.match[1]}を#{msg.match[2]}のスナップショット取得開始"
  robot.hear /Redshiftの(.*)を削除/i, (msg) ->
    AWS = require("aws-sdk")
    AWS.config.loadFromPath("/home/rocketchat/hubot/scripts/credentials.json")
    AWS.config.update({region: 'ap-northeast-1'})
    cluster = msg.match[1]
    params = {
      ClusterIdentifier: cluster,
      SkipFinalClusterSnapshot: true
    }
    redshift = new AWS.Redshift();
    redshift.deleteCluster params,(err,data) ->
      if err
        msg.send "API実行時にエラーが発生しました"
      else
        msg.send "#{msg.match[1]}の削除開始"

Redshiftの一覧取得から作成、バックアップ、削除まで一通りの機能を実装しています。
チャットボットに何を入力して良いか分からなくならないようヘルプも追加しました。
実際に使ってみるとこうなります。

今回は固定文字列を入力させる実装になっているのでもう少し幅を持たせたいところです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA