Conas aip NodeJS a dhéanamh gan freastalaí

Tá súil agam go dtaitníonn Serverless leat an oiread agus is féidir liom, mar is post eile é seo ar an ábhar céanna.

Más API REST simplí gan freastalaí é, tá do shocrú in AWS: Geata Lambda + API soiléir go leor.

Ach céard faoi sheirbhísí (micrea) eile a d’fhéadfadh a bheith ag do backend? Tá a fhios agat, ní hé an smaoineamh is fearr do chód iarratais go léir a fhilleadh isteach i bhfeidhm monolithic AWS Lambda amháin.

An dúshlán

Ba mhaith linn modúil iarratais a sholáthar go simplí mar mhicrea-sheirbhísí gan freastalaí a mbíonn orthu cumarsáid a dhéanamh lena chéile freisin. B’fhearr cumarsáid idir seirbhísí a rialáil le cineál ACL.

Iarracht 1. Geata API

Is é seo an chéad smaoineamh a bhí agam agus mé ag iarraidh an fhadhb a réiteach: nocht gach micrea-sheirbhís trí API Gateway. Is í an fhadhb atá ann ... tá na APIanna atá á gcruthú poiblí.

Cén fáth gur fadhb é sin? Mar shampla, nílimid ag iarraidh go mbeidh seirbhís billeála ar fáil ar fud an domhain fiú má tá rochtain teoranta ag údarú.

Bhuel, is féidir leat an API a dhéanamh príobháideach, ach tá na treoirlínte slándála teoranta go leor:

Is féidir leat Polasaithe Acmhainní Geata API a úsáid chun ligean do API a agairt go sábháilte trí:
* Úsáideoir cuntas AWS sonrach * Raonta seoltaí IP foinse sonraithe nó bloic CIDR * Scamaill phríobháideacha fhíorúla shonraithe (VPCanna) nó críochphointí VPC (in aon chuntas)

Fágann sé sin go bhfuil sé deacair cumarsáid idir seirbhísí den sórt sin a rialú. Is é an t-aon bhealach chun é seo a dhéanamh ná seirbhísí a chur i VPCanna ar leithligh, ar iomarca oibre é.

Turgnamh 2. Lambda

Cén fáth nach gcuirimid gach micrea-sheirbhís in AWS Lambda ar leithligh? An réiteoidh sé seo an fhadhb?

Sea, is micrea-sheirbhís gan freastalaí é go deimhin agus is féidir leat beartais IAM a úsáid chun rochtain idirseirbhíse a bharrfheabhsú. Mar sin féin, níl sé seo "éasca".

Tá a fhios agam gur gnáthrud na laethanta seo ról beag bídeach a bheith agat mar aonad seachadta. Sa chás go bhfuil níos mó ná críochphointe / modh / feidhm amháin ag do sheirbhís, is ceart é a sholáthar mar lambdas iolrach.

Tuigim na buntáistí, ach déanann tú éascaíocht cothabhála agus forbartha. Chomh maith leis sin, ní maith liom an smaoineamh go nochtfaí seirbhís mar shraith feidhmeanna Lambda. Samhlaigh roinnt feidhmeanna ar leithligh a dhéileálann le billeáil? Ní comhthéacs teoranta é a thuilleadh. Cé go bhfuil cásanna ann inar féidir le gráinneacht den sórt sin a bheith úsáideach, is cás neamhchoitianta é.

Bain triail as 3. Fat Lambda

An féidir linn roinnt críochphointí a sholáthar mar Lambda amháin (gan geata API, ar ndóigh)?

Dá bhféadfaimis é seo a dhéanamh bhainfimis lántairbhe as an rogha roimhe seo, ach d’fhéadfaimis gráinneacht ár n-aonad imlonnaithe a roghnú.

Seo an rud ba mhaith liom a fheiceáil: Ba cheart go mbeadh seirbhís ar bith is féidir leat a chur i bhfeidhm ina seanchuspóir JS simplí le modhanna. Tá sé furasta go leor a dhéanamh trí chúpla líne de chód gliú a chur idir do réad agus AWS Lambda.

Seo mo chur i bhfeidhm air: aws-rpc. Nochtann an modúl nodejs seo feidhm lambdaHandler nuair nach ndéanann tú ach réad amháin a rith, agus cuirtear ar fáil go huathoibríoch é do gach úsáideoir atá in ann rochtain a fháil ar an lambda:

allmhairiú {lambdaHandler} ó 'aws-rpc'; Iompórtáil {TestServiceImpl} ó './TestServiceImpl';
// seo d’aonad stáitse // is é seo a shonraíonn tú mar fheidhm láimhseálaí lambda láimhseálaí const export = lambdaHandler (TestServiceImpl () nua);

Anois is féidir leat an "láimhseálaí" a sholáthar mar AWS Lambda. Conas na modhanna a ghlaoch:

Iompórtáil {TestService} ó './TestService';
const client = fanacht le createClient ("LambdaName", "tástáil"); console.log (fan le client.test ());

Tabhair faoi deara le do thoil, chun go mbeidh tú in ann modhanna a ghiniúint don réad stuama cliant, ní mór duit gach ainm modha a rith chuig createClient mar atá sa sampla.

Tá sé seo riachtanach toisc nach bhfuil faisnéis runtime ag JS faoi chomhéadain TypeScript. D’fhéadfainn é a chur i bhfeidhm le ranganna teibí, ach ní maith liom ¯ \ _ (ツ) _ / ¯.

Bónas! Is féidir leat é a dhéanamh go háitiúil ar fad!

Sílim go bhfuil sé an-tábhachtach go bhfuil do thimpeallacht forbartha áitiúla chomh compordach agus is féidir. Ar an gcúis seo, chuir mé leis an gcumas an tseirbhís agus an cliant a reáchtáil go háitiúil gan aon rud a imscaradh chuig AWS (féach feidhmeanna runService agus createClient) Is féidir leat samplaí a fháil i stór GitHub.

Achoimre

Tá sé an-éasca a dhéanamh nuair a théann tú amú ar na seirbhísí a thairgeann soláthraithe scamall agus déanann tú ollchóiriú ar do bhonneagar.

Roghnaím i gcónaí an réiteach is simplí agus is follasaí ar féidir liom smaoineamh air. Chomh maith leis sin, coinnigh i gcuimhne i gcónaí gur féidir go leor teicnící agus cleachtas a athúsáid ó ardáin eile (tá smaoineamh an NodeJS Lambda dána spreagtha ag spéaclaí troma mar a thugtar orthu ó shaol Java).

Más maith leat an topaic seo, léigh an méid seo a leanas freisin:

  • Ní mór duit foghlaim conas an ailtireacht gan freastalaí is fearr a thógáil
  • Conas Píblíne CI / CD Saor ó Fhreastalaí a Thógáil: 3 Sampla Simplí
  • Macasamhlú éasca ar DynamoDB ar fud réigiún
  • Conas Feidhmchlár Il-Réigiúnach a Thógáil (agus nialas a íoc)
  • Déan Java Web App Serverless

Is mór againn tuairimí, rudaí is maith leo. Bun suas!