Conas Feidhmchlár Golang Breiseán a Chruthú agus Tairbhe a bhaint as Sraitheanna AWS Lambda.

Golang - cén fáth gur fiú d’aird a thabhairt air?

Is teanga cláir foinse oscailte é Golang a d’fhorbair agus a chuir i bhfeidhm ag Google. Úsáidtear go forleathan é in iarratais nua-aimseartha, go háirithe sa scamall. Is iad seo na gnéithe is tréith:

  • Scríobhtar Golang go statach - tugann sé níos lú solúbthachta ach cosnaíonn sé tú ó earráidí,
  • Níl sé dírithe ar réada. Mar sin féin, is féidir leat struchtúir agus comhéadain a chruthú, agus mar thoradh air sin tá 3 as 4 phrionsabal OOP: astarraingt sonraí, athghabháil agus polymorphism. Níl le déanamh ach oidhreacht
  • Goroutines! - Na filiméid solais a d'úsáid mé riamh a chur i bhfeidhm is fearr. Leis an oibreoir dul is féidir leat snáithe nua a chruthú go héasca agus cumarsáid a dhéanamh trí bhealaí idir goroutines éagsúla.
  • Tiomsaítear é sa chomhad dénártha aonair leis na spleáchais go léir - níl níos mó coimhlintí pacáiste ann!

Go pearsanta, measaim gurb í Golang an teanga is mó a úsáidim gach lá. Mar sin féin, ní bhaineann an t-alt seo le do chéad fheidhm a chruthú nó "Hello World" a phriontáil. Taispeánfaidh mé rudaí beagán níos forbartha duit. Más bunleibhéal tú agus má theastaíonn uait níos mó a fhoghlaim faoi Golang, tabhair cuairt ar an bpríomhleathanach.

AWS Lambda & Golang

Tá AWS Lambda ar cheann de na seirbhísí ríomhaireachta gan freastalaí is mó éilimh sa scamall poiblí, a d’eisigh Amazon Web Services i mí na Samhna 2014. Féadfaidh tú do chód a rith mar fhreagairt ar imeachtaí mar triggers DynamoDB, SNS, nó HTTP gan freastalaithe a chur ar bun nó a bhainistiú! An bhfuil a fhios agat cad atá iontach? Tá sé ag tacú le téarma Golang ó Eanáir 2018. Tá sé an-éasca oibriú le AWS Lambda - ach pacáiste comhbhrúite a uaslódáil le do chód agus gach spleáchas (dénártha aonair má tá Golang á úsáid agat).

Go tapa ar aghaidh, 4 bliana ina dhiaidh sin, 2018 maidir le: Scaoileann AWS Sraitheanna Sraitheanna Lambda a ligeann duit sonraí a roinntear le haghaidh feidhmeanna éagsúla a stóráil agus a bhainistiú i gcuntas AWS amháin nó fiú iolrach! Mar shampla, má tá Python á úsáid agat, féadfaidh tú gach spleáchas a chur i gciseal breise is féidir le lambdas eile a úsáid níos déanaí. Ní gá spleáchais éagsúla a chur le gach pacáiste zipáilte a thuilleadh! Tá an scéal difriúil i ndomhan Golang mar éilíonn AWS Lambda comhaid dhénártha tiomsaithe a uaslódáil. Conas is féidir linn leas a bhaint as Sraitheanna Lambda AWS? Is é an freagra simplí - feidhmchlár modúlach a thógáil le breiseáin Golang!

Breiseáin Golang - bealach chun feidhmchlár modúlach a thógáil

