ทำ Data Pipeline กับ SFTP Server ด้วย GitLab และ Google Cloud Platform

เมื่อวานลองทำ Data Pipeline ท่าใหม่ที่ไม่เคยทำมาก่อน โดยลูกค้าจะเอาไฟล์มา Drop ไว้ให้บน SFTP แล้วเราจะต้องดูดจาก SFTP ส่งไปหา BigQuery คิดไปคิดมาได้ Solution แปลกใหม่น่าสนใจ เลยเอามาแชร์ให้อ่านกันเล่นๆ

Concept โดยคร่าวคือ เราจะต้อง Sync ข้อมูลจาก SFTP ลงมาใน Local ให้ได้ก่อน แล้วก็เลือกเฉพาะไฟล์ที่มีการเปลี่ยนแปลงส่งขึ้นไปบน Google Cloud Function (GCF) แล้วไปรัน Data Pipeline ต่อบนนั้น ซึ่งข้างบน GCloud นี่ไม่น่าเห็นห่วง เครื่องมือเขาพร้อมอยู่แล้ว แล้วน้องๆ ก็ช่วยกันดำเนินการจนสำเร็จสวยงามไปแล้ว เหลือแต่ส่วนที่เรารับผิดชอบเนี่ยแหละยังไม่ได้ทำ ทุกคนรออยู่ 555 สิ่งที่ต้องคิดเพราะยังไม่เคยทำมาก่อนคือ เรา Sync ไฟล์ลงมาจาก SFTP ได้ยังไงนี่ล่ะ แล้วจะเลือกส่งเฉพาะไฟล์ที่มีการอัพเดทได้อย่างไร

ระหว่างจัดการเรื่อง SFTP หันไปหันมา ไปเจอ lftp มีคำสั่งเอาไว้ mirror ไฟล์จาก SFTP ได้ เทพมาก ไม่ต้องคิดมากเรื่อง sync กับ SFTP อีกต่อไป

ต่อมาเริ่มพยายามเขียน Bash Script เลือกเอาเฉพาะไฟล์ใหม่ที่เพิ่มลงมา เตรียมส่งขึ้น GCF ละ แต่ฉุกคิดขึ้นมาได้ว่า เฮ้ย ถ้าเอาไปใส่ Git ล่ะ ทำได้ไหมนะ ก็ลองลองดู ไปสร้าง User ใหม่ใน GitLab ให้สิทธิ์เข้า Repo แล้วก็เชื่อม SSH Key สำหรับเครื่อง Server แล้วก็ Clone มาลงเรียบร้อย

จากนั้นก็สร้าง Script ให้มันรันทุกอย่างเป็นอัตโนมัติประมาณนี้

ทุกครั้งที่รัน จะสั่ง git pull อัพเดท Script เรียบร้อยแล้วสั่ง Sync ไฟล์จาก SFTP จากนั้นใส่ทุกความเคลื่อนไหวลงไปใน Git ทำการ Commit และ Push ขึ้นไป เรียบร้อยแล้วก็เซท Cron ให้มันรันเองทุกๆ ช่วงเวลาที่กำหนด

!! Work like magic !!

  • ไม่ต้อง Remote เข้าไปที่ Server เพื่อแก้ Script เพราะแก้จาก Git Remote ได้เลย ก่อนจะรันมัน Git Pull
  • เมื่อมีการเปลี่ยนแปลง จะเกิดขึ้น จะมี Git Commit ใหม่และถูก Push ขึ้นมา แต่ถ้าไม่มีการเปลี่ยนแปลง มันก็จะ Commit ไม่ได้ จึงไม่มีการเปลี่ยนแปลง
  • ตาม Track ได้ตลอดว่ามีไฟล์อัพเดทเมื่อไหร่จาก GitLab ไม่ต้อง Remote เข้าไปดูเอง
  • พอมี Commit Push ขึ้นไป GitLab CI ก็จะถูกรัน ทีนี้อยากจะเขียนภาษาอะไรจัดการต่อก็จัดได้หมด อยากรู้ว่าไฟล์ไหนมีการเปลี่ยนแปลงบ้างก็ไปเอา History ของ Git ออกมาดูแล้ว Regex เอาเฉพาะที่เปลี่ยนแปลงมารันได้เลย

