Hvernig á að búa til pluggable Golang umsókn og njóta góðs af AWS Lambda lögum.

Golang - af hverju er það athyglisvert?

Golang er opið forritunarmál þróað og innleitt af Google. Það er notað mjög víða í nútíma forritum, sérstaklega í skýinu. Þeir eru einkennandi einkenni:

  • Golang er skrifað á statískan hátt - það býður upp á minni sveigjanleika en verndar þig gegn villum,
  • Það er ekki hlutbundið. Hins vegar er hægt að búa til mannvirki og tengi og það skilar 3 af 4 OOP meginreglum: gagnaútdráttur, hjúpun og fjölbreytni. Það eina sem vantar er erfðir
  • Goroutines! - Besta útfærsla ljósþráða sem ég hef notað. Með go rekstraraðilanum geturðu auðveldlega búið til nýjan þráð og átt samskipti um rásir milli mismunandi goroutines.
  • Það er sett saman í eina tvöföldu skrána með öllum ósjálfstæði - ekki fleiri pakkaátök!

Persónulega tel ég Golang vera mesta tungumál sem ég nota á hverjum degi. Þessi grein snýst hins vegar ekki um að búa til fyrstu aðgerð þína eða prenta „Halló heimur“. Ég skal sýna þér aðeins fullkomnara efni. Ef þú ert byrjandi og vilt fræðast meira um Golang skaltu fara á aðalsíðuna.

AWS Lambda & Golang

AWS Lambda er ein vinsælasta netþjónustu tölvuþjónustan í almenningsskýinu, gefin út af Amazon Web Services í nóvember 2014. Þú getur keyrt kóðann þinn til að bregðast við atburðum eins og DynamoDB, SNS eða HTTP kallar án þess að þurfa að setja upp eða hafa umsjón með netþjónum! Veistu hvað er mjög frábært? Það hefur stutt Golang tímabilið síðan í janúar 2018. Að vinna með AWS Lambda er mjög auðvelt - sendu bara þjappaðan pakka með kóðanum þínum og öllum ósjálfstæði (einn tvöfaldur ef þú ert að nota Golang).

Fljótt áfram, 4 árum síðar, 2018 aftur: Invent AWS gefur út Lambda-lög sem gera þér kleift að geyma og stjórna gögnum sem deilt er fyrir ýmsar aðgerðir á einum eða jafnvel mörgum AWS reikningum! Til dæmis, ef þú ert að nota Python, geturðu sett allar ósjálfstæði í viðbótarlag sem síðar er hægt að nota af öðrum lambdas. Það er ekki lengur þörf á að bæta öðruvísi við hvern pakka með rennilás! Aðstæðurnar eru aðrar í Golang heiminum þar sem AWS Lambda þarf að hlaða saman tvöföldum tvíþáttum. Hvernig getum við notið góðs af AWS Lambda Layers? Svarið er einfalt - byggðu upp mátforrit með Golang viðbótum!

Golang viðbætur - leið til að byggja upp mátaforrit

Golang viðbætur er sá eiginleiki sem gefinn er út í Go1.8 sem gerir þér kleift að hlaða á virkan hátt samnýtt bókasöfn (.so skrár). Þú hefur möguleika á að flytja út hluta af kóðanum þínum í aðskilda bókasafnið eða nota viðbótina sem einhver annar bjó til og tók saman. Það er þó hvetjandi að það eru nokkrar takmarkanir:

  • Viðbótin þín verður að vera ein aðal eining,
  • Þú getur aðeins hlaðið aðgerðir og breytur sem eru fluttar út sem ELF tákn.
  • Vegna truflunar vélritunar verður þú að breyta hverju hlaðnu tákni í rétta gerð. Í versta falli þarftu að skilgreina rétt viðmót í kóðanum þínum,
  • Það virkar aðeins á Linux og MacOS. Persónulega sé ég þetta ekki sem ókost :)

Búðu til og prófaðu fyrsta viðbótina þína

Nú skulum við búa til okkar fyrsta viðbót. Sem dæmi munum við búa til einfalda einingu fyrir dulkóðun strengja. Við skulum fara aftur í grunnatriðin og innleiða tvö einföld dulkóðunaralgoritma - Ceasar og Verman.

  • Caesar dulmál er reikniritið sem Julius Ceases notar fyrst. Það færir hvern staf í textanum tilgreindan fjölda staða. Til dæmis, ef þú vilt dulkóða orðið golang með lykli 4 færðu ktpek. Dulkóðun virkar á sama hátt. Allt sem þú þarft að gera er að færa stafina í gagnstæða átt.
  • Verman dulmálið er svipað og Ceaser dulmálið, byggt á sömu breyttu hugmyndinni. Munurinn er sá að þú færir hverjum staf mismunandi stig. Til þess að afkóða textann þarftu lykilinn með stöðunum þar sem textinn var dulkóðuð. Til dæmis, ef þú vilt dulkóða orðið golang með lyklinum [-1, 4, 7, 20, 4, -2] færðu framtíð.

