การพัฒนาสำหรับคลาวด์ในคลาวด์: การพัฒนา BigData ด้วย Docker ใน AWS

เผยแพร่แล้ว: 2022-03-11

ทำไมคุณอาจต้องการมัน?

ฉันเป็นนักพัฒนา และฉันทำงานทุกวันในสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) เช่น Intellij IDEA หรือ Eclipse IDE เหล่านี้เป็นแอปพลิเคชันเดสก์ท็อป นับตั้งแต่การถือกำเนิดของ Google Documents ฉันได้เห็นผู้คนจำนวนมากขึ้นเรื่อยๆ ที่ย้ายงานจาก Word หรือ Excel เวอร์ชันเดสก์ท็อปไปยังระบบคลาวด์โดยใช้โปรแกรมประมวลผลคำหรือแอปพลิเคชันสเปรดชีตออนไลน์ที่เทียบเท่ากัน

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

น่าเสียดายที่ข้อดีของระบบคลาวด์เหล่านี้ไม่ได้เกิดขึ้นบ่อยในโลกของการพัฒนาซอฟต์แวร์เช่นเดียวกับแอปพลิเคชันทางธุรกิจ มีความพยายามที่จะจัดหา IDE ออนไลน์ แต่ไม่มีที่ไหนที่ใกล้เคียงกับ IDE แบบเดิม

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

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

นักพัฒนาในคลาวด์

คลาวด์เกี่ยวกับนักพัฒนาคืออะไร? พัฒนาในนั้นแน่นอน!
ทวีต

ในบทความนี้ ผมขอนำเสนอชุดของสคริปต์เพื่อสร้างสภาพแวดล้อมการพัฒนาบนคลาวด์สำหรับแอปพลิเคชัน Scala และ Big Data ที่ทำงานด้วย Docker ใน Amazon AWS และประกอบด้วยเดสก์ท็อปที่เข้าถึงได้ทางเว็บซึ่งมี IntelliJ IDE, Spark, Hadoop และ Zeppelin เป็นบริการ และเครื่องมือบรรทัดคำสั่ง เช่น SSH, SBT และ Ammonite บนเว็บ ชุดเครื่องมือนี้มีให้ใช้ฟรีบน GitHub และฉันจะอธิบายขั้นตอนการใช้งานเพื่อสร้างอินสแตนซ์ของคุณที่นี่ คุณสามารถสร้างสภาพแวดล้อมและปรับแต่งตามความต้องการเฉพาะของคุณได้ ไม่ควรใช้เวลาเกิน 10 นาทีในการเริ่มต้นใช้งาน

มีอะไรอยู่ใน “BigDataDevKit”?

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

สภาพแวดล้อมบนคลาวด์ในอุดมคติของฉันควร:

  • รวมเครื่องมือการพัฒนาตามปกติทั้งหมด ที่สำคัญที่สุดคือ IDE แบบกราฟิก
  • มีเซิร์ฟเวอร์และบริการที่ฉันต้องการเพียงปลายนิ้วสัมผัส
  • สร้างตั้งแต่เริ่มต้นได้ง่ายและรวดเร็ว และสามารถขยายได้เพื่อเพิ่มบริการอื่นๆ
  • สามารถเข้าถึงได้ทั้งหมดโดยใช้เว็บเบราว์เซอร์เท่านั้น
  • อนุญาตการเข้าถึงด้วยไคลเอ็นต์เฉพาะ (ไคลเอ็นต์ VNC และไคลเอ็นต์ SSH)

ด้วยการใช้ประโยชน์จากโครงสร้างพื้นฐานและซอฟต์แวร์ระบบคลาวด์ที่ทันสมัย ​​พลังของเบราว์เซอร์ที่ทันสมัย ​​ความพร้อมใช้งานของบรอดแบนด์อย่างกว้างขวาง และ Docker อันล้ำค่า ฉันได้สร้างสภาพแวดล้อมการพัฒนาสำหรับ Scala และการพัฒนาบิ๊กดาต้าที่แทนที่แล็ปท็อปเพื่อการพัฒนาของฉันให้ดีขึ้น

