சொருகக்கூடிய கோலாங் பயன்பாட்டை எவ்வாறு உருவாக்குவது மற்றும் AWS லாம்ப்டா அடுக்குகளிலிருந்து பயனடைவது.

கோலாங் - உங்கள் கவனத்திற்கு ஏன் மதிப்புள்ளது?

கோலாங் என்பது கூகிள் உருவாக்கிய மற்றும் செயல்படுத்தப்பட்ட ஒரு திறந்த மூல நிரலாக்க மொழி. இது நவீன பயன்பாடுகளில், குறிப்பாக மேகக்கட்டத்தில் மிகவும் பரவலாகப் பயன்படுத்தப்படுகிறது. அவை மிகவும் சிறப்பியல்பு அம்சங்கள்:

  • கோலாங் நிலையான முறையில் எழுதப்பட்டுள்ளது - இது குறைந்த நெகிழ்வுத்தன்மையை வழங்குகிறது, ஆனால் பிழைகளிலிருந்து உங்களைப் பாதுகாக்கிறது,
  • இது பொருள் சார்ந்ததல்ல. இருப்பினும், நீங்கள் கட்டமைப்புகள் மற்றும் இடைமுகங்களை உருவாக்கலாம், மேலும் இது 4 OOP கொள்கைகளில் 3 இல் விளைகிறது: தரவு சுருக்கம், இணைத்தல் மற்றும் பாலிமார்பிசம். காணாமல் போனவை அனைத்தும் பரம்பரை
  • கோரூட்டின்கள்! - நான் இதுவரை பயன்படுத்திய ஒளி நூல்களின் சிறந்த செயல்படுத்தல். கோ ஆபரேட்டர் மூலம் நீங்கள் எளிதாக ஒரு புதிய நூலை உருவாக்கலாம் மற்றும் வெவ்வேறு கோரூட்டின்களுக்கு இடையில் சேனல்கள் வழியாக தொடர்பு கொள்ளலாம்.
  • இது அனைத்து சார்புகளுடன் ஒற்றை பைனரி கோப்பில் தொகுக்கப்பட்டுள்ளது - மேலும் தொகுப்பு மோதல்கள் இல்லை!

தனிப்பட்ட முறையில், நான் ஒவ்வொரு நாளும் பயன்படுத்தும் மிகச் சிறந்த மொழியாக கோலாங் கருதுகிறேன். இருப்பினும், இந்த கட்டுரை உங்கள் முதல் செயல்பாட்டை உருவாக்குவது அல்லது "ஹலோ வேர்ல்ட்" அச்சிடுவது பற்றியது அல்ல. இன்னும் கொஞ்சம் மேம்பட்ட விஷயங்களை உங்களுக்குக் காண்பிப்பேன். நீங்கள் ஒரு தொடக்க மற்றும் கோலாங் பற்றி மேலும் அறிய விரும்பினால், தயவுசெய்து பிரதான பக்கத்தைப் பார்வையிடவும்.

AWS லாம்ப்டா & கோலாங்

AWS லாம்ப்டா பொது கிளவுட்டில் மிகவும் பிரபலமான சர்வர்லெஸ் கம்ப்யூட்டிங் சேவைகளில் ஒன்றாகும், இது அமேசான் வலை சேவைகளால் நவம்பர் 2014 இல் வெளியிடப்பட்டது. சேவையகங்களை அமைக்கவோ அல்லது நிர்வகிக்கவோ இல்லாமல் டைனமோடிபி, எஸ்என்எஸ் அல்லது எச்.டி.டி.பி தூண்டுதல்கள் போன்ற நிகழ்வுகளுக்கு பதிலளிக்கும் வகையில் உங்கள் குறியீட்டை இயக்கலாம்! உண்மையில் எது சிறந்தது என்று உங்களுக்குத் தெரியுமா? இது ஜனவரி 2018 முதல் கோலாங் காலத்திற்கு ஆதரவளித்து வருகிறது. AWS லாம்ப்டாவுடன் பணிபுரிவது மிகவும் எளிதானது - உங்கள் குறியீடு மற்றும் அனைத்து சார்புகளுடன் ஒரு சுருக்கப்பட்ட தொகுப்பைப் பதிவேற்றவும் (நீங்கள் கோலாங்கைப் பயன்படுத்துகிறீர்கள் என்றால் ஒற்றை பைனரி).