วันนี้ตื่นมาสมองโปร่ง คิดต่อยอดไปได้อีกหน่อย ทำไมเราถึงต้องตั้งเครื่อง Server มาเปิดทิ้งไว้ด้วยล่ะ เสี่ยงมีปัญหา ต้องมีคอย Monitor ในเมื่อมี Farm GitLab Runner ของตัวเองอยู่แล้ว แล้วทุกๆ ครั้งที่มันรัน Pipeline มันก็สร้างเครื่องก็ Pull Git มาอยู่ละ ทำไมไม่รันบน GitLab CI ไปเลย แล้วก็สั่งให้มันรัน Pipeline บน GitLab ได้เลย ไม่ต้องตั้ง Cron บน Server ทีนี้ก็จะทำ Data Pipeline โดยไม่ต้องดูแลเครื่อง อันนี้เดี๋ยวก็จะต่อยอดกันต่อไปเร็วๆ นี้

นี่เป็นครั้งที่ 2 ในการเลือกเอา GitLab CI ในการทำ Data Pipeline ก่อนหน้านี้เอามารัน Script ที่รันโคตรนานแต่แบ่งงานได้ ก็เลยให้มันช่วยแบ่งงานแล้วทำเป็น Parallel Spawn เครื่อง Preemptible ขึ้นมารัวๆ ซึ่งความจริงมันก็คืองานโปรเจกต์เดียวกันนี่ล่ะ แต่รอบนี้เอามารัน Data Pipeline ซะเลย เพิ่มความ Automate ขึ้นไปอีกระดับ

เป็นการใช้เครื่องมือที่ไม่ได้ออกแบบมาให้เป็น Data Pipeline แต่โคตรเหมาะกับบางโจทย์ของการทำ Data Pipeline เลย

Credit OK ของเราใช้ 3 เครื่องมือทำครบทุกอย่าง GCP, GitLab, Slack 🙂

สรุปเรื่อง Kubernetes Services บน GKE หลังศึกษาและทดลองอย่างเอาจริงเอาจัง

Kubernetes เป็นระบบจัดการ Container ที่เป็นที่นิยมสูงมากในตอนนี้ ส่วนตัวผมแล้วก็พยายามเรียนรู้และใช้งานอยู่จริงเช่นกัน ในเรื่องของการ Deploy พวกนี้ผมถือว่าไม่มีปัญหาอะไร มีตัวอย่างให้ดูกันบนอินเทอร์เน็ตมากมาย จนกระทั่งมาถึงจุดที่ต้องการจะส่ง Traffic ออกมานอก Cluster เมื่อนั้นก็เริ่มเกิดความสับสนว่าตกลงมันต้องทำแบบไหนกันแน่ ซึ่งปัญหาทั้งหมดทั้งปวงมันเกิดจากผมไม่เข้าใจเรื่อง Service อย่างถ่องแท้นั่นเอง จะเนื่องจาก Official Doc เขียนไม่เคลียร์ หรือเป็นเพราะผมพื้นฐานไม่ดีพอที่จะอ่านมันแล้วเข้าใจก็สุดแล้วแต่ สุดท้ายเมื่อไม่นานมานี้ผมก็เลยเปิดการทดลองใช้งาน Service อย่างเอาจริงเอาจัง หลังจากใช้มั่วแบบงูๆ ปลาๆ มานาน เอาให้รู้กันไปว่าตกลงอะไรมันทำอะไรกันแน่ แต่จะประเภทมันต่างกันอย่างไร Configuration แต่ละตัวที่ใช้อยู่ประจำมันส่งผลยังไงกันแน่ จึงได้มาเขียนสรุปเรื่อง Services ชนิดต่างๆ บน Kubernetes ไปจนถึงการเอาไปใช้งานจริงว่า เมื่อไหร่ ควรจะใช้แบบไหนกันแน่ เผื่อจะช่วยล่นเวลาคนที่กำลังสับสนอยู่เช่นกัน

Continue reading

หนึ่งสัปดาห์ผ่านไปกับ Manjaro KDE

หนึ่งสัปดาห์ผ่านไปกับ Manjaro KDE
วันนี้เพิ่งรัน AutoKey สำเร็จแล้ว ติดมานาน
ปิดฉากการติดตั้งครบเซททุกอย่างที่ต้องการละ
ยิ่งใช้ Linux ยิ่งเข้าใจถึงแก่นของคอมพิวเตอร์

