Yksityiskohtainen analyysi AWS Lambdasta

Artikkelin käännös on tehty erityisesti kurssin opiskelijoille "Pilvipalvelut". Oletko kiinnostunut kehittymään tähän suuntaan? Katso Egor Zuevin (TeamLead at InBit) mestarikurssi "AWS EC2 palvelu" ja liity seuraavaan kurssiryhmään: alkaa 26.

Yksityiskohtainen analyysi AWS Lambdasta

Yhä useammat ihmiset siirtyvät AWS Lambdaan skaalautuvuuden, suorituskyvyn, säästöjen ja miljoonien tai jopa biljoonien pyyntöjen käsittelyn vuoksi kuukaudessa. Tätä varten sinun ei tarvitse hallita infrastruktuuria, jossa palvelu toimii. Ja automaattisen skaalauksen avulla voit palvella tuhansia samanaikaisia ​​pyyntöjä sekunnissa. Mielestäni AWS Lambdaa voidaan oikeutetusti kutsua yhdeksi suosituimmista AWS-palveluista.

AWS Lambda

AWS Lambda on tapahtumaohjattu palvelimeton laskentapalvelu, jonka avulla voit suorittaa koodia ilman palvelimien hallintaa tai hallintaa ja laajentaa muita AWS-palveluita mukautetun logiikan avulla. Lambda vastaa automaattisesti erilaisiin tapahtumiin (kutsutaan triggereiksi), kuten HTTP-pyyntöihin Amazon API Gatewayn kautta, Amazon S3 -säilöiden tai Amazon DynamoDB -taulukoiden tietojen muutoksiin; tai voit suorittaa koodisi API-kutsujen kautta käyttämällä AWS SDK:ta ja tilasiirtymiä AWS Step Functionsissa.

Lambda käyttää koodia erittäin saatavilla olevassa laskentainfrastruktuurissa ja on täysin vastuussa taustalla olevan alustan hallinnasta, mukaan lukien palvelimen ja käyttöjärjestelmän ylläpito, resurssien hallinta, automaattinen skaalaus, koodin valvonta ja kirjaus. Eli sinun tarvitsee vain ladata koodisi ja määrittää, miten ja milloin se suoritetaan. Palvelu puolestaan ​​huolehtii sen käynnistämisestä ja varmistaa sovelluksesi korkean käytettävyyden.

Milloin vaihtaa lambdaan?

AWS Lambda on kätevä laskenta-alusta, joka sopii monenlaisiin käyttötapauksiin, kunhan palvelu tukee koodisi kieltä ja ajonaikaa. Jos haluat keskittyä koodiisi ja liiketoimintalogiikkaan ulkoistamalla palvelimen ylläpidon, provisioinnin ja skaalauksen kohtuullisin kustannuksin, AWS Lambda on ehdottomasti oikea tapa edetä.

Lambda on ihanteellinen ohjelmointirajapintojen luomiseen, ja kun sitä käytetään yhdessä API Gatewayn kanssa, voit vähentää kustannuksia merkittävästi ja päästä markkinoille nopeammin. Palvelimeton arkkitehtuurin järjestämiseen on erilaisia ​​tapoja käyttää Lambda-toimintoja ja vaihtoehtoja – jokainen voi valita itselleen sopivan tavoitteensa perusteella.

Lambda antaa sinun suorittaa monenlaisia ​​tehtäviä. Näin ollen CloudWatch-tuen ansiosta voit luoda viivästettyjä tehtäviä ja automatisoida yksittäisiä prosesseja. Palvelun käytön luonteella ja intensiteetillä ei ole rajoituksia (muistinkulutus ja aika huomioidaan), eikä mikään estä sinua työskentelemästä systemaattisesti Lambdaan perustuvan täysimittaisen mikropalvelun parissa.

Täällä voit luoda palvelukeskeisiä toimintoja, jotka eivät toimi jatkuvasti. Tyypillinen esimerkki on kuvan skaalaus. Jopa hajautetuissa järjestelmissä Lambda-toiminnot ovat edelleen merkityksellisiä.

Joten jos et halua käsitellä laskentaresurssien varaamista ja hallintaa, kokeile AWS Lambdaa; jos et tarvitse raskaita, resurssiintensiivisiä laskelmia, kokeile myös AWS Lambdaa; Jos koodisi toimii säännöllisesti, niin kannattaa kokeilla AWS Lambdaa.

