coffeeスクリプトでRedshiftを操作するスクリプトを作成しました。
以下、スナップショットの一覧を取得のスクリプトです。
取得するスナップショットは300日前までを設定しています。
AWS = require("aws-sdk") AWS.config.loadFromPath("./credentials.json") AWS.config.update({region: 'ap-northeast-1'}) startDate = new Date(); endDate = new Date(); startDate.setDate(endDate.getDate() - 300); redshift = new AWS.Redshift(); params = { EndTime: endDate, StartTime: startDate } redshift.describeClusterSnapshots params,(err,data) -> if err console.log "error" else for i in [0..data.Snapshots.length] if (data.Snapshots[i]) snapshot = data.Snapshots[i] console.log snapshot.SnapshotIdentifier
実行すると下記のようにスナップショット名の一覧が取得できます。
$ coffee describeClusterSnapshots.coffee rs:cluster-2017-10-17-09-05-50 rs:cluster-2017-10-17-01-05-47 rs:cluster-2017-10-16-17-05-44 cluster-20170831 cluster-20170825
続いて、スナップショットからクラスターをリストアするスクリプトです。
AWS = require("aws-sdk") AWS.config.loadFromPath("./credentials.json") AWS.config.update({region: 'ap-northeast-1'}) cluster = process.argv[2] snapshot = process.argv[3] redshift = new AWS.Redshift(); params = { ClusterIdentifier: cluster, SnapshotIdentifier: snapshot } redshift.restoreFromClusterSnapshot params,(err,data) -> if err console.log err.stack else console.log "create cluster"
実行するとクラスターの作成が開始されます。
第1引数にクラスター名、第2引数にスナップショット名を指定します。
$ coffee restoreCluster.coffee cluster cluster-20171018 create cluster
続いて、クラスタのスナップショットを取得するスクリプトです。
AWS = require("aws-sdk") AWS.config.loadFromPath("./credentials.json") AWS.config.update({region: 'ap-northeast-1'}) cluster = process.argv[2] snapshot = process.argv[3] redshift = new AWS.Redshift(); params = { ClusterIdentifier: cluster, SnapshotIdentifier: snapshot } redshift.createClusterSnapshot params,(err,data) -> if err console.log err.stack else console.log "create snapshot start"
実行するとスナップショットの取得が開始します。
第1引数にクラスター名、第2引数にスナップショット名を指定します。
$ coffee restoreCluster.coffee cluster cluster-20171018 create snapshot start
最後にクラスターを削除するスクリプトです。
AWS = require("aws-sdk") AWS.config.loadFromPath("./credentials.json") AWS.config.update({region: 'ap-northeast-1'}) cluster = process.argv[2] redshift = new AWS.Redshift(); params = { ClusterIdentifier: cluster, SkipFinalClusterSnapshot: true } redshift.deleteCluster params,(err,data) -> if err console.log err.stack else console.log "delete cluster start"
実行するとクラスターの削除を開始します。
第1引数にクラスター名を指定します。
$ coffee deleteCluster.coffee cluster delete cluster start
Redshiftは費用が高く、停止操作ができないため開発期間中は作成と削除を繰り返し行います。
これらを簡易的に操作を行えるようにするため今回はスクリプト化しました。
次のステップとしてこのスクリプトをチャットボットに組み込みチャットでRedshiftを操作できるようにします。