Heildarútfærsluna á þessu dæmi er að finna hér.

Tappi útfærsla

Eftirfarandi brot inniheldur útfærslu á tveimur reikniritum sem nefnd eru hér að ofan. Fyrir hvern og einn útfærum við tvær aðferðir við að dulkóða og afkóða texta okkar:

Eins og þú sérð höfum við flutt hingað út 3 mismunandi tákn (Golang flytur aðeins út þessi auðkenni sem byrja á stafnum hér að ofan):

  • EncryptCeasar - func (int, string) Strengur sem dulkóðar texta með Ceasar reikniritinu.
  • DecryptCeaser - func (int, string) Strengur sem afkóðar textann með Caeser reikniritinu,
  • VermanCipher - breytu af gerðinni vermanCipher, sem útfærir 2 aðferðir: Dulkóða: func (strengur) strengur og Decrypt: func () (* strengur, villa)

Til að setja saman þetta tappi þarftu að keyra eftirfarandi skipun:

fara að byggja -buildmode = tappi -o tappi / cipher.so tappi / cipher.go

Núna er ekkert sérstakt - örfáar einfaldar aðgerðir hafa verið búnar til og eining hefur verið tekin saman sem viðbót með því að bæta við -buildmode = tappi rökum.

Hleðsla og prófa viðbótina

Skemmtunin byrjar þegar við viljum nota samanlagða viðbótina í appinu okkar. Búum til einfalt dæmi:

Fyrst þarftu að flytja inn Golang viðbótarpakka. Það inniheldur aðeins tvær aðgerðir - sú fyrri er að hlaða sameiginlegu bókasafni og sú síðari að finna útflutt tákn. Til að hlaða bókasafnið þitt þarftu að nota Opna aðgerðina, þar sem tilgreina verður slóðina að sameiginlega viðbótinni þinni og skilabreytunni af gerðinni viðbót. Ef ekki er hægt að hlaða bókasafnið (t.d. ranga slóð eða skemmda skrá) skilar þessi aðgerð villunni sem þarf að meðhöndla.

Næsta skref er að hlaða hvert útflutt tákn með leitaraðferðinni. Lítill ókostur er að þú verður að hlaða hverja aðgerð sem er flutt út sérstaklega. Þú getur samt sameinað margar aðgerðir á sama hátt og þú gerðir fyrir VermanCipher táknið. Eftir að þú hefur hlaðið öllum táknunum sem þú vilt nota þarftu að umbreyta þeim í rétta gerð. Golang er staðbundið vélritað tungumál, svo það er engin önnur leið til að nota þessi tákn án steypu. Mundu að ef þú ert að flytja út breytu sem útfærir nokkrar aðferðir verður þú að varpa henni í rétt viðmótstegund (ég varð að skilgreina dulkóðunarEngine tengi til að takast á við þetta). \ Newline \ newline

Notaðu eftirfarandi skipun til að setja saman og keyra forritið:

farðu að byggja app.go ./app

Í framleiðslunni ættirðu að sjá dulkóðaða og dulkóðuða textann sem sönnun þess að reikniritið virkar rétt.

Notaðu viðbótina í AWS Lambda

Til þess að nota viðbótina okkar í AWS Lambda verðum við að gera nokkrar breytingar á forritinu okkar:

  • AWS Lambda festir lög í / opt skránni í Lambda ílátinu, svo við verðum að hlaða viðbótina okkar úr þessari skrá.
  • Við verðum að búa til meðhöndlunaraðgerð sem verður notuð af Lambda vélinni til að vinna úr prófatburði okkar.

Eftirfarandi brot inniheldur forritið okkar sem hefur verið aðlagað til að nota af Lambda:

Eins og þú sérð er framkvæmdin mjög svipuð þeirri fyrri. Við breyttum bara skránni sem við hlóðum viðbótinni frá og bættum við aðgerðasvöruninni í stað þess að prenta út gildi. Nánari upplýsingar um ritun lamba í Golang er að finna í skjölum AWS.

AWS Lambda dreifing