Безопасность

Turvallisuudesta ei toistaiseksi ole valittamista. Toisaalta, koska monet tämän mallin sisäiset prosessit ja toteutusominaisuudet ovat piilossa AWS Lambda -hallitun ajonaikaisen ympäristön käyttäjältä, jotkut yleisesti hyväksytyt pilviturvallisuuden säännöt tulevat merkityksettömiksi.

Kuten useimmat AWS-palvelut, Lambda tarjotaan AWS:n ja asiakkaan jaetun tietoturvan ja vaatimustenmukaisuuden perusteella. Tämä periaate vähentää asiakkaan toiminnallista taakkaa, koska AWS ottaa vastuulleen palvelukomponenttien ylläpidon, hallinnan ja valvonnan - isäntäkäyttöjärjestelmästä virtualisointikerroksesta infrastruktuuriresurssien fyysiseen turvallisuuteen.

Erityisesti AWS Lambdasta puhuttaessa AWS vastaa taustalla olevan infrastruktuurin, siihen liittyvien taustapalveluiden, käyttöjärjestelmän ja sovellusalustan hallinnasta. Asiakas on vastuussa koodinsa turvallisuudesta, luottamuksellisten tietojen tallentamisesta, niihin pääsyn hallinnasta sekä Lambda-palveluun ja resursseihin (Identity and Access Management, IAM) pääsystä, mukaan lukien käytettyjen toimintojen rajoissa.

Alla oleva kaavio näyttää jaetun vastuun mallin sellaisena kuin se koskee AWS Lambdaa. AWS Responsibility on oranssi ja Asiakasvastuu on sininen. Kuten näet, AWS ottaa enemmän vastuuta palvelussa käyttöönotetuista sovelluksista.

Yksityiskohtainen analyysi AWS Lambdasta

Jaetun vastuun malli, jota sovelletaan AWS Lambdaan

Lambdan käyttöaika

Lambdan tärkein etu on, että suorittamalla toiminnon puolestasi palvelu varaa itse tarvittavat resurssit. Voit välttää ajan ja vaivan tuhlaamisen järjestelmänhallintaan ja keskittyä liiketoimintalogiikkaan ja koodaukseen.

Lambda-palvelu on jaettu kahteen tasoon. Ensimmäinen on ohjaustaso. Wikipedian mukaan ohjaustaso on verkon osa, joka vastaa signalointiliikenteen ja reitityksen kuljettamisesta. Se on ensisijainen komponentti, joka tekee globaaleja päätöksiä työkuormien hallinnasta, huollosta ja jakamisesta. Lisäksi ohjaustaso toimii ratkaisutoimittajan verkkotopologiana, joka vastaa liikenteen reitityksestä ja hallinnasta.

Toinen taso on datataso. Sillä, kuten ohjaustasolla, on omat tehtävänsä. Ohjaustaso tarjoaa API:t toimintojen hallintaan (CreateFunction, UpdateFunctionCode) ja ohjaa kuinka Lambda kommunikoi muiden AWS-palvelujen kanssa. Tietotaso ohjaa Invoke API:ta, joka suorittaa Lambda-funktioita. Kun funktio on kutsuttu, ohjaustaso varaa tai valitsee olemassa olevan ajonaikaisen ympäristön, joka on valmiiksi valmisteltu kyseiselle funktiolle, ja suorittaa sitten koodin siinä.

AWS Lambda tukee useita ohjelmointikieliä, mukaan lukien Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 ja muut, niiden vastaavien ajonaikaisten ympäristöjen kautta. AWS päivittää niitä säännöllisesti, jakaa tietoturvakorjauksia ja suorittaa muita ylläpitotoimia näissä ympäristöissä. Lambda antaa sinun käyttää myös muita kieliä, jos otat itse käyttöön sopivan suoritusajan. Ja sitten sinun on huolehdittava sen ylläpidosta, mukaan lukien sen turvallisuuden valvonta.

Miten se kaikki toimii ja miten palvelu hoitaa tehtäväsi?