Continue reading

ความรัก สาม ฤดู

ความรักมีความเร่าร้อน
ความรักมีความเศร้าหมอง
ความรักมีความเย็นสบายใจ
บทเรียนความรักสามฤดู
ที่ทุกคู่รักต้องผ่านไป
เพื่อให้ได้พบรักที่ไฝ่ฝัน

Continue reading

สรุปความคิดที่ได้จากหนังสือ ทำไมคุยกับคนนี้แล้วรู้สึกดีจัง

เมื่อไม่นานมานี้ผมเพิ่งอ่านหนังสือจบไปหนึ่งเล่มที่เหมาะมากสำหรับตัวผมเอง มันเป็นหนังสือที่ปรับวิธีคิดเรื่องการพูดคุยกับมนุษย์คนอื่นๆ โดยพื้นฐานแล้วผมเป็นคนจริงจังเกินไป ชอบคิดอะไรอยู่คนเดียวมากกว่าไปร่วมวงสนทนา และไม่แคร์ว่าคนอื่นจะคิดอย่างไรกับเรากับการที่เราคุยกับเขาไม่รู้เรื่อง เพราะเห็นว่าไม่ได้ตรงกับจุดประสงค์และเป้าหมายชีวิตที่กำลังจะไป

แต่ความจริงแล้วมนุษย์เราเป็นสัตว์สังคม ยังไงเราก็ต้องพูดคุยกับคนอื่นให้ได้ คือคนที่มันไม่จำเป็นต้องคุยจริงๆ ก็แล้วแต่ แต่ถ้าเป็นคนที่ควรคุยแต่ดันคุยไม่ติดแล้ว ก็ไม่ต่างอะไรกับการทิ้งโอกาสบางอย่างไป เพราะโอกาสส่วนใหญ่ก็มาจากคนเนี่ยแหละ

ดังนั้นพอมาถึงจุดนี้ก็ต้องพัฒนาการสื่อสารแล้วล่ะ แต่ด้วยความที่เป็นอีกแบบมาตลอดชีวิต แถมยังไม่ใช่สิ่งที่ถนัดจนถึงอาจเรียกว่าเป็นปมด้อยซะด้วยซ้ำในสมัยก่อน จึงเป็นทักษะที่ยากเลยแหละสำหรับการพัฒนา

พอได้มาเจอหนังสือเล่มนี้ ก็เหมือนเจอคนที่ได้ฝ่าฟันปัญหาแบบเดียวกันนี้มาแล้ว ได้มาสรุปอย่างเป็นระบบระเบียบให้ได้ทบทวนและลองปฏิบัติ จะได้ไม่ได้ อีกเรื่องนึง แต่ผมอยากให้ท่านๆ ที่อยากพัฒนาเรื่องการพูดคุยเรื่องทั่วๆ ไป ให้เป็นคนที่ใครก็รู้สึกดีที่ได้เข้ามาคุยด้วย ได้ลองอ่านกันดู

Continue reading

เปลี่ยนจากคน “นอนดึก ตื่นสาย” เป็น “นอนเร็ว ตื่นเช้า” ใน 3 เดือน

วันนี้เขียนขอบันทึกถึงเรื่องราวการเปลี่ยนแปลงในตัวเองอีกครั้งที่ไม่เคยคาดคิดเลยว่าจะสามารถทำได้ ซึ่งก็ไม่แน่ใจว่าจะมีประโยชน์กับท่านผู้อ่านหรือไม่ 555 เรื่องที่ได้เปลี่ยนแปลงไปก็ตามหัวข้อคือ ตอนนี้ผมได้เปลี่ยนจากมนุษย์นกฮูกที่นอนดึกตื่นสาย กลายเป็นมนุษย์นกลาร์คที่ตื่นเช้าแล้ว (Lark เป็นนกที่ตื่นพร้อมพระอาทิตย์) มาดูกันว่ามันเปลี่ยนไปได้อย่างไร แล้วมีจังหวะการใช้ชีวิตในแต่ละวันมีการเปลี่ยนแปลงไปอย่างไร ดีขึ้น แย่ลง อย่างไรบ้าง

Continue reading

ทำความรู้จักกับ Cloud Run โฮสเว็บด้วย Container แบบไม่ต้องแตะ Infrastructure กันไปเลย