Það eru tvær leiðir til að dreifa AWS Lambda aðgerðum og lögum. Þú getur búið til og hlaðið saman þjöppuðum pakka handvirkt eða notað háþróaða ramma sem gerir það mun auðveldara og fljótlegra. Í flestum verkefnum mínum nota ég netlausa ramma. Þess vegna hef ég þegar undirbúið einföldu stillingarskrána serverless.yml með þessu tóli:

Þjónusta: cipherService ramma Útgáfa: "> = 1.28.0 <2.0.0" Útgefandi: Nafn: aws Runtime: go1.x
Lög: cipherLayer: Path: bin / plugin compatible runtime: - go1.x
Aðgerðir: Vél: Meðhöndlun: bin / cipherEngine Package: Exclude: - ./** Include: - ./bin/cipherEngine Layers: - {Ref: CipherLayerLambdaLayer}

Á lagasvæðinu höfum við skilgreint eitt lag með leiðinni að viðbótinni sem þegar hefur verið búin til - þetta er veitt ásamt Lambda aðgerðinni. Þú getur skilgreint allt að 5 mismunandi stig og röð þeirra skiptir mjög miklu máli. Þau eru sett upp í sömu / opt möppunni, þannig að lög með hærri tölu geta skrifað yfir skrár frá áður settum lögum. Fyrir hvert stig verður að tilgreina að minnsta kosti 2 breytur: slóð að skráasafninu með stigagjafa (í þínu tilviki slóð að tappi tvöfaldri skrá) og listanum yfir samhæfða keyrslutíma.

Næsta aðgerðahluti er staður þar sem þú skilgreinir lista yfir aðgerðir sem á að útfæra. Fyrir hverja aðgerð verður þú að minnsta kosti að tilgreina slóðina að samanlagða forritinu. Að auki þurfum við að skilgreina lagstærðina með tilvísun í lagið sem skilgreint er hér að ofan. Þetta bætir laginu sjálfkrafa við Lambda-aðgerðina okkar meðan á notkun stendur. Það fyndna er að ef þú vilt vísa í þessa auðlind þá verður þú að breyta nafninu á Lambda laginu þínu í TitleCased og bæta við viðskeyti LambdaLayer. Svo virðist sem netþjónalaus teymið hafi innleitt það á þennan hátt til að leysa átök varðandi mismunandi tegundir auðlinda.

Um leið og stillingarskráin serverless.yml okkar er tilbúin er það síðasta sem þú þarft að gera að safna saman, stinga í samband og dreifa appinu okkar. Fyrir þetta getum við notað einfalda Makefile:

.PHONY: Build BuildPlugin dreifist hreint
byggja: dep safe -v env GOOS = Linux fara að byggja -ldflags = "-s -w" -o bin / cipherEngine cipherEngine / main.go
buildPlugin: env GOOS = Linux go build -ldflags = "- s -w" -buildmode = Plugin -o bin / plugin / cipher.so ../plugin/cipher.go
hreinn: rm -rf ./bin ./vendor Gopkg.lock
dreifa: hreinn byggjaPlugin byggja sls dreifa --verbose

Þú getur byggt og dreift aðgerð þinni með því að keyra eftirfarandi skipun:

veita

Prófaðu AWS Lambda

Eins og fyrr segir, AWS Lambda Code keyrir til að bregðast við atburðinum. Við höfum hins vegar ekki stillt neina atburðarás, svo ekki er hægt að hringja í þá nema með hjálp okkar. Við verðum að gera það handvirkt með Serverless Framework eða awscli tólinu:

sls kallar -f virkaheiti aws lambda ákalla - virkaheiti virkaheiti framleiðsluskrá

Í svarinu ættirðu að sjá sömu framleiðslu og áður, sem sannar að lambdaaðgerð okkar virkar rétt og að viðbótin hlaðast frá viðbótarlaginu. Nú getur þú búið til aðrar aðgerðir sem nota sama lag eða jafnvel deila því með öðrum AWS reikningum.

Yfirlit

Það var mjög gaman að nota Golang einingar og prófa hvernig hægt væri að samþætta þær með nýútgefnu AWS Lambda Layers. Tappasafnið er mjög frábært en það er aðeins hægt að nota það í ákveðnum atburðarásum vegna takmarkana þess og Golang forskriftarinnar. Ég held að fyrir flesta verktakana sem vinna að stöðluðum verkefnum sé ekki þörf á viðbótum eða jafnvel mögulegum. Ég get aðeins hugsað um tvær ástæður:

  • Útfærsla flókinna reiknirita sem hægt er að nota af öðrum forritum, t.d. Vídeó kóðun eða dulkóðunar reiknirit.
  • Deildu reikniritinu með öðrum án þess að birta kóðann.