Jokainen toiminto toimii yhdessä tai useammassa erillisessä ympäristössä, jotka ovat olemassa vain kyseisen toiminnon elinkaaren ajan ja tuhoutuvat sitten. Jokainen ympäristö soittaa vain yhden puhelun kerrallaan, mutta sitä käytetään uudelleen, jos samalle toiminnolle on useita sarjakutsuja. Kaikki ajonaikaiset ympäristöt toimivat virtuaalisilla koneilla, joissa on laitteiston virtualisointi - ns. microVM:t. Jokainen microVM on määritetty tietylle AWS-tilille, ja ympäristöt voivat käyttää sitä uudelleen erilaisten toimintojen suorittamiseen kyseisellä tilillä. MicroVM:t on pakattu AWS:n omistaman ja ylläpitämän Lambda Worker -laitteistoalustan rakennuspalikoihin. Eri toiminnot eivät voi käyttää samaa suoritusaikaa, eivätkä microVM:t ole ainutlaatuisia eri AWS-tileille.

Yksityiskohtainen analyysi AWS Lambdasta

AWS lambdan eristysmalli

Ajonaikaisten ympäristöjen eristäminen toteutetaan useilla mekanismeilla. Jokaisen ympäristön ylimmällä tasolla on erilliset kopiot seuraavista komponenteista:

  • Toimintokoodi
  • Kaikki toiminnolle valitut lambda-tasot
  • Toimintojen suoritusympäristö
  • Minimaalinen käyttäjätila perustuu Amazon Linuxiin

Seuraavia mekanismeja käytetään eri suoritusympäristöjen eristämiseen:

  • cgroups - rajoittaa pääsyä prosessoriin, muistiin, tallennus- ja verkkoresursseihin jokaisessa ajonaikaisessa ympäristössä;
  • nimitilat - ryhmittelevät prosessitunnukset, käyttäjätunnukset, verkkoliitännät ja muut Linux-ytimen hallitsemat resurssit. Jokainen suoritusaika toimii omassa nimiavaruudessaan;
  • seccomp-bpf - rajoittaa järjestelmäkutsuja, joita voidaan käyttää ajon aikana;
  • iptables ja reititystaulukot - suoritusympäristöjen eristäminen toisistaan;
  • chroot - tarjoaa rajoitetun pääsyn taustalla olevaan tiedostojärjestelmään.

Yhdessä AWS:n omistamien eristystekniikoiden kanssa nämä mekanismit varmistavat luotettavan ajonaikaisen erottelun. Tällä tavalla eristetyt ympäristöt eivät voi käyttää tai muokata tietoja muista ympäristöistä.

Vaikka useita saman AWS-tilin ajonaikoja voidaan käyttää yhdessä microVM:ssä, microVM:itä ei voida missään olosuhteissa jakaa eri AWS-tilien kesken. AWS Lambda käyttää vain kahta mekanismia mikro-VM:ien eristämiseen: EC2-instanssit ja Firecracker. Vieraseristys Lambdassa EC2-esiintymien perusteella on ollut olemassa vuodesta 2015 lähtien. Firecracker on uusi avoimen lähdekoodin hypervisor, jonka AWS on erityisesti suunnitellut palvelimettomille työkuormille ja joka esiteltiin vuonna 2018. Fyysinen laitteisto, joka käyttää microVM:iä, jaetaan työkuormien kesken eri tilien välillä.

Ympäristöjen ja prosessitilojen tallentaminen

Vaikka Lambda-ajoajat ovat ainutlaatuisia eri funktioille, ne voivat kutsua samaa toimintoa toistuvasti, mikä tarkoittaa, että ajonaika voi kestää useita tunteja ennen kuin se tuhoutuu.

Jokaisessa Lambda-ajoympäristössä on myös kirjoitettava tiedostojärjestelmä, johon pääsee /tmp-hakemiston kautta. Sen sisältöön ei pääse käsiksi muista ajoajoista. Mitä tulee prosessin tilan pysyvyyteen, /tmp:hen kirjoitetut tiedostot ovat olemassa ajonaikaisen ympäristön koko elinkaaren ajan. Tämä mahdollistaa useiden puhelujen tulosten keräämisen, mikä on erityisen hyödyllistä kalliissa toiminnoissa, kuten koneoppimismallien lataamisessa.

Puhelun tiedonsiirto

Invoke API:ta voidaan käyttää kahdessa tilassa: tapahtumatilassa ja pyyntö-vastaustilassa. Tapahtumatilassa puhelu lisätään jonoon myöhempää suorittamista varten. Pyyntö-vastaus-tilassa toimintoa kutsutaan välittömästi annetulla hyötykuormalla, jonka jälkeen vastaus palautetaan. Molemmissa tapauksissa funktio toimii Lambda-ympäristössä, mutta eri hyötykuormapoluilla.