Is é Golang Plugins an ghné a scaoiltear i Go1.8 a ligeann duit leabharlanna roinnte (comhaid .so) a luchtú go dinimiciúil. Tá an rogha agat cuid de do chód a onnmhairiú chuig an leabharlann ar leithligh nó an breiseán a chruthaigh agus a thiomsaigh duine éigin eile a úsáid. Is údar misnigh é, áfach, go bhfuil roinnt teorainneacha ann:

  • Caithfidh príomh-mhodúl amháin a bheith i do bhreiseán,
  • Ní féidir leat ach feidhmeanna agus athróga a onnmhairítear mar shiombailí ELF a luchtú.
  • Mar gheall ar an gclóscríobh statach, caithfidh tú gach siombail luchtaithe a thiontú go dtí an cineál ceart. Sa chás is measa, ní mór duit an comhéadan ceart i do chód a shainiú,
  • Ní oibríonn sé ach ar Linux agus MacOS. Go pearsanta, ní fheicim gur míbhuntáiste é seo :)

Cruthaigh agus tástáil do chéad bhreiseán

Anois déanaimis ár gcéad bhreiseán a chruthú. Mar shampla, cruthóimid modúl simplí le haghaidh criptiú sreangán. Téigh ar ais chuig na buneilimintí agus dhá algartam criptithe simplí a chur i bhfeidhm - Ceasar agus Verman.

  • Is é Caesar cipher an algartam a d'úsáid Julius Ceases ar dtús. Athraíonn sé gach litir sa téacs an líon sonraithe áiteanna. Mar shampla, más mian leat an focal golang a chriptiú le heochair 4, gheobhaidh tú ktpek. Oibríonn díchriptiú ar an mbealach céanna. Níl le déanamh agat ach na litreacha a bhogadh sa treo eile.
  • Tá an cipher Verman cosúil leis an cipher Ceaser, bunaithe ar an smaoineamh aistrithe céanna. Is í an difríocht ná go mbogann tú gach litir an líon difriúil post. D’fhonn an téacs a dhíchriptiú, teastaíonn an eochair uait leis na suíomhanna inar criptíodh an téacs. Mar shampla, más mian leat an focal golang a chriptiú leis an eochair [-1, 4, 7, 20, 4, -2], gheobhaidh tú todhchaí.

Is féidir cur i bhfeidhm iomlán an tsampla seo a fháil anseo.

Cur i bhfeidhm breiseán

Sa chnuasach seo a leanas tá cur i bhfeidhm an dá halgartaim a luaitear thuas. I gcás gach ceann acu, cuirimid dhá mhodh i bhfeidhm chun ár dtéacs a chriptiú agus a dhíchriptiú:

Mar a fheiceann tú, tá 3 shiombail dhifriúla easpórtáilte againn anseo (ní onnmhairíonn Golang ach na haitheantóirí seo a thosaíonn leis an litir thuas):

  • EncryptCeasar - func (int, string) Teaghrán a chriptíonn an téacs leis an algartam Ceasar.
  • DecryptCeaser - func (int, sreangán) Teaghrán a dhíchódaíonn an téacs ag úsáid algartam Caeser,
  • VermanCipher - athróg den chineál vermanCipher, a chuireann 2 mhodh i bhfeidhm: Criptigh: sreang func (sreang) agus Díchriptigh: func () (* sreang, earráid)

Chun an breiseán seo a chur le chéile ní mór duit an t-ordú seo a leanas a rith:

go build -buildmode = breiseán -o plugin / cipher.so plugin / cipher.go

Faoi láthair níl aon rud speisialta ann - níl ach cúpla feidhm shimplí cruthaithe agus tá modúl curtha le chéile mar bhreiseán tríd an argóint -buildmode = breiseán a chur leis.

Luchtaigh agus déan tástáil ar an mbreiseán

Tosaíonn an spraoi nuair is mian linn an breiseán tiomsaithe a úsáid inár n-aip. Cruthaímid sampla simplí:

Ar dtús ní mór duit pacáiste breiseán Golang a iompórtáil. Níl ach dhá fheidhm ann - an chéad cheann ná leabharlann chomhroinnte a luchtú agus an dara ceann siombail easpórtáilte a fháil. Chun do leabharlann a luchtú, caithfidh tú an fheidhm Oscailte a úsáid, nach mór an cosán chuig do bhreiseán roinnte agus athróg aischuir an chineáil breiseáin a shonrú ina leith. Mura féidir an leabharlann a luchtú (e.g. cosán mícheart nó comhad millte), filleann an fheidhm seo an earráid is gá a láimhseáil.