வேகமாக முன்னோக்கி, 4 ஆண்டுகளுக்குப் பிறகு, 2018 மறு: கண்டுபிடிப்பு AWS ஒன்று அல்லது பல AWS கணக்குகளில் பல்வேறு செயல்பாடுகளுக்காக பகிரப்பட்ட தரவை சேமித்து நிர்வகிக்க அனுமதிக்கும் லாம்ப்டா அடுக்குகளை வெளியிடுகிறது! எடுத்துக்காட்டாக, நீங்கள் பைத்தானைப் பயன்படுத்துகிறீர்கள் என்றால், எல்லா சார்புகளையும் கூடுதல் அடுக்கில் வைக்கலாம், பின்னர் அவை பிற லாம்ப்டாக்களால் பயன்படுத்தப்படலாம். ஒவ்வொரு ஜிப் செய்யப்பட்ட தொகுப்புக்கும் வெவ்வேறு சார்புகளைச் சேர்க்க வேண்டிய அவசியமில்லை! AWS லாம்ப்டா தொகுக்கப்பட்ட இருமங்களை பதிவேற்ற வேண்டியிருப்பதால் கோலாங் உலகில் நிலைமை வேறுபட்டது. AWS லாம்ப்டா அடுக்குகளிலிருந்து நாம் எவ்வாறு பயனடையலாம்? பதில் எளிது - கோலாங் செருகுநிரல்களுடன் ஒரு மட்டு பயன்பாட்டை உருவாக்குங்கள்!

கோலாங் செருகுநிரல்கள் - ஒரு மட்டு பயன்பாட்டை உருவாக்க ஒரு வழி

கோலாங் செருகுநிரல்கள் Go1.8 இல் வெளியிடப்பட்ட அம்சமாகும், இது பகிரப்பட்ட நூலகங்களை (.so கோப்புகள்) மாறும் வகையில் ஏற்ற அனுமதிக்கிறது. உங்கள் குறியீட்டின் ஒரு பகுதியை தனி நூலகத்திற்கு ஏற்றுமதி செய்ய அல்லது வேறொருவர் உருவாக்கிய மற்றும் தொகுத்த சொருகி பயன்படுத்த உங்களுக்கு விருப்பம் உள்ளது. இருப்பினும், சில வரம்புகள் உள்ளன என்பது ஊக்கமளிக்கிறது:

  • உங்கள் சொருகி ஒரு முக்கிய தொகுதியாக இருக்க வேண்டும்,
  • ELF சின்னங்களாக ஏற்றுமதி செய்யப்படும் செயல்பாடுகளையும் மாறிகளையும் மட்டுமே நீங்கள் ஏற்ற முடியும்.
  • நிலையான தட்டச்சு காரணமாக, ஏற்றப்பட்ட ஒவ்வொரு சின்னத்தையும் சரியான வகையாக மாற்ற வேண்டும். மோசமான சூழ்நிலையில், உங்கள் குறியீட்டில் சரியான இடைமுகத்தை நீங்கள் வரையறுக்க வேண்டும்,
  • இது லினக்ஸ் மற்றும் மேகோஸில் மட்டுமே இயங்குகிறது. தனிப்பட்ட முறையில், நான் இதை ஒரு பாதகமாக பார்க்கவில்லை :)

உங்கள் முதல் சொருகி உருவாக்கி சோதிக்கவும்

