ప్లగ్ చేయదగిన గోలాంగ్ అప్లికేషన్‌ను ఎలా సృష్టించాలి మరియు AWS లాంబ్డా పొరల నుండి ప్రయోజనం.

గోలాంగ్ - ఇది మీ దృష్టికి ఎందుకు విలువైనది?

గోలాంగ్ అనేది గూగుల్ అభివృద్ధి చేసిన మరియు అమలు చేసిన ఓపెన్ సోర్స్ ప్రోగ్రామింగ్ భాష. ఇది ఆధునిక అనువర్తనాల్లో, ముఖ్యంగా క్లౌడ్‌లో చాలా విస్తృతంగా ఉపయోగించబడుతుంది. అవి చాలా లక్షణం:

  • గోలాంగ్ స్థిరంగా వ్రాయబడింది - ఇది తక్కువ సౌలభ్యాన్ని అందిస్తుంది, కానీ లోపాల నుండి మిమ్మల్ని రక్షిస్తుంది,
  • ఇది ఆబ్జెక్ట్ ఓరియెంటెడ్ కాదు. అయినప్పటికీ, మీరు నిర్మాణాలు మరియు ఇంటర్‌ఫేస్‌లను సృష్టించవచ్చు మరియు ఇది 4 OOP సూత్రాలలో 3 కి దారితీస్తుంది: డేటా సంగ్రహణ, ఎన్‌క్యాప్సులేషన్ మరియు పాలిమార్ఫిజం. తప్పిపోయినదంతా వారసత్వం
  • గోరౌటిన్స్! - నేను ఇప్పటివరకు ఉపయోగించిన కాంతి తంతువుల యొక్క ఉత్తమ అమలు. గో ఆపరేటర్‌తో మీరు కొత్త థ్రెడ్‌ను సులభంగా సృష్టించవచ్చు మరియు వేర్వేరు గోరౌటిన్‌ల మధ్య ఛానెల్‌ల ద్వారా కమ్యూనికేట్ చేయవచ్చు.
  • ఇది అన్ని డిపెండెన్సీలతో ఒకే బైనరీ ఫైల్‌లో కంపైల్ చేయబడింది - ప్యాకేజీ విభేదాలు లేవు!

వ్యక్తిగతంగా, నేను ప్రతిరోజూ ఉపయోగించే గొప్ప భాషగా గోలాంగ్‌ను భావిస్తున్నాను. అయితే, ఈ వ్యాసం మీ మొదటి ఫంక్షన్‌ను సృష్టించడం లేదా "హలో వరల్డ్" ముద్రించడం గురించి కాదు. నేను మీకు కొంచెం అధునాతన అంశాలను చూపిస్తాను. మీరు ఒక అనుభవశూన్యుడు మరియు గోలాంగ్ గురించి మరింత తెలుసుకోవాలనుకుంటే, దయచేసి ప్రధాన పేజీని సందర్శించండి.

AWS లాంబ్డా & గోలాంగ్

AWS లాంబ్డా పబ్లిక్ క్లౌడ్‌లో అత్యంత ప్రాచుర్యం పొందిన సర్వర్‌లెస్ కంప్యూటింగ్ సేవల్లో ఒకటి, దీనిని అమెజాన్ వెబ్ సర్వీసెస్ నవంబర్ 2014 లో విడుదల చేసింది. సర్వర్‌లను సెటప్ చేయకుండా లేదా నిర్వహించకుండా డైనమోడిబి, ఎస్ఎన్ఎస్ లేదా హెచ్‌టిటిపి ట్రిగ్గర్‌ల వంటి వాటికి ప్రతిస్పందనగా మీరు మీ కోడ్‌ను అమలు చేయవచ్చు! నిజంగా గొప్పది ఏమిటో మీకు తెలుసా? ఇది జనవరి 2018 నుండి గోలాంగ్ పదానికి మద్దతు ఇస్తోంది. AWS లాంబ్డాతో పనిచేయడం నిజంగా సులభం - మీ కోడ్ మరియు అన్ని డిపెండెన్సీలతో సంపీడన ప్యాకేజీని అప్‌లోడ్ చేయండి (మీరు గోలాంగ్ ఉపయోగిస్తుంటే సింగిల్ బైనరీ).