Is é an chéad chéim eile gach siombail a onnmhairítear a luchtú ag baint úsáide as an modh cuardaigh. Míbhuntáiste beag ná go gcaithfidh tú gach feidhm a onnmhairítear a luchtú ar leithligh. Mar sin féin, is féidir leat ilfheidhmeanna a chur le chéile ar an mbealach céanna agus a rinne tú don tsiombail VermanCipher. Tar éis duit na siombailí uile a theastaíonn uait a úsáid a luchtú, ní mór duit iad a thiontú go dtí an cineál ceart. Is teanga clóscríofa go statach í Golang, mar sin níl aon bhealach eile ann chun na siombailí seo a úsáid gan réitigh. Cuimhnigh, má tá athróg á easpórtáil agat a chuireann roinnt modhanna i bhfeidhm caithfidh tú é a chaitheamh ar an gcineál ceart comhéadain (bhí orm an comhéadan encryptionEngine a shainiú chun é seo a láimhseáil). \ Newline \ líne nua

Úsáid an t-ordú seo a leanas chun an aip a thiomsú agus a rith:

téigh tóg app.go ./app

San aschur, ba cheart duit an téacs criptithe agus díchriptithe a fheiceáil mar fhianaise go bhfuil an algartam ag obair i gceart.

Úsáid an breiseán in AWS Lambda

D’fhonn ár mbreiseán a úsáid in AWS Lambda caithfimid roinnt athruithe a dhéanamh inár bhfeidhmchlár:

  • Cuireann AWS Lambda sraitheanna suas san eolaire / opt sa choimeádán Lambda, mar sin ní mór dúinn ár mbreiseán a luchtú ón eolaire seo.
  • Ní mór dúinn feidhm láimhseála a chruthú a úsáidfidh inneall Lambda chun ár n-imeacht tástála a phróiseáil.

Sa chnuasach seo a leanas tá ár bhfeidhmchlár atá curtha in oiriúint le húsáid ag an Lambda:

Mar a fheiceann tú, tá an cur i bhfeidhm an-chosúil leis an gceann roimhe seo. Níor athraíomar ach an t-eolaire as a luchtaíomar ár mbreiseán agus chuireamar an fhreagairt feidhme leis in ionad luachanna a phriontáil. Le haghaidh tuilleadh faisnéise ar lambdas a scríobh i Golang, féach cáipéisíocht AWS.

Imscaradh AWS Lambda

Tá dhá bhealach ann chun feidhmeanna agus sraitheanna AWS Lambda a úsáid. Is féidir leat pacáiste comhbhrúite a chruthú agus a uaslódáil de láimh nó an creat ardteicneolaíochta a úsáid a fhágfaidh go mbeidh sé i bhfad níos éasca agus níos gasta. I gcás fhormhór mo thionscadail úsáidim an creat gan freastalaí. Dá bhrí sin d'ullmhaigh mé an comhad cumraíochta simplí serverless.yml leis an uirlis seo cheana féin:

Seirbhís: cipherService frameworkVersion: "> = 1.28.0 <2.0.0" Soláthraí: Ainm: aws Runtime: go1.x
Sraitheanna: cipherLayer: Conair: runtimes comhoiriúnach le bosca bruscair / breiseán: - go1.x.
Feidhmeanna: Inneall: Láimhseálaí: bin / cipherEngine Pacáiste: Eisiamh: - ./** Cuir san áireamh: - ./bin/cipherEngine Sraitheanna: - {Tag: CipherLayerLambdaLayer}

Sa limistéar sraithe, tá sraith amháin sainithe againn leis an gcosán go dtí an breiseán a cruthaíodh cheana - soláthraítear é seo in éineacht le feidhm Lambda. Féadfaidh tú suas le 5 leibhéal éagsúla a shainiú, a bhfuil a n-ord an-tábhachtach. Tá siad suite san eolaire céanna / optúil, mar sin is féidir le sraitheanna leis an líon níos airde comhaid a fhorscríobh ó na sraitheanna a cuireadh suas roimhe seo. Maidir le gach leibhéal caithfidh tú 2 pharaiméadar ar a laghad a shonrú: cosán chuig an eolaire leis an bhfoinse leibhéal (cosán do chomhad dénártha breiseán i do chás) agus liosta na rith-rithí comhoiriúnacha.

Is é an chéad chuid eile feidhm áit a shainíonn tú liosta na bhfeidhmeanna atá le cur i bhfeidhm. Maidir le gach feidhm ní mór duit ar a laghad an cosán chuig an bhfeidhmchlár tiomsaithe a shonrú. Ina theannta sin, ní mór dúinn paraiméadar na sraithe a shainiú ag tagairt don chiseal a shainmhínítear thuas. Cuirfidh sé seo an ciseal leis ár bhfeidhm Lambda go huathoibríoch le linn an imscartha. Is é an rud greannmhar más mian leat tagairt a dhéanamh don acmhainn seo, caithfidh tú d’ainm ciseal Lambda a thiontú go TitleCased agus an iarmhír LambdaLayer a chur leis. Dealraíonn sé gur chuir an fhoireann gan freastalaí i bhfeidhm é ar an mbealach seo chun an choimhlint maidir leis na cineálacha éagsúla acmhainní a réiteach.

Chomh luath agus a bheidh ár gcomhad cumraíochta serverless.yml réidh, is é an rud deireanach a chaithfidh tú a dhéanamh ná ár n-aip a thiomsú, a plugáil isteach agus a imscaradh. Chuige seo is féidir linn makefile simplí a úsáid:

.PHONY: Tóg imscaradh BuildPlugin go glan
thógáil: dep secure -v env GOOS = Linux go build -ldflags = "-s -w" -o bin / cipherEngine cipherEngine / main.go
buildPlugin: env GOOS = Linux go build -ldflags = "- s -w" -buildmode = Breiseán -o bin / breiseán / cipher.so ../plugin/cipher.go
glan: rm -rf ./bin ./vendor Gopkg.lock
imscaradh: clean buildPlugin build sls imscartha --verbose

Féadfaidh tú d’fheidhm a thógáil agus a imscaradh tríd an ordú seo a leanas a rith:

sholáthar

Bain triail as AWS Lambda

Mar a luadh cheana, ritheann Cód AWS Lambda mar fhreagra ar an ócáid. Mar sin féin, níl aon spreagthóirí imeachta cumraithe againn agus mar sin ní féidir glaoch orthu gan ár gcabhair. Ní mór dúinn é a dhéanamh de láimh leis an gCreat Serverless nó leis an uirlis awscli:

sls glaonna -f feidhm-ainm aws lambda agairt - feidhm-ainm feidhm-ainm aschur-comhad

Sa fhreagra, ba cheart duit an t-aschur céanna a fheiceáil agus a bhí roimhe seo, rud a chruthaíonn go bhfuil ár bhfeidhm lambda ag obair i gceart agus go luchtaíonn an breiseán ón gciseal breise. Anois is féidir leat feidhmeanna eile a chruthú a úsáideann an tsraith chéanna nó fiú é a roinnt le cuntais AWS eile.

Achoimre

Ba mhór an spraoi é modúil Golang a úsáid agus tástáil a dhéanamh ar conas a d’fhéadfaí iad a chomhtháthú leis na Sraitheanna Lambda AWS nua-eisithe. Tá an leabharlann breiseán iontach iontach, ach ní féidir í a úsáid ach i gcásanna áirithe mar gheall ar a teorainneacha agus sonraíocht Golang. Sílim nach bhfuil breiseáin ag teastáil nó fiú indéanta d’fhormhór na bhforbróirí atá ag obair ar na tionscadail chaighdeánacha. Ní féidir liom ach smaoineamh ar dhá chúis:

  • Halgartaim casta a chur i bhfeidhm is féidir leis na feidhmchláir eile a úsáid, i.e. Halgartaim códaithe físe nó criptithe.
  • Déan do algartam a roinnt le daoine eile gan an cód a fhoilsiú.