இப்போது எங்கள் முதல் சொருகி உருவாக்குவோம். உதாரணமாக, சரம் குறியாக்கத்திற்கான எளிய தொகுதியை உருவாக்குவோம். அடிப்படைகளுக்குச் சென்று சீசர் மற்றும் வெர்மன் ஆகிய இரண்டு எளிய குறியாக்க வழிமுறைகளை செயல்படுத்தலாம்.

  • சீசர் சைஃபர் என்பது ஜூலியஸ் நிறுத்தங்களால் முதலில் பயன்படுத்தப்படும் வழிமுறை ஆகும். இது உரையின் ஒவ்வொரு எழுத்தையும் குறிப்பிட்ட இடங்களின் எண்ணிக்கையை மாற்றுகிறது. எடுத்துக்காட்டாக, கோலாங் என்ற வார்த்தையை விசை 4 உடன் குறியாக்க விரும்பினால், உங்களுக்கு ktpek கிடைக்கும். மறைகுறியாக்கம் அதே வழியில் செயல்படுகிறது. நீங்கள் செய்ய வேண்டியதெல்லாம் எழுத்துக்களை எதிர் திசையில் நகர்த்துவதுதான்.
  • அதே மாற்றும் யோசனையின் அடிப்படையில் வெர்மன் சைஃபர் சீசர் மறைக்குறியீட்டைப் போன்றது. வித்தியாசம் என்னவென்றால், நீங்கள் ஒவ்வொரு எழுத்தையும் வெவ்வேறு எண்ணிக்கையிலான நிலைகளை நகர்த்துவீர்கள். உரையை மறைகுறியாக்க, உரை குறியாக்கப்பட்ட நிலைகளுடன் உங்களுக்கு விசை தேவை. எடுத்துக்காட்டாக, கோலாங் என்ற வார்த்தையை [-1, 4, 7, 20, 4, -2] விசையுடன் குறியாக்க விரும்பினால், உங்களுக்கு எதிர்காலம் கிடைக்கும்.

இந்த எடுத்துக்காட்டின் முழு செயல்பாட்டை இங்கே காணலாம்.

செருகுநிரல் செயல்படுத்தல்

பின்வரும் துணுக்கில் மேலே குறிப்பிடப்பட்ட இரண்டு வழிமுறைகளின் செயல்பாடுகள் உள்ளன. ஒவ்வொன்றிற்கும், எங்கள் உரையை குறியாக்க மற்றும் மறைகுறியாக்க இரண்டு முறைகளை நாங்கள் செயல்படுத்துகிறோம்:

நீங்கள் பார்க்க முடியும் என, நாங்கள் இங்கு 3 வெவ்வேறு சின்னங்களை ஏற்றுமதி செய்துள்ளோம் (மேலே உள்ள கடிதத்துடன் தொடங்கும் இந்த அடையாளங்காட்டிகளை மட்டுமே கோலாங் ஏற்றுமதி செய்கிறது):

  • EncryptCeasar - func (int, string) உரையை சீசர் வழிமுறையுடன் குறியாக்குகிறது.
  • DecryptCeaser - func (int, string) சீசர் வழிமுறையைப் பயன்படுத்தி உரையை டிகோட் செய்யும் சரம்,
  • VermanCipher - 2 முறைகளைச் செயல்படுத்தும் vermanCipher வகையின் மாறி: குறியாக்கம்: func (சரம்) சரம் மற்றும் மறைகுறியாக்கம்: func () (* சரம், பிழை)

இந்த சொருகி தொகுக்க நீங்கள் பின்வரும் கட்டளையை இயக்க வேண்டும்:

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

இப்போது சிறப்பு எதுவும் இல்லை - ஒரு சில எளிய செயல்பாடுகள் உருவாக்கப்பட்டுள்ளன மற்றும் -buildmode = சொருகி வாதத்தை சேர்ப்பதன் மூலம் ஒரு தொகுதி ஒரு சொருகி தொகுக்கப்பட்டுள்ளது.

சொருகி ஏற்ற மற்றும் சோதிக்கவும்

எங்கள் பயன்பாட்டில் தொகுக்கப்பட்ட சொருகி பயன்படுத்த விரும்பும்போது வேடிக்கை தொடங்குகிறது. ஒரு எளிய உதாரணத்தை உருவாக்குவோம்:

முதலில் நீங்கள் கோலாங் சொருகி தொகுப்பை இறக்குமதி செய்ய வேண்டும். இது இரண்டு செயல்பாடுகளை மட்டுமே கொண்டுள்ளது - முதலாவது பகிரப்பட்ட நூலகத்தை ஏற்றுவது மற்றும் இரண்டாவது ஏற்றுமதி செய்யப்பட்ட குறியீட்டைக் கண்டுபிடிப்பது. உங்கள் நூலகத்தை ஏற்ற, நீங்கள் திறந்த செயல்பாட்டைப் பயன்படுத்த வேண்டும், இதற்காக உங்கள் பகிரப்பட்ட செருகுநிரலுக்கான பாதை மற்றும் செருகுநிரல் வகை திரும்பும் மாறி குறிப்பிடப்பட வேண்டும். நூலகத்தை ஏற்ற முடியாவிட்டால் (எ.கா. தவறான பாதை அல்லது சேதமடைந்த கோப்பு), இந்த செயல்பாடு கையாள வேண்டிய பிழையை வழங்குகிறது.

அடுத்த படி, ஏற்றுமதி செய்யும் ஒவ்வொரு சின்னத்தையும் தேடல் முறையைப் பயன்படுத்தி ஏற்றுவது. ஒரு சிறிய குறைபாடு என்னவென்றால், நீங்கள் ஏற்றுமதி செய்த ஒவ்வொரு செயல்பாட்டையும் தனித்தனியாக ஏற்ற வேண்டும். இருப்பினும், நீங்கள் வெர்மன்சிஃபர் சின்னத்திற்கு செய்ததைப் போலவே பல செயல்பாடுகளையும் இணைக்கலாம். நீங்கள் பயன்படுத்த விரும்பும் அனைத்து சின்னங்களையும் ஏற்றிய பிறகு, அவற்றை சரியான வகைக்கு மாற்ற வேண்டும். கோலாங் என்பது நிலையான தட்டச்சு செய்யப்பட்ட மொழியாகும், எனவே இந்த சின்னங்களை வார்ப்பு இல்லாமல் பயன்படுத்த வேறு வழியில்லை. நினைவில் கொள்ளுங்கள், நீங்கள் ஒரு மாறியை ஏற்றுமதி செய்கிறீர்கள் என்றால், அதை நீங்கள் சரியான இடைமுக வகைக்கு அனுப்ப வேண்டிய சில முறைகளை செயல்படுத்துகிறீர்கள் (இதைக் கையாள நான் குறியாக்க எஞ்சின் இடைமுகத்தை வரையறுக்க வேண்டியிருந்தது). \ புதிய வரி \ புதிய வரி

பயன்பாட்டை தொகுத்து இயக்க பின்வரும் கட்டளையைப் பயன்படுத்தவும்:

app.go ஐ உருவாக்கவும் ./app

வெளியீட்டில், வழிமுறை சரியாக வேலை செய்கிறது என்பதற்கான சான்றாக மறைகுறியாக்கப்பட்ட மற்றும் மறைகுறியாக்கப்பட்ட உரையை நீங்கள் பார்க்க வேண்டும்.

AWS Lambda இல் சொருகி பயன்படுத்தவும்

AWS Lambda இல் எங்கள் சொருகி பயன்படுத்த, எங்கள் பயன்பாட்டில் சில மாற்றங்களை செய்ய வேண்டும்:

  • AWS Lambda லாம்ப்டா கொள்கலனில் / opt அடைவில் அடுக்குகளை ஏற்றுகிறது, எனவே இந்த கோப்பகத்திலிருந்து எங்கள் செருகுநிரலை ஏற்ற வேண்டும்.
  • எங்கள் சோதனை நிகழ்வை செயலாக்க லாம்ப்டா இயந்திரத்தால் பயன்படுத்தப்படும் ஒரு கையாளுதல் செயல்பாட்டை நாம் உருவாக்க வேண்டும்.

பின்வரும் துணுக்கில் எங்கள் பயன்பாடு உள்ளது, இது லாம்ப்டா பயன்படுத்த பயன்படுத்தப்பட்டது:

நீங்கள் பார்க்க முடியும் என, செயல்படுத்தல் முந்தையதைப் போன்றது. எங்கள் சொருகி ஏற்றப்பட்ட கோப்பகத்தை மாற்றினோம் மற்றும் மதிப்புகளை அச்சிடுவதற்கு பதிலாக செயல்பாட்டு பதிலைச் சேர்த்தோம். கோலாங்கில் லாம்ப்டாக்களை எழுதுவது பற்றிய கூடுதல் தகவலுக்கு, AWS ஆவணங்களைப் பார்க்கவும்.

AWS லாம்ப்டா வரிசைப்படுத்தல்

AWS லாம்ப்டா செயல்பாடுகள் மற்றும் அடுக்குகளை வரிசைப்படுத்த இரண்டு வழிகள் உள்ளன. சுருக்கப்பட்ட தொகுப்பை கைமுறையாக உருவாக்கலாம் மற்றும் பதிவேற்றலாம் அல்லது மேம்பட்ட கட்டமைப்பைப் பயன்படுத்தலாம், இது மிகவும் எளிதாகவும் வேகமாகவும் இருக்கும். எனது பெரும்பாலான திட்டங்களுக்கு நான் சேவையற்ற கட்டமைப்பைப் பயன்படுத்துகிறேன். எனவே இந்த கருவி மூலம் நான் ஏற்கனவே எளிய கட்டமைப்பு கோப்பு serverless.yml ஐ தயார் செய்துள்ளேன்:

சேவை: சைபர் சேவை கட்டமைப்பின் பதிப்பு: "> = 1.28.0 <2.0.0" வழங்குநர்: பெயர்: aws இயக்க நேரம்: go1.x
அடுக்குகள்: சைஃபர் லேயர்: பாதை: பின் / சொருகி இணக்கமான இயக்க நேரங்கள்: - go1.x
செயல்பாடுகள்: இயந்திரம்: கையாளுபவர்: பின் / சைபர்எங்கைன் தொகுப்பு: விலக்கு: - ./** உள்ளடக்கு: - ./bin/cipherEngine அடுக்குகள்: - {Ref: CipherLayerLambdaLayer}

லேயர் பகுதியில், ஏற்கனவே உருவாக்கப்பட்டுள்ள செருகுநிரலுக்கான பாதையுடன் ஒற்றை அடுக்கை வரையறுத்துள்ளோம் - இது லாம்ப்டா செயல்பாட்டுடன் வழங்கப்படுகிறது. நீங்கள் 5 வெவ்வேறு நிலைகள் வரை வரையறுக்கலாம், இதன் வரிசை மிகவும் முக்கியமானது. அவை ஒரே / விருப்ப கோப்பகத்தில் ஏற்றப்பட்டுள்ளன, எனவே அதிக எண்ணிக்கையிலான அடுக்குகள் முன்பு ஏற்றப்பட்ட அடுக்குகளிலிருந்து கோப்புகளை மேலெழுதும். ஒவ்வொரு நிலைக்கும் நீங்கள் குறைந்தது 2 அளவுருக்களைக் குறிப்பிட வேண்டும்: நிலை மூலத்துடன் கோப்பகத்திற்கான பாதை (செருகுநிரல் பைனரி கோப்புக்கான உங்கள் வழக்கு பாதையில்) மற்றும் இணக்கமான இயக்க நேரங்களின் பட்டியல்.

அடுத்த செயல்பாடு பிரிவு நீங்கள் செயல்படுத்த வேண்டிய செயல்பாடுகளின் பட்டியலை வரையறுக்கும் இடமாகும். ஒவ்வொரு செயல்பாட்டிற்கும் நீங்கள் தொகுக்கப்பட்ட பயன்பாட்டிற்கான பாதையையாவது குறிப்பிட வேண்டும். கூடுதலாக, மேலே வரையறுக்கப்பட்ட அடுக்கைக் குறிக்கும் வகையில் அடுக்கு அளவுருவை நாம் வரையறுக்க வேண்டும். வரிசைப்படுத்தலின் போது இது தானாகவே எங்கள் லாம்ப்டா செயல்பாட்டில் அடுக்கைச் சேர்க்கும். வேடிக்கையான விஷயம் என்னவென்றால், இந்த ஆதாரத்தை நீங்கள் குறிப்பிட விரும்பினால், உங்கள் லாம்ப்டா லேயரின் பெயரை டைட்டில் கேஸாக மாற்றி லாம்ப்டாலேயர் பின்னொட்டை சேர்க்க வேண்டும். பல்வேறு வகையான வளங்கள் தொடர்பான மோதலைத் தீர்க்க சேவையகமற்ற குழு இதை இந்த வழியில் செயல்படுத்தியதாகத் தெரிகிறது.

எங்கள் உள்ளமைவு கோப்பு serverless.yml தயாரானவுடன், நீங்கள் செய்ய வேண்டியது கடைசியாக தொகுத்தல், செருகுநிரல் மற்றும் எங்கள் பயன்பாட்டை வரிசைப்படுத்துதல். இதற்காக நாம் எளிய மேக்ஃபைலைப் பயன்படுத்தலாம்:

.போனி: பில்ட் பிளஜின் சுத்தமாக வரிசைப்படுத்தவும்
build: 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 Lambda ஐ முயற்சிக்கவும்

முன்னர் குறிப்பிட்டபடி, AWS லாம்ப்டா கோட் நிகழ்வுக்கு பதிலளிக்கும் வகையில் இயங்குகிறது. இருப்பினும், எந்தவொரு நிகழ்வு தூண்டுதல்களையும் நாங்கள் உள்ளமைக்கவில்லை, எனவே எங்கள் உதவியின்றி அவற்றை அழைக்க முடியாது. சேவையகமற்ற கட்டமைப்பு அல்லது awscli கருவியைப் பயன்படுத்தி அதை கைமுறையாக செய்ய வேண்டும்:

sls calls -f function-name aws lambda invoke - function-name function-name output-file

பதிலில், முன்பு போலவே அதே வெளியீட்டையும் நீங்கள் காண வேண்டும், இது எங்கள் லாம்ப்டா செயல்பாடு சரியாக வேலை செய்கிறது என்பதையும் கூடுதல் அடுக்கிலிருந்து சொருகி ஏற்றுகிறது என்பதையும் நிரூபிக்கிறது. இப்போது நீங்கள் அதே அடுக்கைப் பயன்படுத்தும் பிற செயல்பாடுகளை உருவாக்கலாம் அல்லது பிற AWS கணக்குகளுடன் பகிரலாம்.

சுருக்கம்

கோலாங் தொகுதிக்கூறுகளைப் பயன்படுத்துவதும், புதிதாக வெளியிடப்பட்ட AWS லாம்ப்டா அடுக்குகளுடன் அவை எவ்வாறு ஒருங்கிணைக்கப்படலாம் என்பதைச் சோதிப்பதும் மிகவும் வேடிக்கையாக இருந்தது. சொருகி நூலகம் மிகவும் சிறப்பானது, ஆனால் அதன் வரம்புகள் மற்றும் கோலாங் விவரக்குறிப்பு காரணமாக சில காட்சிகளில் மட்டுமே இதைப் பயன்படுத்த முடியும். நிலையான திட்டங்களில் பணிபுரியும் பெரும்பாலான டெவலப்பர்களுக்கு, செருகுநிரல்கள் தேவையில்லை அல்லது சாத்தியமில்லை என்று நான் நினைக்கிறேன். நான் இரண்டு காரணங்களை மட்டுமே சிந்திக்க முடியும்:

  • பிற பயன்பாடுகளால் பயன்படுத்தக்கூடிய சிக்கலான வழிமுறைகளை செயல்படுத்துதல், எ.கா. வீடியோ குறியீட்டு அல்லது குறியாக்க வழிமுறைகள்.
  • குறியீட்டை வெளியிடாமல் உங்கள் வழிமுறையை மற்றவர்களுடன் பகிரவும்.