Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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の時間は長めにしておいた方がよいです。

lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away