St_Hakky’s blog

Data Science / Human Resources / Web Applicationについて書きます

【AWS】AWS Data PipelineのstartDateTimeの指定で盛大にハマった話

こんにちは。

今日は、AWS Data Pipelineを使っていてstartDateTimeの指定で盛大にハマったので、その話を書きます。

そもそもAWS Data Pipelineって何?

って方は、以下の記事をどうぞ。まぁ、この記事読んでいる人はこれについては知っているだろうけど。

www.st-hakky-blog.com

今日話すこと以外にもハマりポイントは数知れずなので、それも供養。

www.st-hakky-blog.com

前提

現在dev環境とprod環境の二つを用意していて、そこで同じパイプラインの内容を動かしているのですが、devでテストをしてprodにリリースをしました。

devでリリースした日とprodでリリースした日は違いますが、pipelineの定義などは全部一緒です。

このリリースした日が違うというのがポイントです。

ハマったこと

prodにリリースをして、数日がたったある日「くっ、なんかデータ起因のエラーが出ている」ということでそこを直す対処をしました。

で、これをdevでテストして、さぁprodでリリースするぞということで、cli経由(正確にはCIでリリース)でprodにリリースしました。

そしたら、次のようなエラーが出たわけです。

{
    "validationErrors": [
        {
            "errors": [
                "startDateTime can not be changed"
            ], 
            "id": "DefaultSchedule"
        }
    ], 
    "errored": true
}


「ん?startDateTimeなんか俺変えてないんだけど」

ってなったんですよ。ちなみに、該当となるjsonは以下。

{
  "period": "1 days",
  "startDateTime": "2020-10-20T21:30:00",
  "name": "Every 1 day",
  "id": "DefaultSchedule",
  "type": "Schedule"
}

で、「んー?」みたいな感じで悩んでいたんですけど、何回コンソール、コードのdiffを見ても同じ時間なんですよ。同じコードになっているdevでリリースしてもエラーは出ない。

で、一個思いついたのが、devでリリースリリースした日とprodでリリースした日が違うなぁっていうのがあったんですね。

まさかなって思って、prodでリリースして最初に実行した時間をpipelineに指定してやってみたら、今度はうまくいきました。

ということで知見

以下、供養する知見です。

  • aws data pipelineでは、どうやら最初にaws datapipelineの中身をリリースしたときに、過去の日付を最初の実行開始日時と指定した場合、なんか内部的には最初にスケジュールを実行した日時になるらしい
  • なので、aws data pipeline上で、パイプラインを定義しているjsonが、「yyyymmddのhh時mm分に実行しますよ」って書かれていて、そうやってAWS Data pipelineのexport pipeline definitionやコンソール上の値が言っていても、最初の実行時刻isいつを見て、デプロイしないといけない
  • 実際に、リリース作業をした次の日の実行時刻を試しにテストしてみたら、できた

これは完全に罠だったので、誰かの役に立たないかもだけど、書いておきます。

それでは。