LoginSignup
4
5

More than 5 years have passed since last update.

DataPipelineの前提条件機能使ってみた

Posted at

DataPipelineには、定義したActivity実行するかどうかを判断する前提条件機能(Precinditons)があるのですが、あまりそこに関するドキュメントが多くない気がしたので、ちょっと書いてみます。
前提条件機能についてはこちら

今回利用したのが、S3KeyExistsとShellCommandPreconditionの2つになるので、そちらのご紹介です。

S3KeyExists

該当のファイルがs3に存在するかチェックします。

動作としては、指定のs3キーが作成されるまでチェックを行い続け、作成が確認できたらActivityを実行するという挙動になります。

設定の画面はこんな感じです。

datapipeline_s3.png
S3KeyにチェックしたいS3のキー名を記述します。
毎日実行したいバッチだったりすると、S3のファイル名にも日時が入ってきそうです。
例えば、前日の日付がついたファイルの存在確認は下記のように記述します。

s3://bucket-name/dir-name/file_#{format(yesterday(inTimeZone(@scheduledStartTime,'Asia/Tokyo')),'YYYYMMdd')}.txt

他に指定しているRetry Delayは再実行の間隔、Maximum Retriesは再実行回数ということですが、正直Retry Delayの動作はよくわからんです。この値の間隔でチェックしてるというわけでもなさそう。

ShellCommandPrecondition

指定のシェルスクリプトを実行し、そのスクリプトの終了コードによって、前提条件を満たしたかどうかを判定します。

S3KeyExistsと違い、前提条件を実行する段階でResource(EC2)が作成されるので、その点はご注意ください。

設定の画面は下記。

datapipeline_shell.png
Commandに実行したいスクリプトを記載します。
StdoutやStderrには、ログファイルの指定を行います。下記のように書くと、/パイプラインID/前提条件ID/ という形でディレクトリ切ってくれるのでいいと思います。

s3://bucket-name/#{@pipelineId}/#{@id}/stdout.log

ShellCommandPreconditionの注意点としては、Resourceに指定しているEC2の終了時間設定(Terminate After)の時間を、前提条件判定で待機してる間に過ぎてしまうと、EC2が落ちて処理が失敗してしまうので、Terminate Afterの時間は長めにしておいた方がよいです。

4
5
0

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
4
5