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の一覧取得から作成、バックアップ、削除まで一通りの機能を実装しています。
チャットボットに何を入力して良いか分からなくならないようヘルプも追加しました。
実際に使ってみるとこうなります。
今回は固定文字列を入力させる実装になっているのでもう少し幅を持たせたいところです。