ఫాస్ట్ ఫార్వార్డ్, 4 సంవత్సరాల తరువాత, 2018 రీ: ఇన్వెంట్ AWS లాంబ్డా లేయర్‌లను విడుదల చేస్తుంది, ఇది ఒకటి లేదా బహుళ AWS ఖాతాలలో వివిధ ఫంక్షన్ల కోసం భాగస్వామ్యం చేయబడిన డేటాను నిల్వ చేయడానికి మరియు నిర్వహించడానికి మిమ్మల్ని అనుమతిస్తుంది! ఉదాహరణకు, మీరు పైథాన్ ఉపయోగిస్తుంటే, మీరు అన్ని డిపెండెన్సీలను అదనపు పొరలో ఉంచవచ్చు, తరువాత వాటిని ఇతర లాంబ్డాస్ ఉపయోగించవచ్చు. ప్రతి జిప్ చేసిన ప్యాకేజీకి వేర్వేరు డిపెండెన్సీలను జోడించాల్సిన అవసరం లేదు! AWS లాంబ్డాకు సంకలనం చేయబడిన బైనరీ ఫైళ్ళను అప్‌లోడ్ చేయాల్సిన అవసరం ఉన్నందున గోలాంగ్ ప్రపంచంలో పరిస్థితి భిన్నంగా ఉంటుంది. AWS లాంబ్డా పొరల నుండి మనం ఎలా ప్రయోజనం పొందగలం? సమాధానం సులభం - గోలాంగ్ ప్లగిన్‌లతో మాడ్యులర్ అప్లికేషన్‌ను రూపొందించండి!

గోలాంగ్ ప్లగిన్లు - మాడ్యులర్ అప్లికేషన్‌ను రూపొందించడానికి ఒక మార్గం

Go1.8 లో విడుదలైన లక్షణం గోలాంగ్ ప్లగిన్లు, ఇది షేర్డ్ లైబ్రరీలను (.సో ఫైల్స్) డైనమిక్‌గా లోడ్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. మీ కోడ్‌లో కొంత భాగాన్ని ప్రత్యేక లైబ్రరీకి ఎగుమతి చేయడానికి లేదా వేరొకరు సృష్టించిన మరియు సంకలనం చేసిన ప్లగ్‌ఇన్‌ను ఉపయోగించడానికి మీకు అవకాశం ఉంది. అయితే, కొన్ని పరిమితులు ఉన్నాయని ప్రోత్సహించడం:

  • మీ ప్లగ్ఇన్ ఒకే ప్రధాన మాడ్యూల్ అయి ఉండాలి,
  • మీరు ELF చిహ్నంగా ఎగుమతి చేయబడిన విధులు మరియు వేరియబుల్స్ మాత్రమే లోడ్ చేయవచ్చు.
  • స్టాటిక్ టైపింగ్ కారణంగా, మీరు లోడ్ చేసిన ప్రతి చిహ్నాన్ని సరైన రకానికి మార్చాలి. చెత్త దృష్టాంతంలో, మీరు మీ కోడ్‌లో సరైన ఇంటర్‌ఫేస్‌ను నిర్వచించాలి,
  • ఇది Linux మరియు MacOS లలో మాత్రమే పనిచేస్తుంది. వ్యక్తిగతంగా, నేను దీనిని ప్రతికూలతగా చూడలేను :)

