LoginSignup
7
1

More than 5 years have passed since last update.

data pipelineを勢い任せに使ってみたけど無理だった話

Last updated at Posted at 2016-12-07

はじめに

以下の要求を満たしたものを使いたい。

  • DynamoDBに保存されたデータを定期的にバックアップを行いたい。
  • バックアップしたデータをリストアし、元の状態を復元できることを確認したい。
  • それらをマネージドなサービスで動かしたい。
  • バックアップに特化したスケジュールタスクのサービスであることが望ましい。
  • バックアップに成功したか失敗したか、通知してほしい。
  • 安い。

それっぽいサービスは以下の通りです。

  • AWS Data Pipeline
  • AWS Glue (未リリース)
  • AWS Batch (未リリース)

Data Pipeline、GlueはETLを行なうものとして考えて作られたサービスのようなので純粋なバックアップのスケジュールタスクというわけではなさそう。
Batchはその名の通り、バッチ処理をマネージドで行なうもののようです。

この内、AWS Data Pipeline でバックアップを行なう流れはどんな感じになるのかを試してみました。

オンプレミスに対しても何かできるみたいだけど今回はAWS上のDynamoDBをバックアップするので、割愛します。

料金

2016年12月6日現在の月額料金は以下の通り。

リージョン 低頻度 高頻度
バージニア北部 $0.60 $1.00
オレゴン $0.60 $1.00
アイルランド $0.60 $1.00
アイルランド $0.5715 $0.9524
アイルランド $0.60 $1.00

月額を日本円にすると低頻度は約60〜70円、高頻度は100円〜115円位になります。

  • 月前半が低頻度・月後半が高頻度だった場合
  • pipelineを作成・即時実行しpipelineを削除、を繰り返した場合

等はどのように課金されるのかはわかりませんでした。

※ 低頻度と高頻度の区別は、1日に1回以上実行するか否か。

無料枠

  • AWS で実行する低頻度の前提条件 3つ
  • AWS で実行する低頻度のアクティビティ 5つ

無料枠の繰越はなし。

前提知識

登場人物

以下はpipelineの説明に出てくる登場人物の概要です。

名前 概要
データノード タスクの入力データの場所または出力データが保存される場所。
アクティビティ リソースとデータノードを使用して、スケジュールに従って実行する作業の定義。
前提条件 アクションを実行する前に true である必要がある条件ステートメント。
パイプラインのスケジューリング アクティビティの実行など、予定されているイベントのタイミングの定義。
リソース パイプラインで定義する作業を実行するコンピューティングリソース。
アクション アクティビティの失敗など、指定された条件が満たされた場合にトリガーされるアクション。

事前準備

ロールの作成

初めてAWS Pipelineを作ろうとするとIAMに以下2つのロールができるようです。

  • DataPipelineDefaultResourceRole

AWS Data Pipeline が AWS リソースにアクセスすることを許可する。

  • DataPipelineDefaultRole

アプリケーションに AWS リソースへのアクセスを許可する。

バックアップ用のバケットを作成

適当なバケットを作成しました。

バックアップする対象のテーブル・テストデータの作成

DynamoDBにMyuon.DataPipeline.BackupTarget というテーブルをバックアップ対象として作りました。

リージョンはバージニア北部、入っているデータはとりあえずの1レコード。以下のとおりです。

スクリーンショット 2016-12-06 21.34.22.png

作ってみるの巻

利用するもの (想定)

  • ノード

    • DynamoDBデータノード
    • S3データノード
  • アクティビティ

    • 不明
  • 前提条件

    • 不明
  • アクション

    • 今回は割愛。

条件を設定してDynamoDBデータノードとS3データノードを作成し、それらをアクティビティでつなぐとバックアップされるのだろうか・・・。

実際の作業(現実)

最初はこんな感じの画面でモロモロ入力するようです。

スクリーンショット 2016-12-07 22.34.33.png

パイプライン作成

  • 一番上セクション
項目名
Name backup.dynamodb.Myuon.DataPipeline.BackupTarget
Description (optional) Myuon.DataPipeline.BackupTarget のバックアップ
Source Build using a template > Export DynamoDB table to S3

DynamoDBをS3にバックアップするpipelineのテンプレは用意されているようです。

スクリーンショット 2016-12-06 21.38.51.png

  • Parametersセクション
項目名
Source DynamoDB table name Myuon.DataPipeline.BackupTarget
Output S3 folder s3://xxxxxxx.dynamo.backup/
DynamoDB read throughput ratio 0.25
Region of the DynamoDB table us-east-1

raitoの部分は何を設定するのが適切なのか分からないため、デフォルトでセットされている値を採用しました。

  • Scheduleセクション
項目名
Run on pipeline activation

取り急ぎ実行するため、on pipeline activationにしました。

  • Pipeline Configurationセクション
項目名
Logging Enabled
S3 location for logs s3://xxxxxxx.dynamo.backup/logs/

ログを出力する場所を設定しました。

  • Security/Accessセクション
項目名
IAM roles Default

これは良くわかりませんが誘われるまま。

  • 一番下セクション

スクリーンショット 2016-12-06 23.04.27.png

え?EMRを使うよ、とかいってますね。

どうも、スケジュールしたタスクを実行するにはAWSの特定のリソース上にTaskRunnerというアプリをインストールする必要があるようです。

ざっと調べた感じだとEC2、EMRにタスクランナーがインストールできるようです。

ECSで必要な時に起動するようなタスクランナーをインストールするのがいいのでしょうか。
自分の想定やマニュアルと結構違いますが、進みます。

  • Edit in Architect!

う・・・。

スクリーンショット 2016-12-06 23.13.31.png

いきなりワーニングがでてるオーサリング機能が表示されました。

スクリーンショット 2016-12-06 22.36.51.png

マニュアルが古いのでしょうか?全然画面が違います。
以下がマニュアルにある、画面です。

スクリーンショット 2016-12-06 23.07.31.png

とりあえずワーニングを解消します。

terminateAfterはよく調べてませんが、恐らくバッチ処理の終了を永遠に待たないように一定時間をすぎたら何かのリソースをterminateする設定なのだと思います。

スクリーンショット 2016-12-06 23.15.30.png

default value is m1.small とかいってるわりに m3.xlarge とか設定されてます。

スクリーンショット 2016-12-06 23.18.32.png

m1.smallに変えてsaveしたら今度は以下のエラーがでました。

スクリーンショット 2016-12-06 23.16.42.png

m1.mediumに変えてsaveしたら通りました。

スクリーンショット 2016-12-06 23.22.50.png

なにはともあれ実行!

activateをクリックします。

WAIT_FOR_RUNNER というステータスのままで、生気が感じられません。

スクリーンショット 2016-12-06 23.23.59.png

もしやと思い、EMRのコンソールとEC2のコンソールを見たら案の定、出来てます。

うぉー。EC2に至ってはmasterがx1.mediumでslaveがナントカlarge(!!!)です。

このままほうっておくと、お金がどんどん掛かりそうなのでEC2を停止し、EMRも削除しました。

こうして、直感的にすすめたバックアップ作業はRTFMな失敗に終わりました。

次回、TaskRunnerの概念をもう少し学んで再挑戦します。

7
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1