నోడ్జెఎస్ అనువర్తనాన్ని సర్వర్‌లెస్‌గా ఎలా తయారు చేయాలి

నేను సర్వర్‌లెస్‌ను ఎంతగానో ప్రేమిస్తున్నానని ఆశిస్తున్నాను ఎందుకంటే ఇది ఈ అంశంపై మరొక పోస్ట్.

ఇది సాధారణ సర్వర్-తక్కువ REST API అయితే, AWS: లాంబ్డా + API గేట్‌వేలో మీ సెటప్ చాలా స్పష్టంగా ఉంది.

మీ బ్యాకెండ్ కలిగి ఉన్న ఇతర (మైక్రో) సేవల గురించి ఎలా? మీకు తెలుసా, మీ అప్లికేషన్ కోడ్ మొత్తాన్ని ఒకే ఏకశిలా AWS లాంబ్డా ఫంక్షన్‌లో చుట్టడం ఉత్తమ ఆలోచన కాదు.

సవాలు

మేము అనువర్తన మాడ్యూళ్ళను సర్వర్‌లెస్ మైక్రోసర్వీస్‌గా అందించాలనుకుంటున్నాము, అవి ఒకదానితో ఒకటి సంభాషించుకోవాలి. సేవల మధ్య కమ్యూనికేషన్ ఒక రకమైన ACL చేత నియంత్రించబడాలి.

ప్రయత్నం 1. API గేట్‌వే

సమస్యను పరిష్కరించడానికి ప్రయత్నిస్తున్నప్పుడు నేను కలిగి ఉన్న మొదటి ఆలోచన ఇది: API గేట్‌వే ద్వారా అన్ని మైక్రోసర్వీస్‌లను బహిర్గతం చేయండి. సమస్య ఏమిటంటే ... సృష్టించబడుతున్న API లు పబ్లిక్.

అది ఎందుకు సమస్య? ఉదాహరణకు, అధికారం ద్వారా ప్రాప్యత పరిమితం అయినప్పటికీ ప్రపంచవ్యాప్తంగా బిల్లింగ్ సేవ అందుబాటులో ఉండాలని మేము కోరుకోము.

సరే, మీరు API ని ప్రైవేట్‌గా చేయవచ్చు, కానీ భద్రతా మార్గదర్శకాలు చాలా పరిమితం:

మీ API ని సురక్షితంగా అమలు చేయడానికి అనుమతించడానికి మీరు API గేట్‌వే వనరుల విధానాలను ఉపయోగించవచ్చు:
* నిర్దిష్ట AWS ఖాతా యొక్క వినియోగదారు * పేర్కొన్న మూలం IP చిరునామా పరిధులు లేదా CIDR బ్లాక్స్ * పేర్కొన్న వర్చువల్ ప్రైవేట్ మేఘాలు (VPC లు) లేదా VPC ఎండ్ పాయింట్స్ (ఏదైనా ఖాతాలో)

ఇటువంటి సేవల మధ్య కమ్యూనికేషన్‌ను నియంత్రించడం చాలా కష్టమవుతుంది. ఇక్కడ చేయటానికి ఏకైక మార్గం సేవలను ప్రత్యేక VPC లలో ఉంచడం, ఇది చాలా ఎక్కువ పని.

ప్రయోగం 2. లాంబ్డా

మేము ప్రతి మైక్రోసర్వీస్‌ను ప్రత్యేక AWS లాంబ్డాలో ఎందుకు ఉంచకూడదు? ఇది సమస్యను పరిష్కరిస్తుందా?

అవును, ఇది నిజంగా సర్వర్‌లెస్ మైక్రోసర్వీస్, మరియు మీరు ఇంటర్-సర్వీస్ యాక్సెస్‌ను ఆప్టిమైజ్ చేయడానికి IAM విధానాలను ఉపయోగించవచ్చు. అయితే, ఇది "సులభం" కాదు.

డెలివరీ యూనిట్‌గా చిన్న పాత్ర పోషించడం ఈ రోజుల్లో చాలా సాధారణమని నాకు తెలుసు. మీ సేవకు ఒకటి కంటే ఎక్కువ ఎండ్ పాయింట్ / పద్ధతి / ఫంక్షన్ ఉన్న సందర్భంలో, దాన్ని బహుళ లాంబ్డాస్ గా అందించడం సరైందే.

నేను ప్రయోజనాలను అర్థం చేసుకున్నాను, కాని మీరు నిర్వహణ మరియు అభివృద్ధి సౌలభ్యాన్ని త్యాగం చేస్తారు. అలాగే, లాంబ్డా ఫంక్షన్ల సమితిగా సేవను బహిర్గతం చేయాలనే ఆలోచన నాకు నిజంగా ఇష్టం లేదు. బిల్లింగ్‌తో వ్యవహరించే అనేక వేర్వేరు విధులను g హించుకోండి? ఇది ఇకపై పరిమిత సందర్భం కాదు. అటువంటి గ్రాన్యులారిటీ ఉపయోగపడే సందర్భాలు ఉన్నప్పటికీ, ఇది చాలా అరుదైన సందర్భం.

ప్రయత్నించండి 3. ఫ్యాట్ లాంబ్డా

ఒకే లాంబ్డా (API గేట్‌వే లేకుండా, వాస్తవానికి) గా మనం చాలా ఎండ్ పాయింట్లను అందించగలమా?