ปัจจุบัน ฉันสามารถทำงานได้ทุกเวลา ไม่ว่าจะจาก MacBook Pro, Surface Tablet หรือแม้แต่ iPad (ที่มีแป้นพิมพ์) แม้ว่าตัวเลือกสุดท้ายจะไม่เหมาะก็ตาม อุปกรณ์ทั้งหมดเหล่านี้เป็นเพียงไคลเอนต์เท่านั้น เดสก์ท็อปและเซิร์ฟเวอร์ทั้งหมดอยู่ในคลาวด์

นักเทียบท่าและ Amazon AWS!

สภาพแวดล้อมปัจจุบันของฉันสร้างขึ้นโดยใช้บริการออนไลน์ต่อไปนี้:

  • Amazon Web Services สำหรับเซิร์ฟเวอร์
  • GitHub สำหรับจัดเก็บรหัส
  • Dropbox เพื่อบันทึกไฟล์

ฉันยังใช้บริการฟรีสองสามอย่าง เช่น DuckDns สำหรับที่อยู่ IP แบบไดนามิก และ Let's encrypt เพื่อรับใบรับรอง SSL ฟรี

ในสภาพแวดล้อมนี้ ฉันมี:

  • เดสก์ท็อปกราฟิกพร้อมแนวคิด Intellij เข้าถึงได้ผ่านเว็บเบราว์เซอร์
  • เครื่องมือบรรทัดคำสั่งที่เข้าถึงได้ทางเว็บ เช่น SBT และ Ammonite
  • Hadoop สำหรับจัดเก็บไฟล์และเรียกใช้งาน MapReduce
  • Spark Job Server สำหรับงานตามกำหนดการ
  • Zeppelin สำหรับโน้ตบุ๊กบนเว็บ

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

การใช้สภาพแวดล้อมการพัฒนาบนเว็บกับ AWS และ Docker

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

หน้าจอ1

ดังนั้นฉันจึงเลือกอินสแตนซ์ที่ต้องการ เริ่มเลย ฉันรอสักครู่หรือไปดื่มกาแฟสักแก้ว การเปิดเครื่องคอมพิวเตอร์ก็ไม่ต่างจากเดิมมากนัก โดยปกติจะใช้เวลาไม่กี่วินาทีเพื่อให้อินสแตนซ์เริ่มทำงาน เมื่อฉันเห็นไอคอนสีเขียว ฉันเปิดเบราว์เซอร์ และไปที่ URL ที่รู้จักกันดี: https://msciab.duckdns.org/vnc.html หมายเหตุ นี่คือ URL ของฉัน เมื่อคุณสร้างชุดอุปกรณ์ คุณจะต้องสร้าง URL เฉพาะของคุณ

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

หน้าจอ2

เมื่อโหลดแล้ว ระบบจะต้อนรับคุณด้วยเว็บไคลเอ็นต์ Web VNC, NoVNC เพียงเข้าสู่ระบบและเดสก์ท็อปจะปรากฏขึ้น ฉันใช้เดสก์ท็อปขนาดเล็กโดยตั้งใจ เพียงแค่เมนูที่มีแอปพลิเคชัน และความหรูหราเพียงอย่างเดียวของฉันคือเดสก์ท็อปเสมือน (เพราะฉันเปิดหน้าต่างจำนวนมากเมื่อฉันพัฒนา) สำหรับเมล ฉันยังคงพึ่งพาแอปพลิเคชันอื่น ทุกวันนี้ส่วนใหญ่เป็นแท็บเบราว์เซอร์อื่นๆ

ในเครื่องเสมือน ฉันมีสิ่งที่จำเป็นในการพัฒนาแอปพลิเคชันบิ๊กดาต้า ก่อนอื่นต้องมี IDE ในบิลด์ ฉันใช้ IntelliJ Idea community edition นอกจากนี้ยังมีเครื่องมือสร้าง SBT และ Scala REPL, Ammonite

