coffeeスクリプトでRedshiftを操作する

投稿者: | 2017年10月19日

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を操作できるようにします。

コメントを残す

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

CAPTCHA