ஒரு NodeJS பயன்பாட்டை சேவையகமற்றதாக்குவது எப்படி

அதே தலைப்பில் இது மற்றொரு இடுகை என்பதால், நான் சேவையகத்தை நேசிக்கிறேன் என்று நம்புகிறேன்.

இது ஒரு எளிய, சேவையற்ற REST API என்றால், AWS இல் உங்கள் அமைப்பு: லாம்ப்டா + API நுழைவாயில் மிகவும் வெளிப்படையானது.

ஆனால் உங்கள் பின்தளத்தில் இருக்கும் பிற (மைக்ரோ) சேவைகளைப் பற்றி எப்படி? உங்களுக்குத் தெரியும், உங்கள் பயன்பாட்டுக் குறியீடு அனைத்தையும் ஒரே ஒற்றைக்கல் AWS லாம்ப்டா செயல்பாட்டில் போடுவது சிறந்த யோசனை அல்ல.

சவால்

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

முயற்சி 1. ஏபிஐ நுழைவாயில்

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

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

சரி, நீங்கள் API ஐ தனிப்பட்டதாக்கலாம், ஆனால் பாதுகாப்பு வழிகாட்டுதல்கள் மிகவும் குறைவாகவே உள்ளன:

உங்கள் API ஐ பாதுகாப்பாக செயல்படுத்த அனுமதிக்க API கேட்வே வள கொள்கைகளைப் பயன்படுத்தலாம்:
* ஒரு குறிப்பிட்ட AWS கணக்கின் பயனர் * குறிப்பிடப்பட்ட மூல ஐபி முகவரி வரம்புகள் அல்லது சிஐடிஆர் தொகுதிகள் * குறிப்பிடப்பட்ட மெய்நிகர் தனியார் மேகங்கள் (விபிசிக்கள்) அல்லது விபிசி இறுதிப் புள்ளிகள் (எந்தக் கணக்கிலும்)

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

பரிசோதனை 2. லாம்ப்டா

ஒவ்வொரு மைக்ரோ சர்வீஸையும் ஒரு தனி AWS லாம்ப்டாவில் ஏன் வைக்கக்கூடாது? இது சிக்கலை தீர்க்குமா?

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

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

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

முயற்சி 3. கொழுப்பு லாம்ப்டா

ஒற்றை லாம்ப்டாவாக (ஏபிஐ நுழைவாயில் இல்லாமல், நிச்சயமாக) பல இறுதி புள்ளிகளை நாம் உண்மையில் வழங்க முடியுமா?

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

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

அதை நான் செயல்படுத்துவது இங்கே: aws-rpc. இந்த நோட்ஜெஸ் தொகுதி நீங்கள் ஒரு பொருளை மட்டுமே கடந்து செல்லும் லாம்ப்டாஹான்ட்லர் செயல்பாட்டை அம்பலப்படுத்துகிறது, மேலும் இது லாம்ப்டாவை அணுகக்கூடிய அனைத்து பயனர்களுக்கும் தானாகவே கிடைக்கிறது:

'aws-rpc' இலிருந்து {lambdaHandler import ஐ இறக்குமதி செய்க; './TestServiceImpl' இலிருந்து {TestServiceImpl import ஐ இறக்குமதி செய்க;
// இது உங்கள் ஸ்டேஜிங் யூனிட் // இதைத்தான் நீங்கள் லாம்ப்டா ஹேண்ட்லர் செயல்பாடு ஏற்றுமதி கான்ஸ்ட் ஹேண்ட்லர் = லாம்ப்டாஹான்ட்லர் (புதிய டெஸ்ட் சர்வீஸ்இம்ப்ல் ());

இப்போது நீங்கள் "ஹேண்ட்லரை" AWS Lambda ஆக வழங்கலாம். முறைகளை எவ்வாறு அழைப்பது:

'./TestService' இலிருந்து {TestService import இறக்குமதி செய்க;
const client = createClient க்காக காத்திருங்கள் ("லாம்ப்டாநேம்", "சோதனை"); console.log (client.test () க்காக காத்திருங்கள்;

கிளையண்ட் ஸ்டப் பொருளுக்கு முறைகளை உருவாக்க, உதாரணத்தில் உள்ளதைப் போல கிளையண்டை உருவாக்க அனைத்து முறை பெயர்களையும் அனுப்ப வேண்டும் என்பதை நினைவில் கொள்க.

இது அவசியம், ஏனென்றால் டைப்ஸ்கிரிப்ட் இடைமுகங்களைப் பற்றிய இயக்கநேர தகவல் JS இல் இல்லை. நான் அதை சுருக்க வகுப்புகளுடன் செயல்படுத்த முடியும், ஆனால் எனக்கு ¯ \ _ () _ / like பிடிக்கவில்லை.

போனஸ்! நீங்கள் அனைத்தையும் உள்நாட்டில் செய்யலாம்!

உங்கள் உள்ளூர் வளர்ச்சி சூழல் முடிந்தவரை வசதியாக இருப்பது மிகவும் முக்கியம் என்று நான் நினைக்கிறேன். இந்த காரணத்திற்காக, AWS க்கு எதையும் வழங்காமல் உள்நாட்டிலும் சேவையையும் கிளையண்டையும் இயக்கும் திறனையும் சேர்த்துள்ளேன் (செயல்பாடுகளை ரன் சர்வீஸ் மற்றும் கிரியேட் கிளையண்ட் பார்க்கவும்). கிட்ஹப் களஞ்சியத்தில் உதாரணங்களைக் காணலாம்.

சுருக்கம்

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

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

இந்த தலைப்பை நீங்கள் விரும்பினால், பின்வருவனவற்றையும் படியுங்கள்:

  • சிறந்த சேவையற்ற கட்டமைப்பை எவ்வாறு உருவாக்குவது என்பதை நீங்கள் கற்றுக் கொள்ள வேண்டும்
  • இலவச சர்வர்லெஸ் சிஐ / சிடி பைப்லைனை உருவாக்குவது எப்படி: 3 எளிய எடுத்துக்காட்டுகள்
  • பிராந்தியங்கள் முழுவதும் டைனமோடிபியின் எளிதான பிரதி
  • பல பிராந்திய பயன்பாட்டை எவ்வாறு உருவாக்குவது (மற்றும் கட்டண பூஜ்ஜியம்)
  • ஜாவா வலை பயன்பாட்டை சேவையகமற்றதாக்குங்கள்

கருத்துகள், விருப்பங்கள் மற்றும் பங்குகள் மிகவும் பாராட்டப்படுகின்றன. கீழே!