cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平@inokara)です。

はじめに

前回の続きです。

Datapipeline には Task Runner と呼ばれるスケジューリングされたタスクを実行する為のエージェントアプリケーションリソースを以下のように定義している。

ざっくり言うと、前者は AWS が管理しているリソースで後者はオンプレミスのサーバーや既に稼働している EC2 インスタンスを利用するというお話。


ということで…

後者を実現する為に Task Runner 用のアプリケーションが AWS から以下のように配布されている。

これを使って Data Pipeline を介して既に起動している EC2 内でタスクを実行させてみたい。

やりたいこと

以下のようなタスクを行う Pipeline を作ってみる。

  1. 定期的に /tmp/test ディレクトリを作成
  2. 作成したら /tmp/test ディレクトリに /var/log/td-agent/td-agent.log をコピー

あまり Data Pipeline を使う意味が無さそうな感じだけど…

Pipeline の作成

以下のように Activity だけの Pipeline を作成しておく。

01


Task Runner アプリケーションをインストールから起動まで

インストールと起動はそれほど難しくない。インストールした環境は下記の通り。

  • Amazon EC2
  • CentOS 6.5

Java 環境のインストール

Task Runner アプリケーションは…

Task Runner requires Java version 1.6 or later. To determine whether Java is installed, and the version that is running, use the following command:

とあるので、以下のように Java 1.7 をインストールする。(OpenJDK でも良さそう)

yum install java-1.7.0-openjdk.x86_64

一応、確認。

java -version

ちゃんとインストールされている。

java version "1.7.0_65"
OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

Task Runner アプリケーションのダウンロード

Task Runner アプリケーションは jar 形式で配布されており任意のディレクトリにダウンロードしておく。

mkdir /opt/datapipeline
cd /opt/datapipeline
wget https://s3.amazonaws.com/datapipeline-us-east-1/software/latest/TaskRunner/TaskRunner-1.0.jar

設定

設定も難しくなく -config で指定する credentials.json を作成するくらい。

credentials.json
{
  "access-id":"AKxxxxxxxxxxxxxxxxxx",
  "private-key":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "endpoint":"https://datapipeline.us-east-1.amazonaws.com",
  "region":"us-east-1",
  "log-uri":"s3://datapipeline-log"
}

credentials.json の詳細ついてはこちらを確認する。

起動

以下のように Task Runner を起動する。

cd /opt/datapipeline
java -jar TaskRunner-1.0.jar --config ./credentials.json --workerGroup=wg-20140719 --region=us-east-1 --logUri=s3://datapipeline-log &

起動オプションとしては…

  • –config で credentials.json のパスを指定
  • –workerGroup= で Pipeline の Worker Group で指定した ID を指定
  • –region= リージョンを指定
  • –logUri= ログを保存する S3 バケットを指定

タスクの実行

はたして結果は…

Task Runner を起動すると指定した通り EC2 上の /tmp 以下に test ディレクトリとその配下に td-agent.log がコピーされた。

/tmp/test/
└── td-agent.log

0 directories, 1 file

動作ログ

成功した際には Data Pipeline のダッシュボードで以下のようなログを確認出来る。

02

尚、失敗時には以下のようなログを確認出来る。

03

また、詳細なログを見たい場合には起動時に –logUri= で指定した S3 のバケットに…

04

また、TaskRunner.jar と同じディレクトリに output というディレクトリが作成され、以下のようにログが出力されるので合わせて確認すると良いかも。

output
├── logs
│   ├── TaskRunner.2014-07-19-14
│   ├── TaskRunner.2014-07-19-15
│   ├── TaskRunner.2014-07-19-16
│   ├── logging.config
│   └── logging.state
├── staging
└── tmp

3 directories, 5 files

最後に

TaskRunner を使えば簡単に S3 等の AWS 上のサービスと連携させるような EC2 やオンプレサーバー上のタスクを作成、管理することが出来そう。但し、cron っぽく使うことは可能だが 15 分間隔であることには注意したい。

ということで、次回はもう少し複雑なタスク(より実際のバックアップ運用的な内容)で試していきたいなと思っている。

元記事は、こちら