మేము దీన్ని చేయగలిగితే మేము మునుపటి ఎంపిక యొక్క పూర్తి ప్రయోజనాన్ని పొందుతాము, కాని మన విస్తరణ యూనిట్ల గ్రాన్యులారిటీని కూడా ఎంచుకోవచ్చు.

నేను చూడాలనుకుంటున్నది ఇక్కడ ఉంది: మీరు అమలు చేయగల ఏదైనా సేవ పద్ధతులతో సరళమైన, పాత JS వస్తువుగా ఉండాలి. మీ వస్తువు మరియు AWS లాంబ్డా మధ్య గ్లూ కోడ్ యొక్క కొన్ని పంక్తులను జోడించడం ద్వారా చేయడం చాలా సులభం.

ఇక్కడ నా అమలు: aws-rpc. ఈ నోడ్జ్ మాడ్యూల్ మీరు ఒక వస్తువును మాత్రమే పాస్ చేసే లాంబ్డాహ్యాండ్లర్ ఫంక్షన్‌ను బహిర్గతం చేస్తుంది మరియు లాంబ్డాను యాక్సెస్ చేయగల వినియోగదారులందరికీ ఇది స్వయంచాలకంగా అందుబాటులో ఉంటుంది:

'aws-rpc' నుండి {lambdaHandler import దిగుమతి చేయండి; './TestServiceImpl' నుండి {TestServiceImpl import దిగుమతి చేయండి;
// ఇది మీ స్టేజింగ్ యూనిట్ // ఇది మీరు లాంబ్డా హ్యాండ్లర్ ఫంక్షన్ ఎగుమతి కాస్ట్ హ్యాండ్లర్ = లాంబ్డాహ్యాండ్లర్ (కొత్త టెస్ట్ సర్వీస్ఇంప్ల్ ()) గా పేర్కొన్నది;

ఇప్పుడు మీరు "హ్యాండ్లర్" ను AWS లాంబ్డాగా అందించవచ్చు. పద్ధతులను ఎలా పిలవాలి:

'./TestService' నుండి {TestService import దిగుమతి చేయండి;
const client = createClient కోసం వేచి ఉండండి ("లాంబ్డానామ్", "పరీక్ష"); console.log (client.test () కోసం వేచి ఉండండి;

క్లయింట్ స్టబ్ ఆబ్జెక్ట్ కోసం పద్ధతులను రూపొందించడానికి, మీరు ఉదాహరణలో ఉన్నట్లుగా క్లయింట్‌ను సృష్టించడానికి అన్ని పద్ధతి పేర్లను పాస్ చేయాలి.

టైప్‌స్క్రిప్ట్ ఇంటర్‌ఫేస్‌ల గురించి రన్‌టైమ్ సమాచారం JS కి లేనందున ఇది అవసరం. నేను దానిని నైరూప్య తరగతులతో అమలు చేయగలను, కాని నాకు ¯ \ _ () _ / like ఇష్టం లేదు.

అదనపు! మీరు స్థానికంగా ఇవన్నీ చేయవచ్చు!

మీ స్థానిక అభివృద్ధి వాతావరణం సాధ్యమైనంత సౌకర్యంగా ఉండటం చాలా ముఖ్యం అని నా అభిప్రాయం. ఈ కారణంగా, AWS కోసం ఏదైనా కేటాయించకుండా స్థానికంగా సేవ మరియు క్లయింట్‌ను అమలు చేసే సామర్థ్యాన్ని కూడా నేను జోడించాను (ఫంక్షన్‌లను రన్‌సర్వీస్ మరియు క్రియేట్ క్లయింట్ చూడండి). మీరు GitHub రిపోజిటరీలో ఉదాహరణలను కనుగొనవచ్చు.

సారాంశం

క్లౌడ్ ప్రొవైడర్లు అందించే సేవలను మీరు కోల్పోయినప్పుడు మరియు మీ మౌలిక సదుపాయాలను సరిదిద్దడం చాలా సులభం.

నేను ఎప్పుడూ ఆలోచించగలిగే సరళమైన మరియు స్పష్టమైన పరిష్కారాన్ని ఎన్నుకుంటాను. అలాగే, ఇతర ప్లాట్‌ఫారమ్‌ల నుండి అనేక పద్ధతులు మరియు అభ్యాసాలను తిరిగి ఉపయోగించవచ్చని ఎల్లప్పుడూ గుర్తుంచుకోండి (బోల్డ్ నోడ్జెఎస్ లాంబ్డా యొక్క ఆలోచన జావా ప్రపంచం నుండి బోల్డ్ గ్లాసెస్ అని పిలవబడేది).

మీరు ఈ అంశాన్ని ఇష్టపడితే, ఈ క్రింది వాటిని కూడా చదవండి:

  • ఉత్తమ సర్వర్‌లెస్ ఆర్కిటెక్చర్‌ను ఎలా నిర్మించాలో మీరు నేర్చుకోవాలి
  • ఉచిత సర్వర్‌లెస్ CI / CD పైప్‌లైన్‌ను ఎలా నిర్మించాలి: 3 సాధారణ ఉదాహరణలు
  • ప్రాంతాలలో డైనమోడిబి యొక్క సులభమైన ప్రతిరూపం
  • బహుళ-ప్రాంతీయ అనువర్తనాన్ని ఎలా నిర్మించాలి (మరియు జీరో చెల్లించండి)
  • జావా వెబ్ అనువర్తనాన్ని సర్వర్‌లెస్‌గా చేయండి

వ్యాఖ్యలు, ఇష్టాలు మరియు వాటాలు చాలా ప్రశంసించబడ్డాయి. క్రింద నుండి పైకి!