ããŒã¿ãã€ãã©ã€ã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®å æ¬çãªã¬ã€ããã³ã¢ã³ã³ã»ãããåŠã³ãAirflowãPrefectãªã©ã®äž»èŠããŒã«ãæ¯èŒããå ç¢ã§ã¹ã±ãŒã©ãã«ãªèªååãããããŒã¿ã¯ãŒã¯ãããŒãæ§ç¯ããããã®ãã¹ããã©ã¯ãã£ã¹ãå®è£ ããŸãã
ããŒã¿èªååïŒçŸä»£ã®ã°ããŒãã«äŒæ¥ã®ããã®ãã€ãã©ã€ã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®ç¿åŸ
仿¥ã®ã°ããŒãã«çµæžã«ãããŠãããŒã¿ã¯åãªãæ å ±ä»¥äžã®ãã®ã§ããçµç¹ã®çåœç·ã§ããã·ã³ã¬ããŒã«ã®ã¹ã¿ãŒãã¢ããããããã¥ãŒãªããã«æ¬ç€Ÿã眮ãå€åœç±äŒæ¥ãŸã§ãããŒã¿ãå¹ççã«åéãåŠçãåæããèœåããåžå Žã®ãªãŒããŒãšãã®ä»ãåºå¥ããŸããããããããŒã¿ã®éãé床ã倿§æ§ãççºçã«å¢å ããã«ã€ããŠãçã®ããŒã¿ãå®çšçãªæŽå¯ã«å€ããããã«å¿ èŠãªè€éãªããã»ã¹ã管çããããšã¯ãéåžžã«å°é£ãªèª²é¡ãšãªã£ãŠããŸããããã§ãããŒã¿èªååãç¹ã«ãã€ãã©ã€ã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãéããŠãåãªãæè¡çãªå©ç¹ã§ã¯ãªããæŠç¥çãªå¿ èŠæ§ãšãªãã®ã§ãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãããŒã¿ãã€ãã©ã€ã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®äžçãããã²ãŒãããŸããã³ã¢ã³ã³ã»ãããè§£æããäž»èŠãªããŒã«ãæ¢æ±ããçµç¹ã®ããŒã¿æŠç¥ã匷åã§ããå ç¢ã§ã¹ã±ãŒã©ãã«ã§å埩åã®ããããŒã¿ã¯ãŒã¯ãããŒãèšèšããã³å®è£ ããããã®ãã¬ãŒã ã¯ãŒã¯ãæäŸããŸããäžçã®ã©ãã«ããŠãã
ããªããïŒåçŽãªã¹ã±ãžã¥ãŒãªã³ã°ãè¶ ããŠçã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãž
å€ãã®ããŒã¿ãžã£ãŒããŒã¯ãåçŽãªã¹ã±ãžã¥ãŒã«ãããã¹ã¯ãªããããå§ãŸããŸããäžè¬çãªã¢ãããŒãã¯ãcronãžã§ãïŒUnixç³»ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ãããæéããŒã¹ã®ãžã§ãã¹ã±ãžã¥ãŒã©ïŒã䜿çšããŠãæ¯æ©ããŒã¿æœåºã¹ã¯ãªãããå®è¡ããããšã§ããããã¯ãåäžã®å€ç«ããã¿ã¹ã¯ã«å¯ŸããŠã¯å®å šã«æ©èœããŸããããããããžãã¹ãããå€ãã®ãã®ãå¿ èŠãšããå Žåã¯ã©ããªãã§ããããã
å žåçãªããžãã¹ã€ã³ããªãžã§ã³ã¹ã®ã·ããªãªãæ³åããŠã¿ãŠãã ããïŒ
- Salesforce APIãã販売ããŒã¿ãæœåºããŸãã
- Google Adsã¢ã«ãŠã³ãããããŒã±ãã£ã³ã°ãã£ã³ããŒã³ããŒã¿ãæœåºããŸãã
- äž¡æ¹ã®ããŒã¿ã»ãããSnowflakeãBigQueryãªã©ã®ã¯ã©ãŠãããŒã¿ãŠã§ã¢ããŠã¹ã«ããŒãããŸãã
- äž¡æ¹ã®ããŒããæ£åžžã«å®äºãããŸã§åŸ ã¡ãŸãã
- 販売ããŒã¿ãšããŒã±ãã£ã³ã°ããŒã¿ãçµåããŠããŒã±ãã£ã³ã°ROIãèšç®ãã倿ãžã§ããå®è¡ããŸãã
- 倿ãæåããå ŽåãTableauãPower BIãªã©ã®ããŒã«ã§BIããã·ã¥ããŒããæŽæ°ããŸãã
- ããããã®ã¹ãããã倱æããå ŽåãSlackãŸãã¯é»åã¡ãŒã«ã§ããŒã¿ããŒã ã«éç¥ããŸãã
cronãžã§ãã§ãã®ã·ãŒã±ã³ã¹ã管çããããšãããšãããã«æªå€¢ã«ãªããŸããããã¯ãå€ãã®å Žåããcron-fettiããšåŒã°ããŸããã€ãŸããã¹ã±ãžã¥ãŒã«ãããã¿ã¹ã¯ã®ä¹±éã§ç®¡çäžèœãªççºã§ãã課é¡ã¯æ°å€ããããŸãïŒ
- äŸåé¢ä¿ç®¡çïŒå€æãžã§ãïŒã¹ããã5ïŒããäž¡æ¹ã®æœåºãžã§ãïŒã¹ããã1ãš2ïŒãæ£åžžã«å®äºããåŸã«ã®ã¿å®è¡ãããããã«ããã«ã¯ã©ãããã°ããã§ããïŒè€éãªããžãã¯ã§ã¹ã¯ãªããããã§ãŒã³ããããšã¯ãããããŠä¿å®ãå°é£ã§ãã
- ãšã©ãŒåŠçãšå詊è¡ïŒSalesforce APIãäžæçã«å©çšã§ããªãå Žåã¯ã©ããªããŸããïŒã¹ã¯ãªããã¯å€±æããŸããå ç¢ãªã·ã¹ãã ã¯ãæçµçãªå€±æã宣èšããŠããŒã ã«èŠåããåã«ãã¿ã¹ã¯ãæ°åèªåçã«å詊è¡ããå¿ èŠããããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒããã«50åã®ããŒã¿ãœãŒã¹ã远å ããå¿ èŠãããå Žåã¯ã©ããªããŸããïŒãããã®çžäºæ¥ç¶ãããã¹ã¯ãªããã®ç®¡çã®è€éãã¯ãææ°é¢æ°çã«å¢å€§ããŸãã
- å¯èŠ³æž¬æ§ïŒå®è¡äžã®ãã¹ãŠã®ãžã§ãã®äžå çãªãã¥ãŒãã©ã®ããã«ååŸããŸããïŒã©ããæåããŸãããïŒã©ãã倱æããŸãããïŒåã¹ãããã«ã¯ã©ããããã®æéãããããŸãããïŒåã ã®ã¹ã¯ãªããã§ã¯ãç²ç®çã«é£è¡ããŠããŸãã
ããã§ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãç»å ŽããŸãããªãŒã±ã¹ãã©ã®ææ®è ãèããŠã¿ãŠãã ãããåãã¥ãŒãžã·ã£ã³ïŒããŒã¿ã¿ã¹ã¯ïŒã¯æ¥œåšãæŒå¥ã§ããŸãããææ®è ïŒãªãŒã±ã¹ãã¬ãŒã¿ãŒïŒãããªããã°ãã·ã³ãã©ããŒãçã¿åºãããšã¯ã§ããŸãããææ®è ã¯ãã³ããèšå®ããããŸããŸãªã»ã¯ã·ã§ã³ã«ãã¥ãŒãåºãããã¹ãŠã®ããŒãã調åããŠæ©èœããããã«ããŸããããŒã¿ãªãŒã±ã¹ãã¬ãŒã¿ãŒã¯ãããŒã¿ãã€ãã©ã€ã³ã«å¯ŸããŠåãããšãè¡ããäŸåé¢ä¿ã管çããé害ãåŠçããã¯ãŒã¯ãããŒå šäœã®çµ±äžããããã¥ãŒãæäŸããŸãã
ãã€ãã©ã€ã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®ã³ã¢ã³ã³ã»ãã
ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãç¿åŸããã«ã¯ããã®åºç€ãšãªãæ§æèŠçŽ ãçè§£ããããšãäžå¯æ¬ ã§ãããããã®ã³ã³ã»ããã¯ãéžæããç¹å®ã®ããŒã«ã«é¢ä¿ãªãæ®éçã§ãã
DAGïŒæåéå·¡åã°ã©ã
ã»ãšãã©ãã¹ãŠã®ææ°ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã®äžå¿ã¯ãæåéå·¡åã°ã©ãïŒDAGïŒã§ããè€éã«èãããŸãããã³ã³ã»ããã¯åçŽã§ãïŒ
- ã°ã©ãïŒããŒãïŒã¿ã¹ã¯ïŒãšãšããžïŒäŸåé¢ä¿ïŒã®éåã
- æåïŒäŸåé¢ä¿ã«ã¯æ¹åããããŸããã¿ã¹ã¯Aã¯ãã¿ã¹ã¯Bãéå§ããåã«å®äºããå¿ èŠããããŸããé¢ä¿ã¯äžæ¹åã«æµããŸãã
- éå·¡åïŒã°ã©ãã«ã«ãŒããå«ããããšã¯ã§ããŸãããã¿ã¹ã¯Aãã¿ã¹ã¯Bã«äŸåããå Žåãã¿ã¹ã¯Bã¯ã¿ã¹ã¯Aã«äŸåããããšã¯ã§ããŸãããããã«ãããã¯ãŒã¯ãããŒã«æç¢ºãªéå§ãšçµäºããããåã®äžã§æ°žä¹ ã«å®è¡ãããªãããšãä¿èšŒãããŸãã
DAGã¯ãè€éãªã¯ãŒã¯ãããŒãèŠèŠçããã³ããã°ã©ã çã«è¡šçŸããã®ã«æé©ãªæ¹æ³ã§ããæäœã®é åºãšãã©ã®ã¿ã¹ã¯ã䞊è¡ããŠå®è¡ã§ããããæç¢ºã«å®çŸ©ããŸãã
ã¿ã¹ã¯ãšãªãã¬ãŒã¿ãŒ
ã¿ã¹ã¯ã¯ããã€ãã©ã€ã³å ã®åäžã®äœæ¥åäœã§ãããæå°ã®ååã¹ãããã§ããäŸãšããŠã¯ãAPIããã®ããŒã¿ã®æœåºãSQLã¯ãšãªã®å®è¡ãé»åã¡ãŒã«ã®éä¿¡ãªã©ããããŸããå€ãã®ããŒã«ã§ã¯ãã¿ã¹ã¯ã¯ãªãã¬ãŒã¿ãŒã䜿çšããŠäœæãããŸãããªãã¬ãŒã¿ãŒã¯ãäžè¬çãªã¢ã¯ã·ã§ã³çšã®äºåæ§ç¯ããããã³ãã¬ãŒãã§ããããšãã°ãPostgreSQLããŒã¿ããŒã¹ã«æ¥ç¶ããããã®Pythonã³ãŒããæ¯åèšè¿°ãã代ããã«ã`PostgresOperator`ã䜿çšããŠãSQLã¯ãšãªãæå®ããã ãã§ãã
ã¯ãŒã¯ãããŒ
ã¯ãŒã¯ãããŒïŒãŸãã¯ãã€ãã©ã€ã³ïŒã¯ããã倧ããªããžãã¹ç®æšãéæããã¿ã¹ã¯ã®å®å šãªã»ããã§ãããDAGãšããŠå®çŸ©ãããŸããåã®ROIèšç®ã®äŸã¯ãè€æ°ã®ã¿ã¹ã¯ã§æ§æãããåäžã®ã¯ãŒã¯ãããŒã§ãã
äŸåé¢ä¿
äŸåé¢ä¿ã¯ãã¿ã¹ã¯éã®é¢ä¿ãå®çŸ©ããŸããå¥ã®ã¿ã¹ã¯ã®åŸã«å®è¡ããå¿ èŠãããã¿ã¹ã¯ã¯ãããŠã³ã¹ããªãŒã ã¿ã¹ã¯ãšåŒã°ããŸããäŸåããã¿ã¹ã¯ã¯ãã¢ããã¹ããªãŒã ã¿ã¹ã¯ã§ããææ°ã®ãªãŒã±ã¹ãã¬ãŒã¿ãŒã䜿çšãããšãããã¹ãŠã®ã¢ããã¹ããªãŒã ã¿ã¹ã¯ãæåããå Žåã«ã®ã¿ãã®ã¿ã¹ã¯ãå®è¡ããããŸãã¯ãã¢ããã¹ããªãŒã ã¿ã¹ã¯ã倱æããå Žåã«ã®ã¿ãã®ã¯ãªãŒã³ã¢ããã¿ã¹ã¯ãå®è¡ããããªã©ãè€éãªäŸåé¢ä¿ã«ãŒã«ãå®çŸ©ã§ããŸãã
åªçæ§ïŒä¿¡é Œæ§ã®éµ
åªçæ§ã¯ãéèŠã§ãããªããèŠèœãšãããã¡ãªååã§ããåªçãªã¿ã¹ã¯ãšã¯ãåãå ¥åã§è€æ°åå®è¡ã§ããæå³ããªãå¯äœçšãåŒãèµ·ããããšãªããåžžã«åãåºåãçæããã¿ã¹ã¯ã§ããããšãã°ãåå®è¡ããŠããŒãã«ã«éè€ããè¡ãæ¿å ¥ããã¿ã¹ã¯ã¯ãåªçã§ã¯ãããŸããã`INSERT OVERWRITE`ãŸãã¯`MERGE`ã¹ããŒãã¡ã³ãã䜿çšããŠãå®è¡åæ°ã«é¢ä¿ãªãæçµçãªç¶æ ãåãã«ãªãããã«ããã¿ã¹ã¯ã¯ãåªçã§ããåªçãªã¿ã¹ã¯ãèšèšããããšã¯ãä¿¡é Œæ§ã®é«ããã€ãã©ã€ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããããã«ãããããŒã¿ãç Žæãããããšãªãã倱æããã¿ã¹ã¯ãå®å šã«åå®è¡ã§ããŸãã
ããã¯ãã£ã«ãšåå®è¡
ããžãã¹ããŒãºã¯å€åããŸãã3ãæåã®å€æããžãã¯ã«ãã°ãçºèŠããå Žåã¯ã©ããªããŸããïŒããŒã¿ãä¿®æ£ããããã«ãå±¥æŽæéã®ãã€ãã©ã€ã³ãããã¯ãã£ã«ãã€ãŸãåå®è¡ããæ©èœãå¿ èŠã§ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã¯ããããã®ããã¯ãã£ã«ãäœç³»çã«ããªã¬ãŒããã³ç®¡çããã¡ã«ããºã ãæäŸããŸããããã¯ãåçŽãªcronãžã§ãã§ã¯éåžžã«èŠçãªããã»ã¹ã§ãã
ææ°ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã®äž»ãªæ©èœ
ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãã©ãããã©ãŒã ãè©äŸ¡ããå Žåãããã€ãã®äž»èŠãªæ©èœã«ãã£ãŠãåºæ¬çãªã¹ã±ãžã¥ãŒã©ãšåŒ·åãªãšã³ã¿ãŒãã©ã€ãºå¯Ÿå¿ã·ã¹ãã ãåºå¥ãããŸãã
ã¹ã±ãŒã©ããªãã£ãšäžŠååŠç
ææ°ã®ãªãŒã±ã¹ãã¬ãŒã¿ãŒã¯ãããŒã¿ãšè€éããå¢ãã«ã€ããŠãã¹ã±ãŒã«ã§ããå¿ èŠããããŸããããã«ã¯ãã¯ãŒã«ãŒã®ã¯ã©ã¹ã¿ãŒå šäœã§è€æ°ã®ã¿ã¹ã¯ã䞊è¡ããŠå®è¡ããããšãå«ãŸããŸããåªå 床ã®é«ããã€ãã©ã€ã³ããéèŠåºŠã®äœããžã§ãã«ãã£ãŠãããã¯ãããããšãªããå¿ èŠãªåŠçèœåã確å®ã«åŸãããã«ããªãœãŒã¹ãã€ã³ããªãžã§ã³ãã«ç®¡çããå¿ èŠããããŸãã
å¯èŠ³æž¬æ§ãšã¢ãã¿ãªã³ã°
èŠããªããã®ã¯ç®¡çã§ããŸãããäžå¯æ¬ ãªå¯èŠ³æž¬æ§æ©èœã«ã¯ã次ã®ãã®ããããŸãã
- äžå åããããã®ã³ã°ïŒ1ãæã§ãã¹ãŠã®ã¿ã¹ã¯å®è¡ããã®ãã°ã«ã¢ã¯ã»ã¹ããŸãã
- ã¡ããªã¯ã¹ïŒã¿ã¹ã¯ã®å®è¡æéãæå/倱æçããªãœãŒã¹äœ¿çšçãªã©ã®äž»èŠãªããã©ãŒãã³ã¹ææšã远跡ããŸãã
- ã¢ã©ãŒãïŒãã€ãã©ã€ã³ã倱æããããäºæ³ä»¥äžã«é·ãå®è¡ãããå Žåã«ãé»åã¡ãŒã«ãSlackãPagerDutyããŸãã¯ãã®ä»ã®ãã£ãã«ãä»ããŠããŒã ã«ããã¢ã¯ãã£ãã«éç¥ããŸãã
- èŠèŠåã®ããã®UIïŒDAGæ§é ã衚瀺ããã¯ãŒã¯ãããŒã®å®è¡ã¹ããŒã¿ã¹ããªã¢ã«ã¿ã€ã ã§ç£èŠãããã°ãæ€æ»ããããã®ã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã
åçãªãã€ãã©ã€ã³çæ
å€ãã®å€§èŠæš¡ãªçµç¹ã§ã¯ããã€ãã©ã€ã³ã¯åæ§ã®ãã¿ãŒã³ã«åŸããŸããåæ§ã®DAGãæ°çŸåæåã§äœæãã代ããã«ãææ°ã®ããŒã«ã䜿çšãããšãããããåçã«çæã§ããŸããæ§æãã¡ã€ã«ïŒYAMLãŸãã¯JSONãã¡ã€ã«ãªã©ïŒãèªã¿åããåãšã³ããªã®æ°ãããã€ãã©ã€ã³ãèªåçã«äœæããã³ãŒããèšè¿°ã§ãããããå®åã³ãŒããå€§å¹ ã«åæžãããä¿å®æ§ãåäžããŸãã
æ¡åŒµæ§ãšçµ±å
ããŒã¿ãšã³ã·ã¹ãã ã¯å€æ§ã§ããåªãããªãŒã±ã¹ãã¬ãŒã¿ãŒã¯ããã¹ãŠãèªåã§è¡ãããšã¯ããŸãããä»ã®ã·ã¹ãã ãžã®æ¥ç¶ã«åªããŠããŸããããã¯ãããŒã¿ããŒã¹ïŒPostgreSQLãMySQLïŒãããŒã¿ãŠã§ã¢ããŠã¹ïŒSnowflakeãBigQueryãRedshiftïŒãã¯ã©ãŠããµãŒãã¹ïŒAWS S3ãGoogle Cloud StorageïŒãããŒã¿åŠçãã¬ãŒã ã¯ãŒã¯ïŒSparkãdbtïŒãªã©ãšç°¡åã«ããåãã§ãããããã€ããŒãŸãã¯çµ±åã®è±å¯ãªã©ã€ãã©ãªãéããŠå®çŸãããŸãã
ã»ãã¥ãªãã£ãšã¢ã¯ã»ã¹å¶åŸ¡
ããŒã¿ãã€ãã©ã€ã³ã¯ãå€ãã®å Žåãæ©å¯æ å ±ãåŠçããŸãããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ã»ãã¥ãªãã£ã¯ã亀æžã®äœå°ããããŸãããããã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
- ã·ãŒã¯ã¬ãã管çïŒè³æ Œæ å ±ãAPIããŒããã®ä»ã®ã·ãŒã¯ã¬ããããã€ãã©ã€ã³ã³ãŒãã«ããŒãã³ãŒãã£ã³ã°ããã®ã§ã¯ãªããå®å šã«ä¿åããŸããAWS Secrets ManagerãGoogle Secret ManagerãHashiCorp Vaultãªã©ã®ãµãŒãã¹ãšã®çµ±åã¯ãäž»èŠãªæ©èœã§ãã
- ããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ïŒRBACïŒïŒããŸããŸãªãŠãŒã¶ãŒãšããŒã ã«è©³çŽ°ãªæš©éãå®çŸ©ãããŠãŒã¶ãŒãã¢ã¯ã»ã¹ãèš±å¯ãããŠãããã€ãã©ã€ã³ã®ã¿ã衚瀺ãããªã¬ãŒããŸãã¯ç·šéã§ããããã«ããŸãã
é©åãªãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã®éžæïŒã°ããŒãã«ãªèŠç¹
ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã®åžå Žã¯æŽ»æ³ãåããŠãããããã€ãã®åªãããªãã·ã§ã³ããããŸãããæé©ãªãããŒã«ã¯ãããŒã ã®ã¹ãã«ãã€ã³ãã©ã¹ãã©ã¯ãã£ãèŠæš¡ãããã³ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«ãã£ãŠå®å šã«ç°ãªããŸããäž»èŠãªåè£ã®å èš³ãšãæææ±ºå®ãè¡ãããã®ãã¬ãŒã ã¯ãŒã¯ã次ã«ç€ºããŸãã
ã»ã«ããã¹ãåãšãããŒãžããµãŒãã¹
äž»ãªæ±ºå®ãã€ã³ãã¯ããªãŒã±ã¹ãã¬ãŒã¿ãŒãèªåã§ãã¹ãããããã¯ã©ãŠããããã€ããŒãããããŒãžããµãŒãã¹ã䜿çšãããã§ãã
- ã»ã«ããã¹ãåïŒäŸïŒç¬èªã®ãµãŒããŒäžã®ãªãŒãã³ãœãŒã¹Apache AirflowïŒïŒæå€§éã®æè»æ§ãšå¶åŸ¡ãæäŸããŸãããéçšäžã®ãªãŒããŒããããå€§å¹ ã«å¿ èŠã§ããããŒã ã¯ãã»ããã¢ãããã¡ã³ããã³ã¹ãã¹ã±ãŒãªã³ã°ãããã³ã»ãã¥ãªãã£ãæ åœããŸãã
- ãããŒãžããµãŒãã¹ïŒäŸïŒAmazon MWAAãGoogle Cloud ComposerãAstronomerïŒïŒã€ã³ãã©ã¹ãã©ã¯ãã£ã®ç®¡çãæœè±¡åããŸãããã¬ãã¢ã æéãæ¯æããŸãããããŒã ã¯ãµãŒããŒã®ç®¡çã§ã¯ãªãããã€ãã©ã€ã³ã®äœæã«éäžã§ããŸããããã¯ãè¿ éã«è¡åãããããŒã ããå°ä»»ã®DevOpsãªãœãŒã¹ããªãããŒã ã«ãšã£ãŠãå€ãã®å Žåãæšå¥šãããéžæè¢ã§ãã
åžå Žã®äž»èŠãã¬ãŒã€ãŒ
1. Apache Airflow
æ¥çæšæºïŒAirflowã¯ãããŒã¿ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®ãªãŒãã³ãœãŒã¹ã¿ã€ã¿ã³ã§ããå€§èŠæš¡ãªã³ãã¥ããã£ããããã€ããŒã®åºå€§ãªã©ã€ãã©ãªããããäžçäžã®æ°åã®äŒæ¥ã§å®èšŒãããŠããŸãããã®äžæ žãšãªãå²åŠã¯ãPythonã§å®çŸ©ãããDAGã«ãããã³ãŒããšããŠã®ãã€ãã©ã€ã³ãã§ãã
æé©ãªçšéïŒæçãããé«åºŠã«æ¡åŒµå¯èœã§ã«ã¹ã¿ãã€ãºå¯èœãªãœãªã¥ãŒã·ã§ã³ãå¿
èŠã§ãããæ¥ãªåŠç¿æ²ç·ãšéçšäžã®è€éãã«æ
£ããŠããããŒã ã
2. Prefect
ææ°ã®ææŠè
ïŒPrefectã¯ãAirflowã®èªèãããŠããæ¬ ç¹ã®äžéšã«å¯ŸåŠããããã«èšèšãããŸãããããã¢ãã³ãªPythonic APIãåçãªã¯ãŒã¯ãããŒã®ãã¡ãŒã¹ãã¯ã©ã¹ã®ãµããŒããããã³ã¯ãŒã¯ãããŒã®å®çŸ©ãšãã®å®è¡ç°å¢éã®ããæç¢ºãªåé¢ãæäŸããŸããéçºè
ã«åªãããšã¯ã¹ããªãšã³ã¹ã§é«ãè©äŸ¡ãããããšããããããŸãã
æé©ãªçšéïŒéçºè
ã®çç£æ§ãåªå
ããåçã§ãã©ã¡ãŒã¿ãŒåããããã€ãã©ã€ã³ãå¿
èŠã§ãã¢ãã³ã§ã¯ãªãŒã³ãªãã¶ã€ã³ãé«ãè©äŸ¡ããããŒã ãããŒã¿ãµã€ãšã³ã¹ããã³MLããŒã ã¯ãPrefectã«æ¹ãããããšããããããŸãã
3. Dagster
ããŒã¿èªèãªãŒã±ã¹ãã¬ãŒã¿ãŒïŒDagsterã¯ããããŒã¿èªèãã§ããããšã«ãã£ãŠãå¥ã®ã¢ãããŒãããšããŸããã¿ã¹ã¯ã®å®è¡ã ãã§ãªããã¿ã¹ã¯ãçæããããŒã¿è³ç£ã«ãçŠç¹ãåœãŠãŠããŸããããŒã¿å質ãã«ã¿ãã°åãããã³ãªããŒãžã®ããã®åŒ·åãªæ©èœãã³ã¢ã«çµã¿èŸŒãŸããŠãããããå
šäœçã§ä¿¡é Œæ§ã®é«ãããŒã¿ãã©ãããã©ãŒã ãæ§ç¯ãããçµç¹ã«ãšã£ãŠåŒ·åãªããŒã«ãšãªã£ãŠããŸãã
æé©ãªçšéïŒãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãããŒã¿ã¬ããã³ã¹ããã¹ããããã³å¯èŠ³æž¬æ§ãšå¯æ¥ã«çµ±åãããçµç¹ãè€éã§ããã·ã§ã³ã¯ãªãã£ã«ã«ãªããŒã¿ãã©ãããã©ãŒã ã®æ§ç¯ã«æé©ã§ãã
4. ã¯ã©ãŠããã€ãã£ããœãªã¥ãŒã·ã§ã³
äž»èŠãªã¯ã©ãŠããããã€ããŒã¯ãç¬èªã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãµãŒãã¹ãæäŸããŠããŸãïŒ
- AWS Step FunctionsïŒAWSãµãŒãã¹ã®èª¿æŽã«åªãããµãŒããŒã¬ã¹ãªãŒã±ã¹ãã¬ãŒã¿ãŒãJSONããŒã¹ã®ç¶æ ãã·ã³å®çŸ©ã䜿çšããã€ãã³ãããªãã³åã®ãµãŒããŒã¬ã¹ã¢ãŒããã¯ãã£ã«æé©ã§ãã
- Azure Data FactoryïŒMicrosoft Azureã®ããžã¥ã¢ã«ãªããŒã³ãŒã/ããŒã³ãŒãã®ETLããã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãµãŒãã¹ããã€ãã©ã€ã³ã®æ§ç¯ã«ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã奜ããŠãŒã¶ãŒã«ãšã£ãŠåŒ·åã§ãã
- Google Cloud WorkflowsïŒAWS Step Functionsãšåæ§ã®ãµãŒããŒã¬ã¹ãªãŒã±ã¹ãã¬ãŒã¿ãŒã§ãGoogle Cloudãšã³ã·ã¹ãã å ã®ãµãŒãã¹ã®èª¿æŽçšã«èšèšãããŠããŸãã
æé©ãªçšéïŒåäžã®ã¯ã©ãŠããšã³ã·ã¹ãã ã«æ·±ãæè³ããŠãããäž»ã«ãã®ãããã€ããŒã®å£ã«å²ãŸããåºå ã§ãµãŒãã¹ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããå¿ èŠãããããŒã ã
æææ±ºå®åºæºãã¬ãŒã ã¯ãŒã¯
éžæãå°ãããã«ããããã®è³ªåãããŠãã ããïŒ
- ããŒã ã¹ãã«ïŒããŒã ã¯Pythonã«åŒ·ãã§ããïŒïŒAirflowãPrefectãDagsterãæ¯æïŒãGUIã奜ã¿ãŸããïŒïŒAzure Data Factoryãæ¯æïŒã匷åãªDevOps/ãã©ãããã©ãŒã ãšã³ãžãã¢ãªã³ã°ã¹ãã«ããæã¡ã§ããïŒïŒã»ã«ããã¹ãã£ã³ã°ãå®çŸå¯èœã«ãªããŸãïŒã
- ãŠãŒã¹ã±ãŒã¹ã®è€éãïŒã¯ãŒã¯ãããŒã¯ã»ãšãã©éçãªETLã§ããïŒïŒAirflowã¯æé©ã§ãïŒãåçã§ãã©ã¡ãŒã¿ãŒé§ååã§ããïŒïŒPrefectãèŒããŸãïŒããªããŒãžãšå質ãã§ãã¯ãåããæ¬æ ŒçãªããŒã¿ãã©ãããã©ãŒã ãæ§ç¯ããŠããŸããïŒïŒDagsterã¯åŒ·åãªåè£ã§ãïŒã
- ãšã³ã·ã¹ãã ïŒã©ã®ã¯ã©ãŠããããã€ããŒã䜿çšããŠããŸããïŒAirflowã®ãããªããŒã«ã¯ãã«ãã¯ã©ãŠãã«ããããšãã§ããŸãããã¯ã©ãŠããã€ãã£ããœãªã¥ãŒã·ã§ã³ã¯ããç·å¯ãªçµ±åãæäŸããŸãã
- ã¹ã±ãŒã«ãšã³ã¹ãïŒãããŒãžããµãŒãã¹ã¯ç°¡åã§ãããã¹ã±ãŒã«ã¢ãããããšé«äŸ¡ã«ãªãå¯èœæ§ããããŸããã»ã«ããã¹ãã£ã³ã°ã¯éçšã³ã¹ããé«ããªããŸãããã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã¹ããäœããªãå¯èœæ§ããããŸããäºæ³ããã䜿çšéãã¢ãã«åããŸãã
- ã³ãã¥ããã£ãšãµããŒãïŒãã©ãã«ã·ã¥ãŒãã£ã³ã°ïŒAirflowã®åŒ·ã¿ïŒã®ããã®å€§èŠæš¡ã§ã¢ã¯ãã£ããªã³ãã¥ããã£ãšãææã®ãšã³ã¿ãŒãã©ã€ãºãµããŒãïŒãããŒãžããµãŒãã¹ããã³AstronomerãPrefectãElementlãªã©ã®äŒæ¥ãæäŸïŒã¯ãã©ã¡ããéèŠã§ããïŒ
å®éã®å®è£ ïŒãã€ã¬ãã«ãã«ãŒããªã³ã
ããŒã«ã«é¢ä¿ãªãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããããã€ãã©ã€ã³ãæ§ç¯ããããã»ã¹ã¯äžè²«ãããã¿ãŒã³ã«åŸããŸããã¹ããããã€ã¹ãããã®ãã«ãŒããªã³ããæ¬¡ã«ç€ºããŸãã
ã¹ããã1ïŒããžãã¹ç®æšãå®çŸ©ãã
ããªããããå§ããŸããçããããšããŠãã質åã¯äœã§ããïŒãŸãã¯ãèªååããããšããŠããããã»ã¹ã¯äœã§ããïŒäŸïŒã補åã®è²©å£²ã«é¢ããæ¥æ¬¡ã¬ããŒããããŠãŒã¶ãŒã®å°åããŒã¿ã§ãšã³ãªããããŠãåå9æïŒçŸå°æéïŒãŸã§ã«å¶æ¥ããŒã ã®ããã·ã¥ããŒãã«é ä¿¡ããå¿ èŠããããŸããã
ã¹ããã2ïŒããŒã¿ãããŒããããã³ã°ãã
ããŒã¿ã®æµãããã¯ã€ãããŒãã«æžãåºããŸãããã¹ãŠã®ãœãŒã¹ã·ã¹ãã ããã¹ãŠã®å€æã¹ããããããã³ãã¹ãŠã®æçµçãªå®å ïŒã·ã³ã¯ïŒãç¹å®ããŸãã
- ãœãŒã¹ïŒæ¬çªããŒã¿ããŒã¹ïŒPostgreSQLïŒãCRMïŒSalesforceïŒãåºåãã©ãããã©ãŒã ïŒGoogle AdsïŒã
- 倿ïŒããŒãã«ã®çµåãããŒã¿ã®éèšãç¹å®ã®å°åã®ãã£ã«ã¿ãªã³ã°ãããã¹ããã£ãŒã«ãã®ã¯ãªãŒã³ã¢ããã
- ã·ã³ã¯ïŒããŒã¿ãŠã§ã¢ããŠã¹ïŒSnowflakeïŒãBIããŒã«ïŒTableauïŒãã¯ã©ãŠãã¹ãã¬ãŒãžãã±ããå ã®CSVãã¡ã€ã«ïŒAWS S3ïŒã
ã¹ããã3ïŒååã¿ã¹ã¯ã«åå²ãã
ããŒã¿ãããŒããããå¯èœãªéãæå°ã®äœæ¥åäœã«åè§£ããŸããåãŠãããã¯1ã€ã®ããšãè¡ãããããããŸãè¡ãå¿ èŠããããŸããããã«ããããããã°ãšåå®è¡ãã¯ããã«ç°¡åã«ãªããŸãã
- `extract_sales_data`
- `load_sales_data_to_staging`
- `extract_user_data`
- `load_user_data_to_staging`
- `transform_and_join_staging_data`
- `load_final_report_to_warehouse`
- `refresh_tableau_dashboard`
- `send_success_notification`
ã¹ããã4ïŒäŸåé¢ä¿ãå®çŸ©ããïŒDAGãæ§ç¯ããïŒ
次ã«ãã¿ã¹ã¯ãæ¥ç¶ããŸããéžæããããŒã«ã®æ§æã䜿çšããŠãã¢ããã¹ããªãŒã ãšããŠã³ã¹ããªãŒã ã®é¢ä¿ãå®çŸ©ããŸããããšãã°ã`transform_and_join_staging_data`ã¯ã`load_sales_data_to_staging`ãš`load_user_data_to_staging`ã®äž¡æ¹ã®ããŠã³ã¹ããªãŒã ã§ããå¿ èŠããããŸãã
ã¹ããã5ïŒã¿ã¹ã¯ãã³ãŒãã£ã³ã°ãã
åã¿ã¹ã¯ã®äœæ¥ãå®è¡ããã³ãŒããèšè¿°ããŸããããã§ã¯ãPython颿°ãSQLã¹ã¯ãªããããŸãã¯APIåŒã³åºããèšè¿°ããŸããåªçæ§ãšã¢ãžã¥ãŒã«åãç®æããŸãã
ã¹ããã6ïŒã¯ãŒã¯ãããŒãæ§æããŠãããã€ãã
ã¯ãŒã¯ãããŒã®ã¡ã¿ããŒã¿ãå®çŸ©ããŸãïŒ
- ã¹ã±ãžã¥ãŒã«ïŒãã€å®è¡ããå¿ èŠããããŸããïŒïŒäŸïŒæ¯æ¥01:00 UTCïŒã
- å詊è¡ïŒå€±æããã¿ã¹ã¯ãäœåå詊è¡ããå¿ èŠããããŸããïŒãŸããã©ã®ãããã®é å»¶ã§å詊è¡ããå¿ èŠããããŸããïŒ
- ã¢ã©ãŒãïŒå€±æããå Žåã誰ã«éç¥ãããŸããïŒ
- ã¿ã€ã ã¢ãŠãïŒã¿ã¹ã¯ã倱æãããšèŠãªããããŸã§ã«ãã©ã®ãããã®æéå®è¡ã§ããŸããïŒ
次ã«ããã®å®çŸ©ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ç°å¢ã«ãããã€ããŸãã
ã¹ããã7ïŒç£èŠãå埩ãããã³æé©å
ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã¯ããèšå®ããŠå¿ãããã¢ã¯ãã£ããã£ã§ã¯ãããŸãããããŒã«ã®UIãšå¯èŠ³æž¬æ§æ©èœã䜿çšããŠããã€ãã©ã€ã³ã®ãã«ã¹ãç£èŠããŸããããžãã¹ããŒãºãé²åããããããŒã¿ãœãŒã¹ã倿ŽãããããããšãDAGãå埩åŠçããå¿ èŠããããŸããåžžã«ããã©ãŒãã³ã¹ã®ããã«ããã¯ãšæé©åã®æ©äŒãæ¢ããŸãã
å ç¢ãªãã€ãã©ã€ã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®ãã¹ããã©ã¯ãã£ã¹
ä¿¡é Œæ§ãé«ããä¿å®å¯èœãªãã€ãã©ã€ã³ãæ§ç¯ããã«ã¯ãèŠåŸãå¿ èŠã§ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãæ°ãåããªãã»ã©ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°æéãç¯çŽã§ããŸãã
ãã€ãã©ã€ã³ãã³ãŒããšããŠæ±ã
ãã€ãã©ã€ã³ã®å®çŸ©ã¯ãéèŠãªãœãããŠã§ã¢ã¢ãŒãã£ãã¡ã¯ãã§ããGitã®ãããªããŒãžã§ã³ç®¡çã·ã¹ãã ã«ä¿åããŸãããã«ãªã¯ãšã¹ããéããŠå€æŽã確èªããŸããããã«ãããå±¥æŽãã³ã©ãã¬ãŒã·ã§ã³ãããã³ããŒã«ããã¯ã¡ã«ããºã ãæäŸãããŸãã
ã¿ã¹ã¯ãåªçã«ãã
ããã¯ååã«åŒ·èª¿ã§ããŸãããåé¡ãçºçãããããšãªãåå®è¡ã§ããããã«ã¿ã¹ã¯ãèšèšããŸããããã«ãããé害å埩ãç°¡åãã€å®å šã«ãªããŸãã
å æ¬çãªãšã©ãŒåŠçãå®è£ ãã
ãã€ãã©ã€ã³ããµã€ã¬ã³ãã«å€±æãããªãã§ãã ãããé©åãªæ åœè ã«éä¿¡ããã詳现ãªã¢ã©ãŒããæ§æããŸããäžæãã¡ã€ã«ã®åé€ãªã©ãã¯ãªãŒã³ã¢ããã¢ã¯ã·ã§ã³ãå®è¡ã§ãã倱ææã®ã³ãŒã«ããã¯ãå®è£ ããŸãã
ãã€ãã©ã€ã³ããã©ã¡ãŒã¿ãŒåãã
æ¥ä»ããã¡ã€ã«ãã¹ããŸãã¯ãµãŒããŒåã®ãããªå€ãããŒãã³ãŒãã£ã³ã°ããªãã§ãã ããã倿°ãšãã©ã¡ãŒã¿ãŒã䜿çšããŸããããã«ããããã€ãã©ã€ã³ãæè»ã«ãªããåå©çšå¯èœã«ãªããŸããããšãã°ãåœã³ãŒãããã©ã¡ãŒã¿ãŒãšããŠæž¡ãããšã§ãåäžã®ãã€ãã©ã€ã³ãããŸããŸãªåœã§å®è¡ã§ããŸãã
ã·ãŒã¯ã¬ãããä¿è·ãã
ãªãŒã±ã¹ãã¬ãŒã¿ãŒãšçµ±åãããå°çšã®ã·ãŒã¯ã¬ããããã¯ãšã³ãã䜿çšããŸãããã¹ã¯ãŒããŸãã¯APIããŒãGitãªããžããªã«ã³ãããããªãã§ãã ããã
ã³ã¹ããšããã©ãŒãã³ã¹ãæé©åãã
ã¿ã¹ã¯ã®å®è¡æéãç£èŠããŸããæ°æéãããã¿ã¹ã¯ã¯ãæé©åãŸãã¯äžŠååã®åè£ã«ãªãå¯èœæ§ããããŸããã¯ã©ãŠãã§å®è¡ããŠããå Žåã¯ãã³ã¹ãã广çã«ç®¡çããããã«ãã¿ã¹ã¯ãæ¶è²»ãããªãœãŒã¹ã«æ³šæããŠãã ããã
ãã¹ãŠãææžåãã
ã³ãŒãã«ã³ã¡ã³ãã远å ããåDAGãšã¿ã¹ã¯ã«æç¢ºãªèª¬æãæäŸããŸããåªããããã¥ã¡ã³ãã¯ãæ°ããããŒã ã¡ã³ããŒããæ°ãæåŸã«åé¡ããããã°ããå¿ èŠãããå°æ¥ã®èªåã«ãšã£ãŠéåžžã«è²Žéã§ãã
ããŒã¿ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®æªæ¥
ããŒã¿ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®åéã¯ãç¶ç¶çã«é²åããŠããŸããããã€ãã®äž»èŠãªãã¬ã³ãããã®æªæ¥ã圢äœã£ãŠããŸãïŒ
- ã€ãã³ãããªãã³ã¢ãŒããã¯ãã£ïŒæéããŒã¹ã®ã¹ã±ãžã¥ãŒã«ãè¶ ããŠãã¹ãã¬ãŒãžãã±ããã«æ°ãããã¡ã€ã«ãé 眮ãããããããŒã¿ããŒã¹ã«æ°ããã¬ã³ãŒããäœæãããããããªã©ãå®éã®äžçã®ã€ãã³ãã«åºã¥ããŠãã€ãã©ã€ã³ãããªã¬ãŒããŸãã
- ããŒã¿ã¡ãã·ã¥ãšã®çµ±åïŒããå€ãã®çµç¹ã忣åããŒã¿ã¡ãã·ã¥ã®ååãæ¡çšããã«ã€ããŠããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã¯ãç°ãªããã¡ã€ã³ãææããç°ãªãããŒã¿è£œåéã®äŸåé¢ä¿ãšãµãŒãã¹ã¬ãã«ã¢ã°ãªãŒã¡ã³ãïŒSLAïŒã®ç®¡çã«ãããŠéèŠãªåœ¹å²ãæãããŸãã
- AIã«ããæé©åïŒæ©æ¢°åŠç¿ã䜿çšããŠããã€ãã©ã€ã³ã®é害ãäºæž¬ããããããã©ãŒãã³ã¹ã®æé©åãææ¡ããããäžè¬çãªåé¡ãèªåçã«è§£æ±ºããŠèªå·±ä¿®åŸ©ãããããŸãã
- ã¡ã¿ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ïŒå€§èŠæš¡ã§è€éãªäŒæ¥ã§ã¯ãããªãŒã±ã¹ãã¬ãŒã¿ãŒã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãã®å°é ãèŠãããŸããããã¯ãè€æ°ã®ããŒã«ãšã¯ã©ãŠãç°å¢ã«ãŸãããã¯ãŒã¯ãããŒã管çãããããé«ã¬ãã«ã®å¶åŸ¡ãã¬ãŒã³ã§ãã
çµè«ïŒæ··æ²ããå¶åŸ¡ãž
ãã€ãã©ã€ã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã«ããããŒã¿èªååã¯ãææ°ã®ããŒã¿é§ååçµç¹ã®ããã¯ããŒã³ã§ããã°ãã°ãã®ã¹ã¯ãªããã®æ··æ²ãšããã³ã¬ã¯ã·ã§ã³ããä¿¡é Œæ§ãé«ããã¹ã±ãŒã©ãã«ã§ãå¯èŠ³æž¬ãªããŒã¿ãã¡ã¯ããªãŒã«å€ããŸããDAGãã¿ã¹ã¯ãããã³äŸåé¢ä¿ã®ã³ã¢ååãçè§£ããã°ããŒãã«ããŒã ã«é©ããããŒã«ãæ éã«è©äŸ¡ãããšã³ãžãã¢ãªã³ã°ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãçã®ããŒã¿ãæŠç¥çè³ç£ã«å€ããå ç¢ãªããŒã¿ãã©ãããã©ãŒã ãæ§ç¯ã§ããŸãã
æåã§ã®ããŒã¿æäœããèªåãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãžã®ç§»è¡ã¯éèŠã§ãããå¹çãä¿¡é Œæ§ãããã³ããæ·±ãæŽå¯ãåŒãåºãèœåãšããç¹ã§ããã®å ±é ¬ã¯è«å€§ã§ããããã¯ãçŸä»£ã®ã°ããŒãã«äŒæ¥ãåããããŒã¿ã®ã·ã³ãã©ããŒãææ®ããããã«å¿ èŠãªå¶åŸ¡ãšèª¿åãæäŸããéèŠãªèŠåŸã§ãã