เมื่อต้นปีที่ผ่านมา ผมได้พูดถึง Google Cloud Functions กันไปแล้วในช่วงท้ายของ Serverless Big Data Architecture ว่ามันใช้งานง่ายและสะดวกขนาดไหน แต่ก็มีข้อจำกัดอย่างหนึ่งของ Google Cloud Functions ว่า จะต้องเขียนด้วยภาษาที่มันรองรับเท่านั้น ซึ่งตอนนี้ก็มี Python, ES, Golang และในงาน Cloud Next ’19 ที่ผ่านมา Google Cloud Platform ก็เปิดตัวของเล่นใหม่ให้ผมต้องลุกขึ้นปรบมือเลย เพราะอยากได้แบบนี้มานานแล้ว นั่นก็คือ Cloud Run นั่นเอง หลังจากได้เล่นมานิดๆ หน่อยๆ วันนี้จะพาแนะนำในเบื้องต้นว่า Cloud Run คืออะไร เหมาะสมกับงานประเภทไหน และมาทดลองใช้งานกัน

Continue reading

เขียน Diary ด้วย Evernote สมุดจดบันทึกที่ค้นหาและทำสถิติได้

สวัสดีครับ วันนี้ผมจะมาแบ่งปันประสบการณ์การจดบันทึกประจำวันกัน ผมเชื่อว่าหลายๆ ท่านคงจะจด Diary กันอยู่เป็นประจำอยู่แล้ว และหลายๆ คนก็พยายามจะเริ่มจดกันอยู่ ซึ่งเครื่องมือที่ใช้จดได้ก็มีมากมายหลายตัว ผมก็ได้ลองมาเกือบสิบตัวละ แต่ช่วงหลังมานี่ผมอยากใช้ประโยชน์จากการจด Diary ในหลายแง่มุมมากขึ้น จึงพยายามหาเครื่องมือที่ไม่ใช่แค่จด แต่ใช้เพื่อค้นหา ใช้ทำสถิติ และเหมาะกับ Life Style ของตัวเองด้วย แล้วในท้ายที่สุดก็มาลงเอยกับ Evernote โปรแกรมจดบันทึกยอดนิยม ที่พักหลังมานี่ฟีเจอร์เริ่มจะเยอะไปจนคนเลิกใช้กันไปหลายคน แต่กลับเหมาะอย่างยิ่งกับการใช้งานกับการจด Diary จากที่ผมลองใช้มา ทำไมผมถึงมาเริ่มจดบันทึกทุกวัน การจดบน Evernote ดีกว่าโปรแกรมอื่นอย่างไร แล้วจะต้องจดอย่างไร เราอย่ารอช้า มาหาคำตอบกันเลยดีกว่า 🙂

Continue reading

ตั้งเครื่อง GitLab Runner ใช้เอง แบบ Auto Scale ได้ ในราคาเบาๆ ด้วย Preemptible Instance

วันนี้จะขอมาเล่าส่วนหนึ่งของงาน DevOps ในบริษัท เป็นเรื่องของการเอา GitLab Runner เข้าไปรันบนเครื่อง Preemptible Instance ของ Google Cloud Platform ทำให้ลดค่าเครื่องไปได้อย่างมาก แต่ยังทำงานทุกอย่างเป็นปรกติดี เอาล่ะครับ อย่ามัวรอช้า เรามาเริ่มกันเลยดีกว่า

Continue reading

แนวคิดเรื่องการแก้ปัญหา “วิกฤตการณ์ขาดแคลนโปรแกรมเมอร์”

จากการที่ได้ไปสอนน้องๆ ป.ตรี เมื่อวาน และได้ทดลองอะไรหลายๆ อย่างระหว่างการสอน มีจุดหนึ่งที่น่าสนใจมากคือ น้องๆ จะให้ความสนใจเป็นพิเศษในช่วงของการแนะแนว แนะแนวว่า ออกไปข้างนอก จะเจออะไร จะต้องเตรียมตัวยังไง

มันทำให้ผมฉุกคิดกลับไปถึงสมัยที่ยังเรียนอยู่เหมือนกันว่า ความเป็นจริงเราก็อยากรู้เหมือนกันนะว่า จบไปแล้ว “จริงๆ” เราอยากจะเป็นอะไรกันแน่ แล้วที่เราเป็นอยู่ เราขาดอะไรบ้างถึงจะได้เป็น

