Dezvoltare pentru cloud în cloud: dezvoltare BigData cu Docker în AWS
Publicat: 2022-03-11De ce ai putea avea nevoie de el?
Sunt dezvoltator și lucrez zilnic în medii de dezvoltare integrate (IDE), precum Intellij IDEA sau Eclipse. Aceste IDE-uri sunt aplicații desktop. De la apariția Google Documents, am văzut din ce în ce mai mulți oameni mutăndu-și munca de la versiunile desktop ale Word sau Excel în cloud folosind un echivalent online al unui procesor de text sau al unei aplicații de calcul.
Există motive evidente pentru a folosi un nor pentru a vă păstra munca. Astăzi, în comparație cu aplicațiile desktop tradiționale de afaceri, unele aplicații web nu au un dezavantaj semnificativ în funcționalități. Conținutul este disponibil oriunde există un browser web, iar în prezent, acesta este aproape peste tot. Colaborarea și partajarea sunt mai ușoare, iar pierderea fișierelor este mai puțin probabilă.
Din păcate, aceste avantaje cloud nu sunt la fel de comune în lumea dezvoltării de software precum este pentru aplicațiile de afaceri. Există unele încercări de a oferi un IDE online, dar acestea nu sunt nicăieri aproape de IDE-urile tradiționale.
Acesta este un paradox; în timp ce suntem încă legați de desktopul nostru pentru codificarea zilnică, software-ul este acum generat pe mai multe servere. Dezvoltatorii trebuie să lucreze cu lucruri pe care nu le mai pot păstra pe computerul lor. Într-adevăr, laptopurile nu își mai măresc puterea de procesare; a avea mai mult de 16 GB de RAM pe un laptop este rar și costisitor, iar dispozitivele mai noi, tabletele, de exemplu, au și mai puține.
Cu toate acestea, chiar dacă încă nu este posibil să înlocuiți aplicațiile desktop clasice pentru dezvoltarea de software, este posibil să mutați întregul desktop de dezvoltare în cloud . În ziua în care mi-am dat seama că nu mai era necesar să am tot software-ul pe laptop și observând disponibilitatea versiunii web a terminalelor și VNC, am mutat totul în cloud. În cele din urmă, am dezvoltat un kit de construcție pentru a crea acel mediu într-un mod automat.
În acest articol vă prezint un set de scripturi pentru a construi un mediu de dezvoltare bazat pe cloud pentru aplicații Scala și Big Data, care rulează cu Docker în Amazon AWS și care cuprinde un desktop accesibil pe web cu IntelliJ IDE, Spark, Hadoop și Zeppelin ca servicii. , precum și instrumente de linie de comandă, cum ar fi un SSH, SBT și Ammonit bazat pe web. Kitul este disponibil gratuit pe GitHub și descriu aici procedura de utilizare pentru a vă construi instanța. Vă puteți construi mediul și îl puteți personaliza în funcție de nevoile dvs. Nu ar trebui să vă ia mai mult de 10 minute pentru a-l pune în funcțiune.
Ce este în „BigDataDevKit”?
Scopul meu principal în dezvoltarea kit-ului a fost ca mediul meu de dezvoltare să fie ceva pe care să-l pot declanșa pur și simplu, cu toate serviciile și serverele cu care lucrez, și apoi să le distrug atunci când nu mai sunt necesare. Acest lucru este deosebit de important atunci când lucrați la diferite proiecte, unele dintre ele implicând un număr mare de servere și servicii, ca atunci când lucrați la proiecte de date mari.
Mediul meu ideal bazat pe cloud ar trebui:
- Includeți toate instrumentele obișnuite de dezvoltare, cel mai important un IDE grafic.
- Aveți la îndemână serverele și serviciile de care am nevoie.
- Creați ușor și rapid de la zero și extensibil pentru a adăuga mai multe servicii.
- Să fie complet accesibil folosind doar un browser web.
- Opțional, permiteți accesul cu clienți specializați (client VNC și client SSH).
Folosind infrastructura și software-ul cloud modern, puterea browserelor moderne, disponibilitatea pe scară largă a broadbandului și neprețuitul Docker, am creat un mediu de dezvoltare pentru Scala și dezvoltarea de date mari care, în bine, mi-a înlocuit laptopul de dezvoltare.
În prezent, pot lucra oricând, fie de pe un MacBook Pro, o tabletă Surface, fie chiar de pe un iPad (cu tastatură), deși, desigur, ultima variantă nu este ideală. Toate aceste dispozitive sunt doar clienți; desktopul și toate serverele sunt în cloud.
Mediul meu actual este construit folosind următoarele servicii online:
- Amazon Web Services pentru servere.
- GitHub pentru stocarea codului.
- Dropbox pentru a salva fișiere.
De asemenea, folosesc câteva servicii gratuite, cum ar fi DuckDns pentru adrese IP dinamice și Let's encrypt pentru a obține un certificat SSL gratuit.
În acest mediu, am în prezent:
- Un desktop grafic cu idee Intellij, accesibil printr-un browser web.
- Instrumente de linie de comandă accesibile web, cum ar fi SBT și Ammonite.
- Hadoop pentru stocarea fișierelor și rularea joburilor MapReduce.
- Spark Job Server pentru joburi programate.
- Zeppelin pentru un notebook bazat pe web.
Cel mai important, accesul web este complet criptat cu HTTPS, atât pentru VNC, cât și pentru SSH bazat pe web, și există mai multe măsuri de protecție pentru a evita pierderea datelor, o preocupare care este, desigur, importantă atunci când nu „dețineți” conținutul de pe hard disk-ul tău fizic. Rețineți că obținerea unei copii a întregii lucrări pe computer este automată și foarte rapidă. Dacă pierzi totul pentru că cineva ți-a furat parola, oricum ai o copie pe computer, atâta timp cât ai configurat totul corect.
Utilizarea unui mediu de dezvoltare bazat pe web cu AWS și Docker
Acum, să începem să descriem cum funcționează mediul. Când încep să lucrez dimineața, primul lucru este să mă conectez la consola Amazon Web Services unde îmi văd toate instanțele. De obicei, am multe instanțe de dezvoltare configurate pentru diferite proiecte și le păstrez pe cele neutilizate dezactivate pentru a economisi facturarea. La urma urmei, pot lucra doar la un singur proiect la un moment dat. (Ei bine, uneori lucrez la două.)
Așadar, selectez instanța pe care o vreau, o pornesc, aștept puțin sau merg să iau o ceașcă de cafea. Nu este atât de diferit de a porni computerul. De obicei, este nevoie de câteva secunde pentru ca instanța să funcționeze. Odată ce văd pictograma verde, deschid un browser și merg la o adresă URL bine cunoscută: https://msciab.duckdns.org/vnc.html . Rețineți, aceasta este adresa mea URL; când creați un kit, veți crea adresa URL unică.
Deoarece AWS atribuie un nou IP fiecărei mașini atunci când porniți, am configurat un serviciu DNS dinamic, astfel încât să puteți utiliza întotdeauna aceeași adresă URL pentru a vă accesa serverul, chiar dacă îl opriți și reporniți. Puteți chiar să-l marcați în browser. În plus, folosesc HTTPS, cu chei valide pentru a obține o protecție totală a muncii mele de sniffer, în cazul în care am nevoie să gestionez parolele și alte date sensibile.
Odată încărcat, sistemul vă va întâmpina cu un client web Web VNC, NoVNC. Pur și simplu conectați-vă și va apărea un desktop. Folosesc un desktop minimal, intenționat, doar un meniu cu aplicații, iar singurul meu lux este un desktop virtual (din moment ce deschid o mulțime de ferestre când dezvolt). Pentru e-mail, mă bazez în continuare pe alte aplicații, în prezent mai ales pe alte file ale browserului.
În mașina virtuală, am ceea ce îmi trebuie pentru a dezvolta aplicații de date mari. În primul rând, există un IDE. În build, folosesc ediția comunității IntelliJ Idea. De asemenea, există instrumentul de construcție SBT și un Scala REPL, Amonit.
Cu toate acestea, caracteristicile cheie ale acestui mediu sunt serviciile implementate ca containere în aceeași mașină virtuală. În special, am:
- Zeppelin, blocnotesul web pentru utilizarea codului Scala din mers și efectuarea analizei datelor (
http://zeppelin:8080) - Serverul de joburi Spark, pentru a executa și implementa joburi spark cu o interfață Rest (
http://sparkjobserver:8080). - O instanță de Hadoop pentru stocarea și preluarea datelor din HDFS (
http://hadoop:50070).
Rețineți că aceste adrese URL sunt fixe, dar sunt accesibile în mediul virtual. Puteți vedea interfețele lor web în următoarea captură de ecran.
Fiecare serviciu rulează într-un container Docker separat. Fără a deveni prea tehnic, poți să te gândești la asta ca la trei servere separate în interiorul mașinii tale virtuale. Frumusețea utilizării Docker este că puteți adăuga servicii și chiar adăuga două sau trei mașini virtuale. Folosind containerele Amazon, vă puteți scala mediul cu ușurință.
Nu în ultimul rând, aveți un terminal web disponibil. Pur și simplu accesați adresa URL cu HTTPS și veți fi întâmpinat cu un terminal într-o pagină web.
În captura de ecran de mai sus puteți vedea că enumerez containerele, care sunt cele trei servere plus desktopul. Acest shell de linie de comandă vă oferă acces la mașina virtuală care deține containerele, permițându-vă să le gestionați. Este ca și cum serverele dvs. sunt „în Matrix” (virtualizate în containere), dar acest shell vă oferă o evadare în afara „Matricei” pentru a gestiona serverele și desktopul. De aici, puteți reporni containerele, puteți accesa sistemele de fișiere ale acestora și puteți efectua alte manipulări permise de Docker. Nu voi discuta în detaliu despre Docker aici, dar există o cantitate mare de documentație pe site-ul web Docker.
Cum să vă configurați instanța
Îți place asta până acum și vrei exemplul tău? Este ușor și ieftin. Îl puteți obține doar pentru costul mașinii virtuale de pe Amazon Web Services, plus spațiul de stocare. Kitul din configurația actuală necesită 4 GB de RAM pentru a rula toate serviciile. Dacă aveți grijă să utilizați mașina virtuală numai atunci când aveți nevoie de ea și lucrați, să zicem, 160 de ore pe lună, o mașină virtuală la tarifele actuale va costa 160 x 0,052 USD sau 8 USD pe lună. Trebuie să adăugați costul stocării. Folosesc aproximativ 30 GB, dar totul poate fi păstrat sub 10 USD.
Cu toate acestea, acest bot include costul unui (eventual) cont Dropbox (Pro), în cazul în care doriți să faceți o copie de rezervă a mai mult de 2 GB de cod. Acesta costă încă 15 USD pe lună, dar oferă o siguranță importantă pentru datele dvs. De asemenea, veți avea nevoie de un depozit privat, fie un GitHub plătit, fie un alt serviciu, cum ar fi Bitbucket, care oferă depozite private gratuite.
Vreau să subliniez că dacă îl folosești doar când ai nevoie, este mai ieftin decât un server dedicat. Da, tot ce este menționat aici poate fi configurat pe un server fizic, dar din moment ce lucrez cu date mari am nevoie de multe alte servicii AWS, așa că cred că este logic să avem totul în același loc.
Să vedem cum să facem toată configurarea.
Cerințe preliminare
Înainte de a începe să construiți o mașină virtuală, trebuie să vă înregistrați la următoarele patru servicii:
- Servicii web Amazon.
- DuckDNS.
- Dropbox.
- Să criptăm.
Singurul pentru care aveți nevoie de cardul dvs. de credit este Amazon Web Services. DuckDns este complet gratuit, în timp ce DropBox vă oferă 2 GB de spațiu de stocare gratuit, care poate fi suficient pentru multe sarcini. Let's Encrypt este, de asemenea, gratuit și este folosit intern atunci când creați imaginea pentru a vă semna certificatul. Pe lângă acestea, vă recomand și un serviciu de găzduire a depozitelor, cum ar fi GitHub sau Bitbucket, dacă doriți să stocați codul, însă nu este necesar pentru configurare.

Pentru a începe, navigați la depozitul GitHub BigDataDevKit.
Derulați pagina și copiați scriptul afișat în imagine în editorul de text ales:
Acest script este necesar pentru a porni imaginea. Trebuie să îl modificați și să furnizați niște valori parametrilor. Schimbați cu atenție textul dintre ghilimele. Rețineți că nu puteți utiliza caractere precum ghilimele în sine, bara oblică inversă sau semnul dolarului în parolă, decât dacă le citați. Această problemă este relevantă doar pentru parolă. Dacă doriți să jucați în siguranță, evitați un citat, semnul dolarului sau barele oblice inverse.
Parametrul PASSWORD este o parolă pe care o alegeți pentru a accesa mașina virtuală printr-o interfață web. Parametrul EMAIL este e-mailul dvs. și va fi utilizat atunci când înregistrați un certificat SSL. Vi se va solicita să furnizați e-mailul și este singura cerință pentru obținerea unui certificat SSL gratuit de la Let's Encrypt.
Pentru a obține valorile pentru TOKEN și HOST , accesați site-ul DuckDNS și conectați-vă. Va trebui să alegeți un nume de gazdă neutilizat.
Priviți imaginea pentru a vedea unde trebuie să copiați jetonul și unde trebuie să adăugați numele de gazdă. Trebuie să faceți clic pe butonul „adăugați domeniu” pentru a rezerva numele de gazdă.
Configurarea instanței dvs
Presupunând că aveți toți parametrii și ați editat scriptul, sunteți gata să lansați instanța. Conectați-vă la interfața de gestionare a Amazon Web Services, accesați panoul Instanțe EC2 și faceți clic pe „Lansare instanță”.
În primul ecran, veți alege o imagine. Scriptul este construit în jurul Amazon Linux și nu există alte opțiuni disponibile. Selectați Amazon Linux, prima opțiune din lista QuickStart.
Pe al doilea ecran, alegeți tipul instanței. Având în vedere dimensiunea software-ului care rulează, există mai multe servicii și aveți nevoie de cel puțin 4GB de memorie, așa că vă recomand să selectați instanța t2.medium . Puteți să-l tăiați, folosind t2.small dacă închideți unele servicii sau chiar micro dacă doriți doar desktop.
Pe al treilea ecran, faceți clic pe „Detalii avansate” și inserați scriptul pe care l-ați configurat la pasul anterior. De asemenea, vă recomand să activați protecția împotriva rezilierii, astfel încât cu o reziliere accidentală să nu vă pierdeți toată munca.
Următorul pas este configurarea stocării. Valoarea implicită pentru o instanță este de 8 GB, ceea ce nu este suficient pentru a conține toate imaginile pe care le vom construi. Recomand să-l măriți la 20 GB. De asemenea, deși nu este necesar, vă sugerez un alt dispozitiv bloc de cel puțin 10 GB. Scriptul va monta cel de-al doilea dispozitiv bloc ca un folder de date. Puteți face un instantaneu al conținutului său, puteți încheia instanța, apoi o recreați utilizând instantaneul și recuperând toată munca. În plus, un dispozitiv de blocare personalizat nu se pierde atunci când închideți instanța, așa că aveți o protecție dublă împotriva pierderii accidentale a datelor. Pentru a vă crește și mai mult siguranța, puteți să vă copiați automat datele cu Dropbox.
Al cincilea pas este denumirea instanței. Alege-l pe al tău. Al șaselea pas oferă o modalitate de a configura firewall-ul. În mod implicit, este disponibil doar SSH, dar avem nevoie și de HTTPS, așa că nu uitați să adăugați și o regulă care deschide HTTPS. Ați putea deschide HTTPS pentru întreaga lume, dar este mai bine dacă este doar pentru IP-ul dvs. pentru a împiedica alții să vă acceseze desktopul și shell-ul, deși acesta este încă protejat cu o parolă.
Odată terminată cu această ultimă configurație, puteți lansa instanța. Veți observa că inițializarea poate dura câteva minute prima dată de când scriptul de inițializare rulează și va face, de asemenea, unele sarcini lungi, cum ar fi generarea unui certificat HTTPS cu Let's Encrypt.
Când vedeți în cele din urmă consola de management „rulând” cu o confirmare și nu se mai „inițializează”, sunteți gata să plecați.
Presupunând că toți parametrii sunt corecti, puteți naviga la https://YOURHOST.duckdns.org .
Înlocuiește YOURHOST cu numele de gazdă pe care l-ai ales, dar nu uita că este un site HTTPS, nu HTTP, așa că conexiunea ta la server este criptată, așa că trebuie să scrii https// în URL. Site-ul va prezenta și un certificat valabil pentru Let's Encrypt. Dacă există probleme la obținerea certificatului, scriptul de inițializare va genera un certificat autosemnat. Veți putea în continuare să vă conectați cu o conexiune criptată, dar browserul vă va avertiza că este un site necunoscut, iar conexiunile sunt nesigure. Nu ar trebui să se întâmple, dar nu se știe niciodată.
Presupunând că totul funcționează, apoi accesați terminalul web, Butterfly. Vă puteți autentifica folosind app utilizator și parola pe care ați introdus-o în scriptul de configurare.
Odată conectat, aveți o mașină virtuală bootstrap, care include și Docker și alte bunătăți, cum ar fi un Nginx Frontend, Git și Butterfly Web Terminal. Acum, puteți finaliza configurarea creând imaginile Docker pentru mediul dvs. de dezvoltare.
Apoi, tastați următoarele comenzi:
git clone https://github.com/sciabarra/BigDataDevKit cd BigDataDevKit sh build.shUltima comandă vă va cere și să introduceți o parolă pentru accesul la Desktop. Odată terminat, va începe să construiască imaginile. Rețineți că construirea va dura aproximativ 10 minute, dar puteți vedea ce se întâmplă, deoarece totul este afișat pe ecran.
Odată ce construirea este completă, puteți instala și Dropbox cu următoarea comandă:
/app/.dropbox-dist/dropboxdSistemul va afișa un link pe care trebuie să faceți clic pentru a activa Dropbox. Trebuie să vă conectați la Dropbox și apoi ați terminat. Orice ați pune în folderul Dropbox este sincronizat automat între toate instanțele dvs. Dropbox.
Odată terminat, puteți reporni mașina virtuală și puteți accesa mediul dvs. la adresa URL https://YOURHOST.dyndns.org/vnc.html .
Puteți opri aparatul și reporniți-l când vă reluați lucrul. Adresa URL de acces rămâne aceeași. În acest fel, veți plăti doar pentru timpul în care îl utilizați, plus un plus lunar pentru depozitul folosit.
Păstrarea datelor dvs
Următoarea discuție necesită cunoștințe despre modul în care funcționează Docker și Amazon. Dacă nu doriți să înțelegeți detaliile, țineți cont de o regulă simplă: în mașina virtuală, există un folder /app/Dropbox disponibil, orice ați plasat în /app/Dropbox este păstrat și totul este de unică folosință. poate pleca. Pentru a îmbunătăți și mai mult securitatea, stocați și codul prețios într-un sistem de control al versiunilor.
Acum, dacă vrei să înțelegi asta, citește mai departe. Dacă mi-ați urmat instrucțiunile la crearea mașinii virtuale, mașina virtuală este protejată de terminare, așa că nu o puteți distruge accidental. Dacă decideți în mod expres să îl opriți, volumul principal va fi distrus. Toate imaginile Docker se vor pierde, inclusiv toate modificările pe care le-ați făcut.
Cu toate acestea, deoarece folderul /app/Dropbox este montat ca volum Docker pentru containere, nu face parte din imaginile Docker. În mașina virtuală, folderul /app este montat în volumul Amazon pe care l-ați creat, care, de asemenea, nu este distrus chiar și atunci când opriți în mod expres mașina virtuală. Pentru a elimina volumul, trebuie să-l eliminați în mod expres.
Nu confundați volumele Docker, care sunt o entitate logică Docker, cu Amazon Volumes, care este oarecum o entitate fizică. Ce se întâmplă este că volumul /app/Dropbox Docker este plasat în interiorul volumului /app Amazon.
Volumul Amazon nu este distrus automat atunci când închideți mașina virtuală, așa că orice este plasat în ea va fi păstrat, până când distrugeți și volumul în mod expres. În plus, orice ai pune în volumul Docker este stocat în afara containerului, deci nu este distrus atunci când containerul este distrus. Dacă ați activat Dropbox, așa cum este recomandat, tot conținutul dvs. este copiat pe serverele Dropbox și pe hard disk dacă sincronizați Dropbox cu computerele dvs. De asemenea, se recomandă ca codul sursă să fie stocat într-un sistem de control al versiunilor.
Deci, dacă vă plasați lucrurile în sistemul de control al versiunilor sub folderul Dropbox, pentru a vă pierde datele trebuie să se întâmple toate acestea:
- Închideți în mod expres mașina dvs. virtuală.
- Eliminați în mod expres volumul de date din mașina virtuală.
- Eliminați în mod expres datele din Dropbox, inclusiv istoricul.
- Eliminați în mod expres datele din sistemul de control al versiunilor.
Sper că datele dvs. sunt suficient de sigure.
Păstrez o mașină virtuală pentru fiecare proiect și, când termin, țin mașinile virtuale neutilizate oprite. Desigur, am tot codul meu pe GitHub și făcut backup în Dropbox. În plus, când nu mai lucrez la un proiect, fac un instantaneu al blocului Amazon Web Services înainte de a elimina complet mașina virtuală. În acest fel, ori de câte ori se reia un proiect, de exemplu pentru întreținere, tot ce trebuie să fac este să pornesc o nouă mașină virtuală folosind instantaneul. Toate datele mele revin la locul lor și pot relua lucrul.
Optimizarea accesului
În primul rând, dacă aveți acces direct la internet, nu mediat de un proxy, puteți utiliza clienți SSH și VNC nativi. Accesul direct SSH este important dacă trebuie să copiați fișiere în și din mașina virtuală. Cu toate acestea, pentru partajarea fișierelor, ar trebui să considerați Dropbox ca o alternativă mai simplă.
Accesul web VNC este de neprețuit, dar uneori poate fi mai lent decât un client nativ. Aveți acces la serverul VNC de pe mașina virtuală folosind portul 5900. Trebuie să îl deschideți în mod expres deoarece este închis implicit. Îți recomand să-l deschizi doar la adresa ta IP, deoarece internetul este plin de „roboți” care scanează internetul în căutarea unor servicii la care să se conecteze, iar VNC este o țintă frecventă a acelor roboți.
Concluzie
Acest articol explică cum puteți folosi tehnologia cloud modernă pentru a implementa un mediu de dezvoltare eficient. În timp ce o mașină din cloud nu poate înlocui complet computerul sau laptopul dvs. de lucru, este suficient de bună pentru a face munca de dezvoltare atunci când este important să aveți acces la IDE. Din experiența mea, cu conexiunile actuale la internet, este suficient de rapid pentru a lucra.
Fiind în cloud, accesul la server și manipularea este mai rapidă decât a le avea la nivel local. Puteți crește (sau micșora) rapid memoria, puteți activa un alt mediu, puteți crea o imagine și așa mai departe. Aveți un centru de date la îndemână și, atunci când lucrați cu proiecte mari de date, aveți nevoie de servicii robuste și de mult spațiu. Asta oferă cloud-ul.