หน้าจอ3

อย่างไรก็ตาม คุณลักษณะหลักของสภาพแวดล้อมนี้คือบริการที่ปรับใช้เป็นคอนเทนเนอร์ในเครื่องเสมือนเดียวกัน โดยเฉพาะอย่างยิ่ง ฉันมี:

  • Zeppelin เว็บโน้ตบุ๊กสำหรับใช้รหัส Scala ได้ทันทีและทำการวิเคราะห์ข้อมูล ( http://zeppelin:8080 )
  • Spark Job Server เพื่อดำเนินการและปรับใช้งาน spark ด้วยอินเทอร์เฟซ Rest ( http://sparkjobserver:8080 )
  • อินสแตนซ์ของ Hadoop สำหรับจัดเก็บและดึงข้อมูลจาก HDFS ( http://hadoop:50070 )

โปรดทราบว่า URL เหล่านี้ได้รับการแก้ไขแล้ว แต่สามารถเข้าถึงได้ภายในสภาพแวดล้อมเสมือน คุณสามารถดูอินเทอร์เฟซเว็บของพวกเขาได้ในภาพหน้าจอต่อไปนี้

หน้าจอ4

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

สุดท้ายแต่ไม่ท้ายสุด คุณมีเว็บเทอร์มินัลพร้อมใช้งาน เพียงเข้าถึง URL ของคุณด้วย HTTPS แล้วคุณจะได้รับการต้อนรับด้วยเทอร์มินัลในหน้าเว็บ

หน้าจอ5

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

วิธีตั้งค่าอินสแตนซ์ของคุณ

คุณชอบสิ่งนี้จนถึงตอนนี้และคุณต้องการอินสแตนซ์ของคุณหรือไม่? เป็นเรื่องง่ายและราคาถูก คุณสามารถหาซื้อได้ในราคาเครื่องเสมือนบน Amazon Web Services บวกกับพื้นที่จัดเก็บ ชุดอุปกรณ์ในการกำหนดค่าปัจจุบันต้องใช้ RAM ขนาด 4GB เพื่อให้บริการทั้งหมดทำงาน หากคุณระมัดระวังในการใช้เครื่องเสมือนเมื่อจำเป็นเท่านั้น และคุณทำงาน 160 ชั่วโมงต่อเดือน เครื่องเสมือนที่อัตราปัจจุบันจะมีค่าใช้จ่าย 160 x 0.052 ดอลลาร์หรือ 8 ดอลลาร์ต่อเดือน คุณต้องเพิ่มค่าใช้จ่ายในการจัดเก็บ ฉันใช้ประมาณ 30GB แต่ทุกอย่างสามารถเก็บไว้ได้ต่ำกว่า 10 ดอลลาร์

อย่างไรก็ตาม บอทนี้รวมค่าใช้จ่ายของบัญชี Dropbox (Pro) (ในที่สุด) แล้ว หากคุณต้องการสำรองข้อมูลโค้ดมากกว่า 2GB ซึ่งมีค่าใช้จ่ายอีก 15 เหรียญต่อเดือน แต่ให้ความปลอดภัยที่สำคัญสำหรับข้อมูลของคุณ นอกจากนี้ คุณจะต้องมีที่เก็บส่วนตัว ไม่ว่าจะเป็น GitHub แบบชำระเงินหรือบริการอื่น เช่น Bitbucket ซึ่งมีที่เก็บส่วนตัวฟรี

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

เรามาดูวิธีการทำการตั้งค่าทั้งหมดกัน

ข้อกำหนดเบื้องต้น

ก่อนเริ่มสร้างเครื่องเสมือน คุณต้องลงทะเบียนกับบริการสี่อย่างต่อไปนี้:

  • บริการเว็บอเมซอน
  • DuckDNS
  • ดรอปบ็อกซ์
  • มาเข้ารหัสกันเถอะ

หนึ่งเดียวที่คุณต้องการบัตรเครดิตของคุณคือ Amazon Web Services DuckDns นั้นฟรีทั้งหมด ในขณะที่ DropBox ให้พื้นที่เก็บข้อมูลฟรี 2GB แก่คุณ ซึ่งเพียงพอสำหรับงานหลายอย่าง Let's Encrypt นั้นฟรีเช่นกัน และจะใช้ภายในเมื่อคุณสร้างอิมเมจเพื่อลงนามในใบรับรองของคุณ นอกจากนี้ ฉันยังแนะนำบริการโฮสต์พื้นที่เก็บข้อมูล เช่น GitHub หรือ Bitbucket หากคุณต้องการจัดเก็บรหัส อย่างไรก็ตาม ไม่จำเป็นสำหรับการตั้งค่า

ในการเริ่มต้น ให้ไปที่ที่เก็บ GitHub BigDataDevKit

หน้าจอ6

เลื่อนหน้าและคัดลอกสคริปต์ที่แสดงในภาพในโปรแกรมแก้ไขข้อความที่คุณเลือก:

หน้าจอ7

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

พารามิเตอร์ PASSWORD คือรหัสผ่านที่คุณเลือกเพื่อเข้าถึงเครื่องเสมือนผ่านเว็บอินเตอร์เฟส พารามิเตอร์ EMAIL คืออีเมลของคุณและจะใช้เมื่อคุณลงทะเบียนใบรับรอง SSL คุณจะต้องระบุอีเมลและเป็นข้อกำหนดเพียงอย่างเดียวสำหรับการรับใบรับรอง SSL ฟรีจาก Let's Encrypt

หากต้องการรับค่าสำหรับ TOKEN และ HOST ให้ไปที่ไซต์ DuckDNS และเข้าสู่ระบบ คุณจะต้องเลือกชื่อโฮสต์ที่ไม่ได้ใช้

หน้าจอ8

ดูภาพเพื่อดูว่าคุณต้องคัดลอกโทเค็นที่ไหนและคุณต้องเพิ่มชื่อโฮสต์ของคุณที่ไหน คุณต้องคลิกที่ปุ่ม "เพิ่มโดเมน" เพื่อจองชื่อโฮสต์

การกำหนดค่าอินสแตนซ์ของคุณ

สมมติว่าคุณมีพารามิเตอร์ทั้งหมดและแก้ไขสคริปต์แล้ว คุณก็พร้อมที่จะเปิดใช้อินสแตนซ์ของคุณ เข้าสู่ระบบอินเทอร์เฟซการจัดการ Amazon Web Services ไปที่แผงอินสแตนซ์ EC2 แล้วคลิก "เปิดใช้อินสแตนซ์"

หน้าจอ 9

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

หน้าจอ10

ในหน้าจอที่สอง เลือกประเภทอินสแตนซ์ ด้วยขนาดของซอฟต์แวร์ที่ทำงานอยู่ มีหลายบริการและคุณต้องการหน่วยความจำอย่างน้อย 4GB ดังนั้น เราขอแนะนำให้คุณเลือกอินสแตนซ์ t2.medium คุณสามารถตัดมันออกได้โดยใช้ t2.small หากคุณปิดบริการบางอย่าง หรือแม้แต่ ไมโคร หากคุณต้องการเพียงเดสก์ท็อป

หน้าจอ 11

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

หน้าจอ12

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

หน้าจอ13

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

เมื่อกำหนดค่าเสร็จแล้ว คุณสามารถเปิดใช้อินสแตนซ์ได้ คุณจะสังเกตเห็นว่าการเริ่มต้นอาจใช้เวลาสองสามนาทีในครั้งแรกเนื่องจากสคริปต์การเริ่มต้นทำงาน และมันจะทำงานที่ใช้เวลานาน เช่น การสร้างใบรับรอง HTTPS ด้วย Let's Encrypt

หน้าจอ14

เมื่อคุณเห็นคอนโซลการจัดการ "ทำงาน" พร้อมการยืนยันในที่สุด และไม่ได้ "กำลังเริ่มต้น" อีกต่อไป แสดงว่าคุณพร้อมแล้วที่จะไป

สมมติว่าพารามิเตอร์ทั้งหมดถูกต้อง คุณสามารถไปที่ https://YOURHOST.duckdns.org

แทนที่ YOURHOST ด้วยชื่อโฮสต์ที่คุณเลือก แต่อย่าลืมว่านี่คือไซต์ HTTPS ไม่ใช่ HTTP ดังนั้นการเชื่อมต่อกับเซิร์ฟเวอร์ของคุณจึงถูกเข้ารหัส ดังนั้นคุณต้องเขียน https// ใน URL ไซต์จะแสดงใบรับรองที่ถูกต้องสำหรับ Let's Encrypt หากมีปัญหาในการรับใบรับรอง สคริปต์การเริ่มต้นจะสร้างใบรับรองที่ลงนามเอง คุณจะยังสามารถเชื่อมต่อกับการเชื่อมต่อที่เข้ารหัสได้ แต่เบราว์เซอร์จะเตือนคุณว่าเป็นไซต์ที่ไม่รู้จัก และการเชื่อมต่อนั้นไม่ปลอดภัย มันไม่ควรเกิดขึ้น แต่คุณไม่เคยรู้

หน้าจอ15

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

เมื่อเข้าสู่ระบบแล้ว คุณจะมีเครื่องเสมือนที่บู๊ตแล้ว ซึ่งรวมถึง Docker และสินค้าอื่นๆ เช่น Nginx Frontend, Git และ Butterfly Web Terminal ตอนนี้คุณสามารถตั้งค่าให้เสร็จสมบูรณ์ได้โดยการสร้างอิมเมจ Docker สำหรับสภาพแวดล้อมการพัฒนาของคุณ

ถัดไป พิมพ์คำสั่งต่อไปนี้:

 git clone https://github.com/sciabarra/BigDataDevKit cd BigDataDevKit sh build.sh

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

เมื่อสร้างเสร็จแล้ว คุณยังสามารถติดตั้ง Dropbox ด้วยคำสั่งต่อไปนี้:

 /app/.dropbox-dist/dropboxd

ระบบจะแสดงลิงค์ที่คุณต้องคลิกเพื่อเปิดใช้งาน Dropbox คุณต้องลงชื่อเข้าใช้ Dropbox และทำเสร็จแล้ว สิ่งที่คุณใส่ในโฟลเดอร์ Dropbox จะซิงค์โดยอัตโนมัติระหว่างอินสแตนซ์ Dropbox ทั้งหมดของคุณ

เมื่อเสร็จแล้ว คุณสามารถรีสตาร์ทเครื่องเสมือน และเข้าถึงสภาพแวดล้อมของคุณได้ที่ https://YOURHOST.dyndns.org/vnc.html URL

คุณสามารถหยุดเครื่องและรีสตาร์ทเครื่องได้เมื่อคุณกลับมาทำงานต่อ URL การเข้าถึงยังคงเหมือนเดิม ด้วยวิธีนี้ คุณจะจ่ายเฉพาะเวลาที่คุณใช้มัน บวกกับค่าบริการเพิ่มเติมรายเดือนสำหรับพื้นที่เก็บข้อมูลที่ใช้แล้ว

การรักษาข้อมูลของคุณ

การสนทนาต่อไปนี้ต้องการความรู้เกี่ยวกับวิธีการทำงานของ Docker และ Amazon หากคุณไม่ต้องการเข้าใจรายละเอียด โปรดจำไว้ตามกฎง่ายๆ: ในเครื่องเสมือน มีโฟลเดอร์ /app/Dropbox ที่พร้อมใช้งาน สิ่งที่คุณวางใน /app/Dropbox จะถูกเก็บรักษาไว้ และสิ่งอื่น ๆ จะถูกใช้แล้วทิ้งและ สามารถออกไปได้ เพื่อปรับปรุงความปลอดภัยให้ดียิ่งขึ้น ให้เก็บรหัสอันมีค่าของคุณไว้ในระบบควบคุมเวอร์ชัน

ตอนนี้ถ้าคุณต้องการเข้าใจสิ่งนี้อ่านต่อ หากคุณทำตามคำแนะนำของฉันในการสร้างเครื่องเสมือน เครื่องเสมือนจะได้รับการปกป้องจากการยุติ ดังนั้นคุณจึงไม่สามารถทำลายเครื่องเสมือนได้โดยไม่ได้ตั้งใจ หากคุณตัดสินใจที่จะยุติโดยชัดแจ้ง โวลุ่มหลักจะถูกทำลาย อิมเมจ Docker ทั้งหมดจะหายไป รวมถึงการเปลี่ยนแปลงทั้งหมดที่คุณทำ

อย่างไรก็ตาม เนื่องจากโฟลเดอร์ /app/Dropbox ถูกต่อเชื่อมเป็น Docker Volume สำหรับคอนเทนเนอร์ จึงไม่เป็นส่วนหนึ่งของอิมเมจ Docker ในเครื่องเสมือน โฟลเดอร์ /app จะถูกติดตั้งใน Amazon Volume ที่คุณสร้างขึ้น ซึ่งจะไม่ถูกทำลายเช่นกัน แม้ว่าคุณจะยุติเครื่องเสมือนโดยชัดแจ้ง หากต้องการลบโวลุ่ม คุณต้องลบออกโดยชัดแจ้ง

อย่าสับสนระหว่างโวลุ่ม Docker ซึ่งเป็นเอนทิตีเชิงตรรกะของ Docker กับ Amazon Volumes ซึ่งเป็นเอนทิตีที่ค่อนข้างจริง สิ่งที่เกิดขึ้นคือโวลุ่ม /app/Dropbox Docker วางอยู่ภายในโวลุ่ม /app Amazon

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

ดังนั้น หากคุณวางข้อมูลของคุณไว้ในระบบควบคุมเวอร์ชันภายใต้โฟลเดอร์ Dropbox ข้อมูลของคุณจะหายไป ทั้งหมดนี้ต้องเกิดขึ้น:

  • คุณยุติเครื่องเสมือนของคุณโดยชัดแจ้ง
  • คุณลบไดรฟ์ข้อมูลออกจากเครื่องเสมือนอย่างชัดแจ้ง
  • คุณลบข้อมูลออกจาก Dropbox รวมถึงประวัติโดยชัดแจ้ง
  • คุณลบข้อมูลออกจากระบบควบคุมเวอร์ชันอย่างชัดเจน

ฉันหวังว่าข้อมูลของคุณจะปลอดภัยเพียงพอ

ฉันเก็บเครื่องเสมือนไว้สำหรับแต่ละโครงการ และเมื่อฉันทำเสร็จ ฉันจะปิดเครื่องเสมือนที่ไม่ได้ใช้ แน่นอน ฉันมีรหัสทั้งหมดของฉันบน GitHub และสำรองข้อมูลไว้ใน Dropbox นอกจากนี้ เมื่อฉันหยุดทำงานในโครงการ ฉันจะถ่ายภาพสแน็ปช็อตของบล็อก Amazon Web Services ก่อนที่จะลบเครื่องเสมือนทั้งหมด ด้วยวิธีนี้ เมื่อใดก็ตามที่โปรเจ็กต์กลับมาทำงานต่อ เช่น สำหรับการบำรุงรักษา ทั้งหมดที่ฉันต้องทำคือเริ่มเครื่องเสมือนใหม่โดยใช้สแน็ปช็อต ข้อมูลทั้งหมดของฉันกลับเข้าที่ และฉันสามารถทำงานต่อได้

เพิ่มประสิทธิภาพการเข้าถึง

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

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

บทสรุป

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

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