【AWS】AWS Data PipelineのstartDateTimeの指定で盛大にハマった話
こんにちは。
今日は、AWS Data Pipelineを使っていてstartDateTimeの指定で盛大にハマったので、その話を書きます。
そもそもAWS Data Pipelineって何?
って方は、以下の記事をどうぞ。まぁ、この記事読んでいる人はこれについては知っているだろうけど。
今日話すこと以外にもハマりポイントは数知れずなので、それも供養。
前提
現在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いつを見て、デプロイしないといけない
- 実際に、リリース作業をした次の日の実行時刻を試しにテストしてみたら、できた
これは完全に罠だったので、誰かの役に立たないかもだけど、書いておきます。
それでは。