TalendでらくらくRedshiftのリストア実行

2017.01.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、DI部のおおたきです。
Amazon Redshiftですが起動してるだけでコストがかかるため使用していない時間帯はシャッドダウンしておくケースが良くあります。使用する際にはスナップショットからリストアするわけですが、マネージメントコンソールから手動で行うのは結構手間になります。
今までにも弊社ブログでAWS CLIなどを使用してリストアの方法をご紹介していますが、今回はTalendを使って簡単にリストアする方法をご紹介したいと思います。
今回使用しているTalend Open Studioのバージョンは6.2.1です。

ジョブを作成する

早速やってみたいと思います。Talend Open Studioを起動してジョブ(ここではRedshiftResotreというジョブ名にしています)を作成します。作成したら「tAmazonRedshiftManage」コンポーネントを配置します。
01.コンポーネント
これに設定値を入力するば、もう出来上がりです!それでは設定値を見ていきましょう。

基本設定

コンポーネントを選択して、コンポーネントタブを開きます。Access Key及びSercret Key項目についてはお使いの環境のアクセスキーとシークレットキーを入力してください。次にActionを選択します。Action項目からは以下が選べます。

  • Create Cluster
  • Delete Cluster
  • Resize Cluster
  • Restore from snapshot
  • Delete snapshot」

今回はスナップショットからのリストアを行うので「Restore from snapshot」を選択します。Actionの項目によって他のConfiguration項目が変わってきます。「Restore from snapshot」を選択したときの項目は以下になります。

  • Region:使用しているリージョン
  • Snapshot id:リストアする対象となるスナップショットのID
  • Cluster id:リストアするときのClusterのID
  • Port:ポート番号
  • Node type:リストアするときのノードのタイプ

詳細設定

次に詳細設定です。こちらも基本設定で選択したAction項目によって設定できる項目が変わります。「Restore from snapshot」の場合は以下になります。

  • Wait for cluster ready:クラスターの起動が完了するまでジョブの処理を待つ
  • Original cluster id og snapshot:復元対象のスナップショットID
  • Parameter group name:Clusterのパラメータグループ名
  • Subnet group name:サブネットグループ名
  • Publicly accessible:パブリックアクセスの可否
  • Set public ip address:パブリックアクセス可の場合に指定するEIP
  • Availability zone:アベイラビリティーゾーン
  • VPC security group ids:VPCセキュリティグループのID

今回設定した内容は以下になります。
02.基本設定

03.詳細設定

実行してみる

実行してみます。
「Wait for cluster ready」にチェックを入れたので、クラスタの起動が完了しているまで待っていることがわかります。
04.実行1
しばらくすると完了します。 05.実行2
マネージメントコンソールを見るとリストアされていることがわかります。
06.コンソール

Talend Open Studio上から簡単にリストアすることができました。しかし実際の運用ではStudio上からでなくスケジューラーなどでジョブを実行しリストアしたいケースが多いかと思います。Talendのジョブは実行形式(jarファイル)にして出力することが可能です。出力したファイルはシェル(またはバッチファイル)からjarファイルを実行しジョブを動かすことができます。
また実行形式に出力したjarファイルに引数を受け取るようにすることも可能です。例えば今回のリストアするジョブの場合、リストアする対象のスナップショットIDが今後変わることが想定されます。その場合、スナップショット名を実行時の引数に設定することでジョブを修正することなく対応することが可能になります。

実行時に引数を受け取れるようにする

ジョブを修正します。引数を受け取るようにするにはTalendではコンテキストというものを使用します。コンポーネントを選択してContextタブを開きます。
プラス(➕)ボタンをクリックして項目を追加します。Nameに「snapshot_id」と入力します。valueは引数の値を使用するので空のままにします。
07.コンテキスト
次にコンポーネントタブを開きます。「Snapshot id」項目の値を「context.snapshot_id」に変更します。contextはTalendが持っているコンテキストの値を格納するための変数です。コンポーネントの設定値はダブルクォートで囲わないと変数として扱うことができます。
08.コンポーネント
これでコンテキストに設定された値が使用されるようになり、実行時の引数にsnapshot_idの指定があれば、コンテキストの値は上書きされて実行されるようになります。

実行形式にして出力する

作成したジョブを出力します。画面左のリポジトリメニューからジョブを選択して右クリックから「ジョブのエクスポート」を選択します。「ビルドタイブを選択」が「自律実行ジョブ」になっていることを確認します。次に「パラメータ値の上書き」ボタンをクリックします。先ほど設定したコンテキストの項目が表示されるので値に「test-20160803」と入力し、「OK」ボタンをクリックし「Finish」ボタンをクリックして出力します。 09.パラメータの上書き


出力されたファイルを解凍して、RedshiftRestoreフォルダの中を見てみます。「RedshiftRestore_run.bat」と「RedshiftRestore_run.sh」があり、これが起動ファイルになります。shファイルの中身を見てみるとjarファイルを実行しているのがわかります。また最後に「--context_param」という引数があり、出力時に設定した値が設定されているのがわかります。これが実行時にジョブに渡される値になります。

--context_param snapshot_id=test-20160803 "$@"

この起動ファイルをスケジューラなどに登録することで定期実行することができるようなり、リストアする対象のスナップショットが変わった場合はこの起動ファイルを修正するだけで済むようになります。

まとめ

今回はTalendを使ってRedshiftのリストアをしてみました。同様にRedshiftを削除するジョブを作成することで必要な時のみRedshiftを起動させておくことが簡単にできるようになるかと思います。
他にもTalendには便利なコンポーネントがありますので機会があればご紹介したいと思います。今回は以上です。