ซึ่งจากสภาพปัจจุบันคือ เด็กๆ ยังหาตัวตนไม่เจอกัน ไม่ใช่แค่เด็กที่ผมไปสอน แต่เป็นเด็กส่วนใหญ่ของประเทศ คือมีน้อยมากจริงๆ ที่ไปคุยแล้วจะมองเห็นแววตาอันมุ่งมั่น ซึ่งในท้ายที่สุด ผมไม่คิดว่ามันผิดที่เด็กไม่เอาไหน ไม่สนใจโลก เพราะเมื่อวานก็เป็นข้อพิสูจน์แล้วว่า เด็กก็ห่วงอนาคตตัวเองเช่นกัน

เพียงแต่ว่า ไม่สามารถมองเห็นได้เลยว่า ออกมาทำงาน มันเป็นยังไง ชีวิตการเป็นมนุษย์เงินเดิน มันเป็นยังไง ส่วนใหญ่ก็เห็นแต่การ์ตูนล้อชีวิตขำๆ ซึ่งนั่นมันเป็นแค่เสี้ยวเล็กๆ ของชีวิตคน พอมองไม่เห็นอนาคตที่ชัดเจน ก็ยากจะวางแผนเตรียมตัวให้พร้อม สุดท้ายผลผลิตที่ออกมาจากมหาวิทยาลัยจึงด้อยคุณภาพ และเกิดเป็นวิกฤติการณ์ขาดแคลนโปรแกรมเมอร์อย่างที่เราเจอกันอยู่ (วิกฤติการณ์นี้ มันไม่ได้เกิดจากไม่มีเด็กจบคอมฯ แต่เด็กที่จบใหม่มันคุณภาพไม่ถึง)

ผมคิดว่าการจะทำให้เด็กๆ ได้เห็นว่าเขาต้องเตรียมพร้อมอะไรบ้าง คือผู้ใหญ่ที่ทำงาน ต้องลงไปเจอเด็ก ไปแนะแนวเด็ก ให้เด็กได้เห็นว่า เขาจะต้องเตรียมตัวอะไรบ้าง ควรมีการกลับไปเจอ กลับไปพูดคุยกับน้องๆ จับมาให้ลองให้ฝึกใช้เทคโนโลยีและเครื่องมือจริงๆ ไม่ใช่ได้ลองจับเฉพาะเครื่องมือเก่าๆ ที่หลักสูตรสอนกันอยู่ พี่ๆ ควรเข้าไปในมหาวิทยาลัย เข้าไปแบ่งปันประสบการณ์ เอาแบบผิวๆ ก็พอ ให้น้องได้รู้ว่าโลกนี้มีอะไรที่ต้องเรียนรู้บ้าง อย่างน้อยวันไหนมีไฟกลับบ้านไปเปิดคอมไปทดลองเล่นดูเองบ้าง จะได้ฝึกทักษะกระบวนการคิด กระบวนการลองผิดลองถูก ซึ่งสำคัญมากในการทำงาน

ผมเชื่อว่าถ้าเราช่วยกัน แบ่งเวลาทำงานไปช่วยกันปลูกเมล็ดพันธุ์ทางความคิดให้น้องๆ กันบ้างอย่างต่อเนื่อง ร่วมมือกับอาจารย์ ขอให้มอบเวลาบางส่วนให้ได้เข้าไปแนะแนว และให้พาเด็กออกไปเจอโลกข้างนอกบ้าง ผมเชื่อว่าในเวลาไม่นาน (ไม่น่าเกิน 2 ปีซะด้วยซ้ำ) เด็กๆ เหล่านั้นจะกลายเป็นนักพัฒนาที่มีคุณภาพ และปัญหาขาดแคลนโปรแกรมเมอร์ของเราจะลดลงไปได้อย่างมาก

ตัวเด็กก็อยากมีอนาคตที่ดี
บริษัทก็ต้องการเด็กคุณภาพ
มหาวิทยาลัยก็อยากเป็นแหล่งบ่มเพาะคนที่ดี
ประเทศชาติก็ต้องการนวัตกรรมเพื่อขับเคลื่อนเศรษฐกิจ

แล้วเรามัวแต่รออะไรกันอยู่?