మీ మొదటి ప్లగ్‌ఇన్‌ను సృష్టించండి మరియు పరీక్షించండి

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

  • సీజర్ సాంకేతికలిపి మొదట జూలియస్ ఆగిపోయిన అల్గోరిథం. ఇది టెక్స్ట్‌లోని ప్రతి అక్షరాన్ని పేర్కొన్న స్థలాల సంఖ్యను మారుస్తుంది. ఉదాహరణకు, మీరు గోలాంగ్ అనే పదాన్ని కీ 4 తో గుప్తీకరించాలనుకుంటే, మీకు ktpek లభిస్తుంది. డిక్రిప్షన్ అదే విధంగా పనిచేస్తుంది. మీరు చేయాల్సిందల్లా అక్షరాలను వ్యతిరేక దిశలో తరలించడం.
  • వర్మన్ సాంకేతికలిపి అదే బదిలీ ఆలోచన ఆధారంగా సీజర్ సాంకేతికలిపిని పోలి ఉంటుంది. వ్యత్యాసం ఏమిటంటే, మీరు ప్రతి అక్షరాన్ని వేర్వేరు సంఖ్యల స్థానాలకు తరలించండి. వచనాన్ని డీక్రిప్ట్ చేయడానికి, టెక్స్ట్ గుప్తీకరించిన స్థానాలతో మీకు కీ అవసరం. ఉదాహరణకు, మీరు గోలాంగ్ అనే పదాన్ని కీ [-1, 4, 7, 20, 4, -2] తో గుప్తీకరించాలనుకుంటే, మీకు భవిష్యత్తు లభిస్తుంది.

ఈ ఉదాహరణ యొక్క పూర్తి అమలు ఇక్కడ చూడవచ్చు.

ప్లగిన్ అమలు

కింది స్నిప్పెట్ పైన పేర్కొన్న రెండు అల్గోరిథంల అమలును కలిగి ఉంది. ప్రతిదానికీ, మేము మా వచనాన్ని గుప్తీకరించడానికి మరియు వ్యక్తీకరించడానికి రెండు పద్ధతులను అమలు చేస్తాము:

మీరు గమనిస్తే, మేము ఇక్కడ 3 వేర్వేరు చిహ్నాలను ఎగుమతి చేసాము (పై అక్షరంతో ప్రారంభమయ్యే ఈ ఐడెంటిఫైయర్‌లను మాత్రమే గోలాంగ్ ఎగుమతి చేస్తుంది):

  • ఎన్క్రిప్ట్ సీజర్ - ఫంక్ (పూర్ణాంకానికి, స్ట్రింగ్) స్ట్రింగ్ వచనాన్ని సీజర్ అల్గోరిథంతో గుప్తీకరిస్తుంది.
  • DecryptCeaser - func (int, string) సీజర్ అల్గోరిథం ఉపయోగించి వచనాన్ని డీకోడ్ చేసే స్ట్రింగ్,
  • వర్మన్‌సిఫర్ - వర్మన్‌సిఫర్ రకం యొక్క వేరియబుల్, ఇది 2 పద్ధతులను అమలు చేస్తుంది: గుప్తీకరించండి: ఫంక్ (స్ట్రింగ్) స్ట్రింగ్ మరియు డిక్రిప్ట్: ఫంక్ () (* స్ట్రింగ్, లోపం)

ఈ ప్లగ్ఇన్ కంపైల్ చేయడానికి మీరు ఈ క్రింది ఆదేశాన్ని అమలు చేయాలి:

build -buildmode = plugin -o plugin / cipher.so plugin / cipher.go

ప్రస్తుతం ప్రత్యేకంగా ఏమీ లేదు - కొన్ని సాధారణ ఫంక్షన్లు సృష్టించబడ్డాయి మరియు -buildmode = ప్లగ్ఇన్ ఆర్గ్యుమెంట్‌ను జోడించడం ద్వారా మాడ్యూల్ ప్లగిన్‌గా కంపైల్ చేయబడింది.

ప్లగిన్ను లోడ్ చేసి పరీక్షించండి

మేము మా అనువర్తనంలో సంకలనం చేసిన ప్లగిన్‌ను ఉపయోగించాలనుకున్నప్పుడు సరదా ప్రారంభమవుతుంది. ఒక సాధారణ ఉదాహరణను సృష్టిద్దాం:

మొదట మీరు గోలాంగ్ ప్లగిన్ ప్యాకేజీని దిగుమతి చేసుకోవాలి. ఇది రెండు ఫంక్షన్లను మాత్రమే కలిగి ఉంది - మొదటిది షేర్డ్ లైబ్రరీని లోడ్ చేయడం మరియు రెండవది ఎగుమతి చేసిన చిహ్నాన్ని కనుగొనడం. మీ లైబ్రరీని లోడ్ చేయడానికి, మీరు ఓపెన్ ఫంక్షన్‌ను ఉపయోగించాలి, దీని కోసం మీ షేర్డ్ ప్లగ్-ఇన్‌కు మార్గం మరియు ప్లగ్-ఇన్ రకం యొక్క రిటర్న్ వేరియబుల్ పేర్కొనబడాలి. లైబ్రరీని లోడ్ చేయలేకపోతే (ఉదా. తప్పు మార్గం లేదా దెబ్బతిన్న ఫైల్), ఈ ఫంక్షన్ నిర్వహించాల్సిన లోపాన్ని అందిస్తుంది.

తదుపరి దశ ఏమిటంటే, ఎగుమతి చేసిన ప్రతి చిహ్నాన్ని శోధన పద్ధతిని ఉపయోగించి లోడ్ చేయడం. ఒక చిన్న ప్రతికూలత ఏమిటంటే, మీరు ఎగుమతి చేసిన ప్రతి ఫంక్షన్‌ను విడిగా లోడ్ చేయాలి. అయినప్పటికీ, మీరు VermanCipher చిహ్నం కోసం చేసిన విధంగానే బహుళ విధులను మిళితం చేయవచ్చు. మీరు ఉపయోగించాలనుకుంటున్న అన్ని చిహ్నాలను లోడ్ చేసిన తర్వాత, మీరు వాటిని సరైన రకానికి మార్చాలి. గోలాంగ్ అనేది స్థిరంగా టైప్ చేసిన భాష, కాబట్టి ప్రసారం చేయకుండా ఈ చిహ్నాలను ఉపయోగించడానికి వేరే మార్గం లేదు. గుర్తుంచుకోండి, మీరు కొన్ని పద్ధతులను అమలు చేసే వేరియబుల్‌ను ఎగుమతి చేస్తుంటే మీరు దానిని సరైన ఇంటర్ఫేస్ రకానికి ప్రసారం చేయాలి (దీన్ని నిర్వహించడానికి నేను ఎన్‌క్రిప్షన్ ఇంజిన్ ఇంటర్‌ఫేస్‌ను నిర్వచించాల్సి వచ్చింది). \ న్యూలైన్ \ న్యూలైన్

అనువర్తనాన్ని కంపైల్ చేయడానికి మరియు అమలు చేయడానికి క్రింది ఆదేశాన్ని ఉపయోగించండి:

app.go ను నిర్మించండి ./app

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

AWS లాంబ్డాలో ప్లగిన్ ఉపయోగించండి

AWS లాంబ్డాలో మా ప్లగ్‌ఇన్‌ను ఉపయోగించడానికి, మేము మా అప్లికేషన్‌లో కొన్ని మార్పులు చేయాలి:

  • AWS లాంబ్డా లాంబ్డా కంటైనర్‌లోని / ఆప్ట్ డైరెక్టరీలో పొరలను మౌంట్ చేస్తుంది, కాబట్టి మేము ఈ డైరెక్టరీ నుండి మా ప్లగ్-ఇన్‌ను లోడ్ చేయాలి.
  • మా పరీక్ష ఈవెంట్‌ను ప్రాసెస్ చేయడానికి లాంబ్డా ఇంజిన్ ఉపయోగించే హ్యాండ్లర్ ఫంక్షన్‌ను మనం సృష్టించాలి.

