Jeg er utvikler og jobber hver dag i Integrated Development Environment (IDE: Integrated Development Enviroment), for eksempel Intellij IDEA eller Eclipse. Disse IDE-ene er stasjonære applikasjoner. Siden adventen av Google-dokumenter har jeg sett flere og flere mennesker flytte arbeidet sitt fra stasjonære versjoner av Word eller Excel til skyen ved hjelp av en online-ekvivalent av et tekstbehandlingsprogram eller regnearkprogram.
Det er åpenbare grunner til å bruke en sky for å redde arbeidet ditt. I dag, sammenlignet med tradisjonelle stasjonære forretningsapplikasjoner, har noen webapplikasjoner ikke en ulempe når det gjelder funksjonalitet. Innhold er tilgjengelig uansett hvor det er en nettleser, og i disse dager skjer det nesten overalt. Samarbeid og deling er enkelt, og tap av filer er mindre sannsynlig.
Dessverre er disse fordelene med skyen ikke like vanlig i utviklingen av programvare som for forretningsapplikasjoner. Det er noen forsøk på å tilby en online IDE, men de kommer ikke i nærheten av tradisjonelle IDEer.
Det er paradoksalt; mens vi fremdeles er knyttet til skrivebordet vårt for daglig planlegging, har programvaren nå blitt generert på flere servere. Utviklere trenger å jobbe med ting de ikke lenger kan ha på datamaskinene sine. Selvfølgelig øker ikke bærbare datamaskiner prosessorkraften lenger; Å ha mer enn 16 GB RAM på en bærbar datamaskin er sjelden og dyrt, for ikke å nevne at nyere apparater, for eksempel nettbrett, har enda mindre minne.
Selv om det fremdeles ikke er mulig å erstatte de klassiske stasjonære applikasjonene for programvareutvikling, er det mulig flytt hele utviklingsskrivebordet til skyen . Dagen jeg oppdaget det, var det ikke lenger nødvendig å ha all programvaren min på den bærbare datamaskinen, og da jeg la merke til tilgjengeligheten av en nettversjon av terminaler og VNC, flyttet jeg alt til skyen. Etter hvert utviklet jeg et byggesett for å skape det miljøet automatisk.
I denne artikkelen presenterer jeg et sett med skript å bygge et skybasert utviklingsmiljø for Stige og big data-applikasjoner, henrettelser med Docker på Amazon AWS og komprimering av nettilgjengelig skrivebord med IntelliJ IDE, Spark, Hadoop og Zeppelin som tjenester, samt kommandolinjeverktøy som nettbasert SSH, SBT og Ammonite. Settet er fritt tilgjengelig på GitHub , Jeg beskriver også fremgangsmåten for å bruke den til konstruksjon av din forekomst. Du kan bygge miljøet ditt og tilpasse det etter dine spesielle behov. Det bør ikke ta mer enn 10 minutter å gjøre den klar til bruk.
Mitt hovedmål med å utvikle settet var at utviklingsmiljøet mitt skulle være noe jeg bare kunne aktivere med alle tjenestene og serverne jeg jobber med, for så å ødelegge dem når de ikke lenger er behov for. Dette er viktig, spesielt når du jobber med forskjellige prosjekter.
Mitt ideelle skybaserte miljø bør:
Ved å utnytte moderne skyprogramvare og infrastruktur, kraften til moderne søkemotorer, en rekke tilgjengeligheter for bredbånd og en uvurderlig Docker, skapte jeg et utviklingsmiljø for Scala og stor datautvikling som erstattet utviklingsbæreren min, for godt.
Foreløpig kan jeg jobbe når som helst, det være seg fra en MacBook Pro, en Surface Tablet eller til og med en iPad (med tastatur), selv om jeg innrømmer at det siste alternativet ikke er ideelt. Alle disse enhetene er i utgangspunktet klienter; skrivebordet og alle tjenestene er i skyen.
Mitt nåværende miljø er bygget med følgende online tjenester:
Jeg bruker også et par gratis tjenester, som DuckDns for IP-adresser og La oss kryptere for å få et gratis SSL-sertifikat.
For tiden har jeg i dette miljøet:
Men viktigst av alt, nettilgang er kryptert med HTTPS for både nettbasert VNC og SSH, og det er forskjellige livreddere for å unngå å miste data, en bekymring som selvfølgelig er viktig når du ikke 'eier' innholdet på. din fysiske harddisk. Husk at det er automatisk og veldig raskt å få en kopi av alt arbeidet ditt på datamaskinen. Hvis du mister alt fordi noen stjal passordet ditt, har du en kopi på datamaskinen din uansett, så lenge du har satt opp alt riktig.
La oss nå begynne å beskrive hvordan miljøet fungerer. Når jeg begynner å jobbe om morgenen, er det første jeg gjør å gå til Amazon Web Services-konsollen, der jeg ser alle mine forekomster. Vanligvis har jeg mange utviklingsforekomster konfigurert for forskjellige prosjekter, og jeg holder de som ikke er brukt slått av for å spare på regninger. Tross alt kan jeg bare jobbe med ett prosjekt om gangen. (Vel, noen ganger jobber jeg i to).
Så jeg velger det tilfellet jeg vil, starter det, venter en stund eller går på en kopp kaffe. Det gjør ikke så stor forskjell å slå på datamaskinen. Det tar vanligvis noen sekunder før forekomsten begynner å virke. Når jeg ser det grønne ikonet, åpner jeg søkemotoren og går til en kjent URL: https://msciab.duckdns.org/vnc.html
. Husk at dette er URL-en min; når du oppretter et sett, oppretter du din unike url.
Siden AWS tilordner en ny IP til hver maskin når du starter, setter jeg opp en dynamisk DNS-tjeneste, slik at du alltid kan bruke samme URL for å få tilgang til serveren din, selv når du stopper og starter den på nytt. Du kan også merke det i søkemotoren din. Videre bruker jeg HTTPS med gyldige nøkler for å beskytte arbeidet mitt så mye som mulig fra nysgjerrige øyne, i tilfelle jeg trenger å håndtere passord og andre sensitive data.
Når det er lastet opp, vil systemet ønske deg velkommen med en NoVNC, VNC webklient. Bare logg inn og et skrivebord vises. Jeg bruker skrivebordet veldig lite, med vilje, bare en meny med applikasjoner, og min eneste luksus er et virtuelt skrivebord (siden jeg åpner mange vinduer når jeg utvikler). For e-post er jeg fortsatt avhengig av andre applikasjoner, i dag for det meste andre faner i søkemotoren.
I den virtuelle maskinen har jeg det jeg trenger for å utvikle big data-applikasjoner. Først og fremst er det en IDE. Ved byggetiden bruker jeg IntelliJ-utgaven Idesamfunn . Det er også SBT-verktøyet og en Amonnite fra Scala RELP.
Hovedtrekkene i dette miljøet er imidlertid tjenester implementert som containere på samme virtuelle maskin. Spesielt har jeg: * Zeppelin, den bærbare datamaskinen som skal bruke Scala-kode for øyeblikket og til å gjøre dataanalyse (http://zeppelin:8080
) * The Spark Job Server, for å utføre og implementere gnistjobber med et hvilegrensesnitt (http://sparkjobserver:8080
). * En Hadoop-forekomst for å lagre og hente data fra HDFS (http://hadoop:50070
).
Merk at disse URL-ene er faste, men er tilgjengelige i det virtuelle miljøet. Du kan se webgrensesnittene deres i følgende skjermbilde.
Hver tjeneste kjører i en egen Docker-container. Uten å snakke veldig teknisk, tenk på dette som tre forskjellige servere i den virtuelle maskinen din. Sjarmen med å bruke Docker er at du kan legge til tjenester og til og med legge til to eller tre virtuelle maskiner. Ved å bruke Amazon-containere kan du enkelt justere miljøet ditt.
Sist men ikke minst har du en webterminal tilgjengelig. Bare skriv inn URL-en din med HTTPS, så blir du møtt med en terminal til en webside.
I skjermbildet ovenfor kan du se en liste over containerne, som er de tre serverne pluss skrivebordet. Denne kommandolinjen Skall Det gir deg tilgang til den virtuelle maskinen der containerne er plassert, som lar deg administrere dem. Det er som om serverne dine var 'i matrisen' (praktisk talt inne i containerne), men dette Skall det gir deg en flukt utenfor 'Matrix' for å administrere servere og desktop. Herfra kan du starte containerne på nytt, angi filsystemene deres og gjøre andre manipulasjoner som Docker tillater. Jeg skal ikke diskutere Docker i detalj på dette punktet, men det er mange dokumenter om Docker-nettsted .
Liker du dette så langt og vil ha instansen din? Det er enkelt og billig. Du kan få den til kostnaden for den virtuelle maskinen på Amazon Web Services, pluss lagring. Settet i den gjeldende konfigurasjonen krever 4 GB RAM for å kunne utøve alle tjenestene. Hvis du er forsiktig og bare bruker den virtuelle maskinen når du trenger det, og du jobber for eksempel 160 timer i måneden, vil en virtuell maskin til gjeldende priser koste deg 160 x 0,052 dollar, eller 8 dollar i måneden. Du må legge til kostnadene for lagring. Jeg bruker rundt 30 GB, men alt kan holdes sammen for mindre enn $ 10.
Dette inkluderer imidlertid ikke kostnadene for en (Pro) Dropbox-konto (eventuelt), hvis du vil sikkerhetskopiere mer enn 2 GB kode. Dette koster $ 15 mer i måneden, men gir viktig sikkerhet for dataene dine. Du trenger også et privat depot, det være seg en betalt GitHub eller en annen tjeneste, som Bitbucket, som tilbyr gratis private repositories.
Jeg vil understreke at hvis du bare bruker den når du trenger den, er den billigere enn en dedikert server. Ja, alt som er nevnt her kan installeres på en fysisk server, men siden jeg jobber med store data, trenger jeg mange AWS-tjenester, så jeg tror det er fornuftig å ha alt på samme sted.
La oss se hvordan du gjør hele installasjonen.
Før du begynner å bygge en virtuell maskin, må du registrere deg med følgende fire tjenester:
Den eneste av disse der det er nødvendig å bruke kredittkortet ditt er i Amazon Web Services. DuckDns er helt gratis, mens DropBox gir deg 2 GB gratis lagringsplass, noe som kan være nok til mange oppgaver. Let’s Encrypt er også gratis og brukes internt når du bygger bildet for å signere sertifikatet ditt. Bortsett fra dette, anbefaler jeg også en hostinghotelltjeneste, som GitHub eller Bitbucket, men hvis du vil lagre koden din, er den ikke nødvendig for installasjon.
For å komme i gang, naviger til GitHub BigDataDevKit-depot .
Rull nedover siden og kopier skriptet som vises på bildet til din foretrukne tekstredigerer:
Dette skriptet er nødvendig for å øke bildet. Du må endre det og gi noen verdier til parametrene. Endre teksten nøye innenfor sitatene. Merk at du ikke kan bruke tegn som selve sitatet, tilbakeslag eller dollarsymbolet i passordet, med mindre du legger dem inn avtale . Dette problemet er bare relevant for passordet. Hvis du vil være trygg, unngå anførselstegn, dollartegn eller tilbakeslag.
Parameteren PASSWORD
Det er et passord du velger å gå inn i den virtuelle maskinen via et webgrensesnitt. Parameteren EMAIL
Det er din e-post og vil bli brukt når du registrerer et SSL-sertifikat. Du blir bedt om å oppgi e-posten din, som er det eneste kravet for å få et SSL-sertifikat fra Let’s Encrypt.
For å få verdiene for TOKEN
og HOST
, gå til DuckDNS-nettstedet og logg inn. Du må velge vertsnavn ny.
Se på bildet for å se hvor du skal kopiere token og hvor skal du legge til din vertsnavn . Du må klikke på 'legg til domene' -knappen for å reservere vertsnavn .
Forutsatt at du har alle parametrene og har redigert skriptet, er du klar til å starte forekomsten. Gå inn i Amazon Web Services-administrasjonsgrensesnittet, gå til EC2 Instances-panelet og klikk på 'Launch Instance'.
På det første skjermbildet skal du velge et bilde. Skriptet er bygget rundt Amazons Linux, og det er ingen andre tilgjengelige alternativer. Velg Linux fra Amazon, det er det første alternativet i QuickStart-listen.
Velg forekomsttype på det andre skjermbildet. Gitt størrelsen på den programvaren som kjører, er det flere tjenester, og du trenger minst 4 GB minne, så jeg anbefaler at du velger forekomsten t2.medium . Du kan minimere det ved å bruke t2.small hvis du slår av noen tjenester eller til og med mikro hvis du bare vil ha skrivebordet.
På det tredje skjermbildet klikker du på 'Avanserte detaljer' og limer inn skriptet du konfigurerte i forrige trinn. Jeg anbefaler også at du setter beskyttelse mot en periode, slik at du ikke mister alt arbeidet ditt hvis en utilsiktet avslutning oppstår.
Neste trinn er å konfigurere lagringen. Standarden for en forekomst er 8 GB, som ikke er nok til å inneholde alle bildene vi skal bygge. Jeg anbefaler å øke den til 20 GB. Tilsvarende, selv om det ikke er nødvendig, foreslår jeg en annen blokkenhet på minst 10 GB. Skriptet vil montere den andre blokkenheten som en datafil. Du kan ta et bilde av innholdet, fullføre forekomsten og deretter gjenskape det ved hjelp av bildet av innholdet og gjenopprette alt arbeidet. Videre går en tilpasset blokkeringsenhet ikke tapt når du avslutter forekomsten, så du har dobbelt beskyttelse mot utilsiktet datatap. For å øke sikkerheten ytterligere, kan du sikkerhetskopiere dataene dine automatisk med Dropbox.
Det femte trinnet er å navngi forekomsten. Velg den du vil ha. Det sjette trinnet gir en måte å konfigurere tilgangskontrolllinjen på. Som standard er bare SSH tilgjengelig, men du trenger også HTTPS. Du kan åpne HTTPS for verden, men det er bedre hvis det bare er for IP-en din for å forhindre at andre kommer inn på skrivebordet og skall , selv om den fremdeles er beskyttet med et passord.
Når du er ferdig med denne siste konfigurasjonen, kan du starte forekomsten. Du vil merke at initialiseringen kan ta noen minutter første gang siden oppstartsskriptet kjører, det vil også gjøre noen lange tester, for eksempel å generere et HTTPS-sertifikat med Let's Encrypt.
Til slutt, når du ser administrasjonskonsollen 'kjører' med en kommisjon, og at den ikke lenger 'initialiseres', er du klar til å gå.
Forutsatt at alle parametrene er riktige, kan du navigere til https://YOURHOST.duckdns.org
.
Du erstatter YOURHOST
med vertsnavnet du valgte, men ikke glem at det er et HTTPS-nettsted, ikke HTTP, så forbindelsen din til serveren er kryptert, så du må skrive https//
i url. Nettstedet vil også presentere et gyldig sertifikat for Let’s Encrypt. Hvis det er problemer med å skaffe sertifikatet, vil initialiseringsskriptet generere et selvsignert sertifikat. Du kan fortsatt koble til en kryptert tilkobling, men søkemotoren vil advare deg om at det er et ukjent sted og usikre forbindelser. Det skulle ikke skje, men du vet aldri.
Forutsatt at alt fungerer, kan du gå inn i sommerfuglens webterminal. Du kan logge på med brukernavn app
og passordet du brukte i skriptet ved installasjon.
Når du har logget inn, har du en drevet virtuell maskin som også inkluderer Docker og andre freebies, som Nginx Frontend, Git og Butterfly Web Terminal. Nå kan du fullføre installasjonen ved å bygge Docker-bildene for utviklingsmiljøet ditt.
Skriv deretter inn følgende kommandoer:
git clone https://github.com/sciabarra/BigDataDevKit cd BigDataDevKit sh build.sh
Den siste kommandoen vil be deg om å skrive inn et passord for å komme inn på skrivebordet. Når dette er gjort, vil det begynne å bygge bildene. Merk at konstruksjonen vil ta omtrent 10 minutter, men du kan se hva som skjer fordi alt vises på skjermen.
Når konstruksjonen er fullført, kan du også installere Dropbox med følgende kommando:
/app/.dropbox-dist/dropboxd
Systemet viser deg en lenke som du må klikke for å aktivere Dropbox. Du må gå inn i Dropbox og så er du klar. Uansett hva du legger i Dropbox-mappen, synkroniseres det automatisk med alle Dropbox-forekomster.
Når du er klar, kan du starte den virtuelle maskinen på nytt og angi miljøet ditt på URL https://YOURHOST.dyndns.org/vnc.html
.
Du kan stoppe maskinen og starte den på nytt når du fortsetter arbeidet. Tilgangs-URL-en forblir den samme. På denne måten betaler du bare for tiden du bruker den, pluss et månedlig ekstra for brukt lagring.
Følgende diskusjon krever litt kunnskap om hvordan Docker og Amazon fungerer. Hvis du ikke vil forstå detaljene, må du huske følgende regel: I den virtuelle maskinen er det en mappe tilgjengelig /app/Dropbox
, uansett hva du legger i /app/Dropbox
den er bevart, og alt annet er disponibelt og kan forsvinne. For å øke sikkerheten, lagre din dyrebare kode i en systemkontrollversjon.
Nå hvis du vil forstå dette, fortsett å lese. Hvis du fulgte instruksjonene mine for å lage den virtuelle maskinen, er den beskyttet mot avslutning, slik at du ikke ved et uhell kan ødelegge den. Hvis du bestemmer deg for å avslutte det med vilje, vil hovedvolumet bli ødelagt. Alle Docker-bilder går tapt, inkludert alle endringene du har gjort.
Imidlertid siden /app/Dropbox
den er montert som et Docker-volum for containere, det er ikke en del av Docker-bildene. I den virtuelle maskinen, mappen /app
den er montert på Amazon Volume du opprettet, som heller ikke er ødelagt, selv om du spesifikt avslutter den virtuelle maskinen. For å fjerne volumet må du fjerne det spesifikt.
Ikke forveksle Docker-volumer, som er en logisk Docker-enhet, med Amazon Volumes, som er en noe fysisk enhet. Det som skjer er at Docker-volumet /app/Dropbox
er inne i Amazonas volum /app
.
Amazon-volumet ødelegges ikke automatisk når du avslutter den virtuelle maskinen, så det som er plassert inne vil bli bevart, til du uttrykkelig ødelegger volumet. Videre lagres det du legger i Docker-volumet utenfor beholderen, slik at det ikke blir ødelagt når containeren blir ødelagt. Hvis du aktiverte Dropbox, som anbefalt, blir alt innholdet ditt kopiert til Dropbox-servere og til harddisken din, hvis du synkroniserer Dropbox med datamaskinen (e). Det anbefales også at kildekoden lagres i et versjonskontrollsystem.
Så hvis du legger tingene dine i et versjonskontrollsystem under Dropbox-mappen, må alt dette skje for å miste dataene dine:
Jeg håper dataene dine er tilstrekkelig beskyttet.
Jeg holder en virtuell maskin for hvert prosjekt, og når du er ferdig, holder jeg ubrukt virtuelle maskiner slått av. Selvfølgelig har jeg all koden min på GitHub og lagret i Dropbox. Når jeg slutter å jobbe med et prosjekt, tar jeg også et bilde av Amazon Web Services-blokken før jeg sletter den virtuelle maskinen helt. På denne måten, når jeg kommer tilbake til et prosjekt, for eksempel for vedlikehold, er alt jeg trenger å gjøre å starte en ny virtuell maskin ved hjelp av blokkbildet. Alle dataene mine returneres til nettstedet ditt, og jeg kan fortsette arbeidet mitt.
For det første, hvis du har internettilgang uten proxy, kan du bruke innfødte SSH- og VNC-klienter. Direkte SSH-tilgang er viktig hvis du trenger å kopiere filer inn og ut av den virtuelle maskinen. For fildeling bør du imidlertid vurdere Dropbox som et enklere alternativ.
VNC-tilgang er uvurderlig, men kan noen ganger være tregere enn en innfødt klient. Du har tilgang til VNC-serveren på den virtuelle maskinen ved hjelp av port 5900. Du må spesifikt åpne den fordi den lukkes som standard. Jeg anbefaler at du bare åpner den for IP-adressen din, fordi internett er fullt av 'bots' som skanner internett for å få tjenester, og VNC er et hyppig mål for disse bots.
Denne artikkelen forklarer hvordan du kan få mest mulig ut av moderne skyteknologi for å implementere et effektivt utviklingsmiljø. Selv om en skymaskin kanskje ikke er en fullstendig erstatning for arbeidsdatamaskinen eller den bærbare datamaskinen, er det godt nok å gjøre utviklingsarbeid når tilgang til IDE er viktig. Etter min erfaring, med nåværende internettforbindelser, er det raskt nok til å fungere.
Å være i skyen, tilgangen til serveren og manipulasjonen er raskere enn når de er hatt lokalt. Du kan øke (eller redusere) minnet, starte et annet miljø, lage et bilde og så videre. Du har en karaffel innen fingertuppene, og når du jobber med store dataprosjekter, trenger du robuste tjenester og mye plass. Det er det skyen gir.