Pyyntö-vastauskutsujen aikana hyötykuorma virtaa pyyntöjenkäsittelyliittymästä (API Caller), kuten AWS API Gateway tai AWS SDK, kuormituksen tasapainottimeen ja sitten Lambda-puhelupalveluun (Invoke Service). Jälkimmäinen määrittää sopivan ympäristön toiminnon suorittamiseksi ja siirtää hyötykuorman sinne puhelun suorittamiseksi. Kuormantasaaja vastaanottaa TLS-suojattua liikennettä Internetin kautta. Lambda-palvelun sisäinen liikenne – kuormituksen tasapainottimen jälkeen – kulkee sisäisen VPC:n kautta tietyllä AWS-alueella.

Yksityiskohtainen analyysi AWS Lambdasta

AWS Lambda -puhelunkäsittelymalli: Pyyntö-vastaustila

Tapahtumapuhelut voidaan soittaa heti tai lisätä jonoon. Joissakin tapauksissa jono on toteutettu Amazon SQS:llä (Amazon Simple Queue Service), joka välittää puhelut Lambda-puheluntäyttöpalveluun sisäisen poller-prosessin kautta. Lähetetty liikenne on suojattu TLS:llä, eikä Amazon SQS:ään tallennetuille tiedoille ole lisäsalausta.

Tapahtumakutsut eivät palauta vastauksia – Lambda Worker yksinkertaisesti jättää huomioimatta kaikki vastaustiedot. Lambda käsittelee tapahtumapohjaiset puhelut Amazon S3:sta, Amazon SNS:stä, CloudWatchista ja muista lähteistä tapahtumatilassa. Puhelut Amazon Kinesis- ja DynamoDB-virroista, SQS-jonoista, Application Load Balancer- ja API-yhdyskäytäväkutsuista käsitellään pyyntö-vastaus-periaatteella.

seuranta

Voit seurata ja tarkastaa Lambdan toimintoja käyttämällä erilaisia ​​AWS-mekanismeja ja palveluita, mukaan lukien seuraavat.

amazonin pilvikello
Kerää erilaisia ​​tilastotietoja, kuten pyyntöjen lukumäärän, pyyntöjen keston ja epäonnistuneiden pyyntöjen määrän.

Amazon CloudTrail
Voit kirjata, seurata jatkuvasti ja ylläpitää AWS-infrastruktuuriisi liittyviä tilitoimintatietoja. Sinulla on täydellinen historia toiminnoista, jotka on suoritettu käyttämällä AWS-hallintakonsolia, AWS SDK:ta, komentorivityökaluja ja muita AWS-palveluita.

AWS röntgen
Tarjoaa täydellisen näkyvyyden sovelluksesi pyyntöjen käsittelyn kaikkiin vaiheisiin sen sisäisten komponenttien kartan perusteella. Voit analysoida sovelluksia kehitysvaiheessa ja tuotantoympäristöissä.

AWS-määritykset
Pystyt seuraamaan muutoksia Lambda-toimintokokoonpanoon (mukaan lukien poistaminen) ja suoritusaikoihin, tunnisteisiin, käsittelijöiden nimiin, koodin kokoon, muistin varaukseen, aikakatkaisuasetuksiin ja samanaikaisuusasetuksiin sekä Lambda IAM -suoritusrooliin, aliverkkoihin ja suojausryhmien sidoksiin. .

Johtopäätös

AWS Lambda tarjoaa tehokkaan työkalusarjan turvallisten ja skaalautuvien sovellusten rakentamiseen. Monet AWS Lambdan suojaus- ja vaatimustenmukaisuuskäytännöt ovat samat kuin muissa AWS-palveluissa, vaikka poikkeuksiakin on. Maaliskuusta 2019 lähtien Lambda on yhteensopiva SOC 1:n, SOC 2:n, SOC 3:n, PCI DSS:n, Health Insurance Portability and Accountability Actin (HIPAA) ja muiden määräysten kanssa. Joten kun harkitset seuraavan sovelluksesi käyttöönottoa, harkitse AWS Lambda -palvelua - se saattaa sopia parhaiten tehtävääsi.

Lähde: will.com

Lisää kommentti