కింది స్నిప్పెట్‌లో మా అప్లికేషన్ ఉంది, ఇది లాంబ్డా ఉపయోగించటానికి అనువుగా ఉంది:

మీరు గమనిస్తే, అమలు మునుపటి మాదిరిగానే ఉంటుంది. మేము మా ప్లగ్‌ఇన్‌ను లోడ్ చేసిన డైరెక్టరీని మార్చాము మరియు విలువలను ముద్రించడానికి బదులుగా ఫంక్షన్ ప్రతిస్పందనను జోడించాము. గోలాంగ్‌లో లాంబ్‌డాస్ రాయడం గురించి మరింత సమాచారం కోసం, AWS డాక్యుమెంటేషన్ చూడండి.

AWS లాంబ్డా విస్తరణ

AWS లాంబ్డా విధులు మరియు పొరలను అమర్చడానికి రెండు మార్గాలు ఉన్నాయి. మీరు సంపీడన ప్యాకేజీని మానవీయంగా సృష్టించవచ్చు మరియు అప్‌లోడ్ చేయవచ్చు లేదా అధునాతన ఫ్రేమ్‌వర్క్‌ను ఉపయోగించవచ్చు, ఇది చాలా సులభం మరియు వేగంగా చేస్తుంది. నా చాలా ప్రాజెక్టులకు నేను సర్వర్‌లెస్ ఫ్రేమ్‌వర్క్‌ను ఉపయోగిస్తాను. అందువల్ల నేను ఇప్పటికే ఈ సాధనంతో సరళమైన కాన్ఫిగరేషన్ ఫైల్ serverless.yml ను సిద్ధం చేసాను:

సేవ: సాంకేతికలిపి సేవ ఫ్రేమ్‌వర్క్ వెర్షన్: "> = 1.28.0 <2.0.0" ప్రొవైడర్: పేరు: aws రన్‌టైమ్: go1.x
పొరలు: సాంకేతికలిపి లేయర్: మార్గం: బిన్ / ప్లగ్ఇన్ అనుకూల రన్‌టైమ్‌లు: - go1.x
విధులు: ఇంజిన్: హ్యాండ్లర్: బిన్ / సాంకేతికలిపి ఇంజిన్ ప్యాకేజీ: మినహాయించు: - ./** చేర్చు: - ./bin/cipherEngine పొరలు: - {Ref: CipherLayerLambdaLayer}

లేయర్ ఏరియాలో, ఇప్పటికే సృష్టించబడిన ప్లగ్-ఇన్ మార్గంతో ఒకే పొరను నిర్వచించాము - ఇది లాంబ్డా ఫంక్షన్‌తో కలిసి అందించబడుతుంది. మీరు 5 వేర్వేరు స్థాయిల వరకు నిర్వచించవచ్చు, వీటి క్రమం నిజంగా ముఖ్యమైనది. అవి ఒకే / ఆప్ట్ డైరెక్టరీలో అమర్చబడి ఉంటాయి, కాబట్టి ఎక్కువ సంఖ్యలో ఉన్న పొరలు గతంలో అమర్చిన పొరల నుండి ఫైళ్ళను ఓవర్రైట్ చేయగలవు. ప్రతి స్థాయికి మీరు కనీసం 2 పారామితులను పేర్కొనాలి: స్థాయి మూలంతో డైరెక్టరీకి మార్గం (ప్లగ్-ఇన్ బైనరీ ఫైల్‌కు మీ కేసు మార్గంలో) మరియు అనుకూల రన్‌టైమ్‌ల జాబితా.

తదుపరి ఫంక్షన్ విభాగం మీరు అమలు చేయవలసిన ఫంక్షన్ల జాబితాను నిర్వచించే ప్రదేశం. ప్రతి ఫంక్షన్ కోసం మీరు కంపైల్ చేసిన అనువర్తనానికి కనీసం మార్గాన్ని పేర్కొనాలి. అదనంగా, పైన నిర్వచించిన పొరను సూచిస్తూ మేము పొర పరామితిని నిర్వచించాలి. ఇది విస్తరణ సమయంలో మా లాంబ్డా ఫంక్షన్‌కు పొరను స్వయంచాలకంగా జోడిస్తుంది. తమాషా ఏమిటంటే, మీరు ఈ వనరును సూచించాలనుకుంటే, మీరు మీ లాంబ్డా లేయర్ పేరును టైటిల్ కేస్‌గా మార్చాలి మరియు లాంబ్‌లేయర్ ప్రత్యయాన్ని జోడించాలి. వివిధ రకాల వనరులకు సంబంధించిన సంఘర్షణను పరిష్కరించడానికి సర్వర్‌లెస్ బృందం ఈ విధంగా అమలు చేసినట్లు తెలుస్తోంది.

మా కాన్ఫిగరేషన్ ఫైల్ serverless.yml సిద్ధమైన వెంటనే, మీరు చేయాల్సిందల్లా మా అనువర్తనాన్ని కంపైల్ చేయడం, ప్లగ్ ఇన్ చేయడం మరియు అమలు చేయడం. దీని కోసం మేము సాధారణ మేక్‌ఫైల్‌ను ఉపయోగించవచ్చు:

.ఫోనీ: బిల్డ్‌ప్లగిన్‌ను శుభ్రంగా అమర్చండి
బిల్డ్: dep safe -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 = ప్లగిన్ -o బిన్ / ప్లగిన్ / సాంకేతికలిపి.సో ../plugin/cipher.go
శుభ్రంగా: rm -rf ./bin ./vendor Gopkg.lock
నియోగించండి: క్లీన్ బిల్డ్ ప్లగిన్ బిల్డ్ స్ల్స్ డిప్లాయ్ --వర్బోస్

కింది ఆదేశాన్ని అమలు చేయడం ద్వారా మీరు మీ ఫంక్షన్‌ను రూపొందించవచ్చు మరియు అమలు చేయవచ్చు:

అందించడానికి

AWS లాంబ్డాను ప్రయత్నించండి

ముందే చెప్పినట్లుగా, ఈవెంట్‌కు ప్రతిస్పందనగా AWS లాంబ్డా కోడ్ నడుస్తుంది. అయినప్పటికీ, మేము ఏ ఈవెంట్ ట్రిగ్గర్‌లను కాన్ఫిగర్ చేయలేదు కాబట్టి వాటిని మా సహాయం లేకుండా పిలవలేము. సర్వర్‌లెస్ ఫ్రేమ్‌వర్క్ లేదా ఆవ్‌స్క్లి సాధనాన్ని ఉపయోగించి మేము దీన్ని మాన్యువల్‌గా చేయాలి:

sls calls -f function-name aws lambda invoke - ఫంక్షన్-పేరు ఫంక్షన్-పేరు అవుట్పుట్-ఫైల్

సమాధానంలో, మీరు మునుపటి మాదిరిగానే అవుట్‌పుట్‌ను చూడాలి, ఇది మా లాంబ్డా ఫంక్షన్ సరిగ్గా పనిచేస్తుందని మరియు అదనపు పొర నుండి ప్లగిన్ లోడ్ అవుతుందని రుజువు చేస్తుంది. ఇప్పుడు మీరు ఒకే పొరను ఉపయోగించే ఇతర ఫంక్షన్లను సృష్టించవచ్చు లేదా ఇతర AWS ఖాతాలతో పంచుకోవచ్చు.

సారాంశం

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

  • ఇతర అనువర్తనాలచే ఉపయోగించబడే సంక్లిష్టమైన అల్గారిథమ్‌ల అమలు, ఉదా. వీడియో కోడింగ్ లేదా గుప్తీకరణ అల్గోరిథంలు.
  • కోడ్‌ను ప్రచురించకుండా మీ అల్గోరిథంను ఇతరులతో పంచుకోండి.