Digdagを仕事で使ってみて良かったこと、ハマったこと / Using Digdag in production environment

Digdagを仕事で使ってみて良かったこと、ハマったこと / Using Digdag in production environment

D0f23208dff6d54a2a4305e65af569c8?s=128

Takehiro Shiozaki

June 07, 2017
Tweet

Transcript

  1. %JHEBHΛ࢓ࣄͰ࢖ͬͯΈͯ ྑ͔ͬͨ͜ͱɺϋϚͬͨ͜ͱ 8PSLqPX&OHJOFT/JHIU VASILY,Inc. Ԙ㟒݈߂

  2. Ԙ㟒݈߂ w ೥ʹ7"4*-:ʹ৽ଔೖࣾ w ීஈͷ͓࢓ࣄ͸3BJMTͰXFC"1*࡞ͬͨΓɺ4PMSͷϝϯςͨ͠Γ
 5BCMFBV#JH2VFSZͰμογϡϘʔυ࡞ͬͨΓ w %JHEBHྺ͸·ͩिؒ͘Β͍ 7"4*-: *OD

    TPGUXBSFFOHJOFFS
  3. *20/ Ҏ্ͷϑΝογϣϯ&$αΠτ͔Β ྦྷܭ ສ఺Λ௒͑Δ঎඼Λܝࡌ ݄ؒສਓҎ্͕ར༻͢Δ೔ຊ࠷େڃͷϑΝογϣϯαΠτ

  4. w ͱ͋ΔҊ݅ͰΫϩʔϥʔΛ࡞Γ·ͨ͠ w ਺αΠτͷ৘ใΛΫϩʔϧ͠ɺ
 ͦΕΒͷ৘ใΛϚʔδͨ͠ޙʹ4ʹอଘ ͲΜͳ΋ͷΛ࡞ͬͨͷ͔

  5. %"(Ͱॻ͘ͱ͜Μͳײ͡ $SBXM $SBXM $SBXM/ .FSHF 6QMPBE ɾɾɾ

  6. DSPOͰ؅ཧ͍ͯͨ͠ࠒ 0 0 * * * crawl-1
 0 0 *

    * * crawl-2 0 0 * * * crawl-N # crawl処理は30分以内に終わるはず 0 30 * * * merge
 # merge処理は10分以内に終わるはず 0 40 * * * upload
  7. DSPOͰ؅ཧ͍ͯͨ͠ࠒ 0 0 * * * crawl-1
 0 0 *

    * * crawl-2 0 0 * * * crawl-N # crawl処理は30分以内に終わるはず 0 30 * * * merge
 # merge処理は10分以内に終わるはず 0 40 * * * upload ΋͠ɺ෼Ҏ಺ʹऴΘΒͳ͔ͬͨΒʁ
  8. DSPOͰ؅ཧ͍ͯͨ͠ࠒ 0 0 * * * crawl-1
 0 0 *

    * * crawl-2 0 0 * * * crawl-N # crawl処理は30分以内に終わるはず 0 30 * * * merge
 # merge処理は10分以内に終わるはず 0 40 * * * upload ͜ͷॲཧ͕ࣦഊͨ͠Βɺ ͜ΕҎ߱ͷॲཧ͸ετοϓ͢Δ΂͖ʁ
  9. DSPOͰ؅ཧ͍ͯͨ͠ࠒ 0 0 * * * crawl-1
 0 0 *

    * * crawl-2 0 0 * * * crawl-N # crawl処理は30分以内に終わるはず 0 30 * * * merge
 # merge処理は10分以内に終わるはず 0 40 * * * upload ॲཧ͕ࣦഊͨ࣌͠ʹ͸ϦτϥΠ͍ͨ͠
  10. DSPOͰ؅ཧ͍ͯͨ͠ࠒ 0 0 * * * crawl-1
 0 0 *

    * * crawl-2 0 0 * * * crawl-N # crawl処理は30分以内に終わるはず 0 30 * * * merge
 # merge処理は10分以内に終わるはず 0 40 * * * upload ্ྲྀͷॲཧ͕ϦτϥΠͨ࣌͠ʹ͸ɺ ॲཧͷ։࢝࣌ࠁΛ஗Β͍ͤͨ
  11. DSPOͰ؅ཧ͍ͯͨ͠ࠒ 0 0 * * * crawl-1
 0 0 *

    * * crawl-2 0 0 * * * crawl-N # crawl処理は30分以内に終わるはず 0 30 * * * merge
 # merge処理は10分以内に終わるはず 0 40 * * * upload Τϥʔ͕ى͖ͨΒ௨஌͕ཉ͍͠
  12. ͭΒ͍

  13. w લड़ͨ͠ʮͭΒ͞ʯΛղফ͢ΔͨΊʹಋೖ w %JHEBHಋೖͷཧ༝ w ৴པͱ࣮੷ͷ5SFBTVSF%BUB੡044 w "JSqPX΍-VJHJͱൺ΂Δͱઃఆ͕γϯϓϧ w Ϟάϥ͕νϟʔϛϯά

    %JHEBHಋೖ
  14. ͔͜͜Βຊ୊ %JHEBHΛಋೖͯ͠Α͔ͬͨ͜ͱ ˍ %JHEBHͷಋೖͰϋϚͬͨ͜ͱ

  15. w "JSqPX΍-VJHJͱൺ΂Δͱࣗ༝౓͕௿͍
 ˢͦ΋ͦ΋ߴ͍ࣗ༝౓͸ෆཁ Α͔ͬͨ͜ͱઃఆϑΝΠϧ͕γϯϓϧ timezone: UTC +setup: echo>: start ${session_time}

    +disp_current_date: echo>: ${moment(session_time).utc().format('YYYY-MM-DD HH:mm:ss Z')} +repeat: for_each>: order: [first, second, third] animal: [dog, cat] _do: echo>: ${order} ${animal} _parallel: true +teardown: echo>: finish ${session_time}
  16. w %JHEBHαʔόʔʹ͸%PDLFS͚ͩΛΠϯετʔϧ w ΞϓϦέʔγϣϯͷ࣮ߦ؀ڥ͸ίϯςφ಺ʹด͡ࠐΊ w %JHEBHαʔόʔͷߏ੒͕γϯϓϧʹͳΔ Α͔ͬͨ͜ͱ%PDLFSαϙʔτ

  17. w /tmp/digdag-tempdir* ͕λεΫຖʹੜ੒͞ΕΔ w ଞͷλεΫ͔ΒͷӨڹΛ࠷খԽͰ͖Δ w ˞%JHEBHTFSWFSݶఆ Α͔ͬͨ͜ͱҰ࣌σΟϨΫτϦͰλεΫΛ࣮ߦ

  18. w QZΦϖϨʔλʔ͸QZUIPOίϚϯυΛݺͼग़͢ w 6CVOUVͰ͸QZUIPOίϚϯυͰ1ZUIPO͕ɺ QZUIPOίϚϯυͰ1ZUIPO͕࣮ߦ͞ΕΔ w ࢖͍͔ͨͬͨͷ͸1ZUIPOͷํ w ղܾࡦ w

    1ZUIPOͷ%PDLFSΠϝʔδΛ࢖༻ ϋϚͬͨ͜ͱ1ZUIPOͷόʔδϣϯ
  19. w ղܾࡦ w 4ʹҰ࣌ϑΝΠϧΛஔ͍ͯड͚౉͠Λ͢Δ ϋϚͬͨ͜ͱҰ࣌ϑΝΠϧͷड͚౉͠ _export: docker: image: python:3.6.1 +crawl:

    _parallel: true +crawl1: sh>: crawl.sh > temp_result_1.json +crawl2: sh>: crawl.sh > temp_result_2.json +merge: sh>: merge.sh temp_result1.json temp_result2.json &3303 ϑΝΠϧ͕ݟ͔ͭΒͳ͍
  20. w υΩϡϝϯτʹॻ͔Ε͍ͯͳ͍ػೳ͕͋ͬͨΓ w TFSWFSϞʔυͱTDIFEVMFSϞʔυͷ࢖͍෼͚ͷج४ w ϓϥάΠϯϚωʔδϟ embulk gemతͳ ͜Ε͔Βʹظ଴

  21. w %JHEBHศར w DSPOӡ༻ͷʮͭΒ͞ʯΛղফͯ͘͠ΕΔϞάϥ w ·ͩࢼͨ͜͠ͱ͕ͳ͍ਓ͸ɺҎԼͷίϚϯυΛ࣮ߦͯ͠Πϯετʔϧ • $ curl -o

    ~/bin/digdag --create-dirs \
 -L "https://dl.digdag.io/digdag-latest"
 $ chmod +x ~/bin/digdag
 $ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc ·ͱΊ