نوڈ جے ایس ایپ کو سرور کے بغیر کیسے بنایا جائے

امید ہے کہ آپ کو سرور لیس سے اتنا ہی پیار ہوگا جتنا میں کرتا ہوں کیونکہ یہ اس عنوان پر ایک اور پوسٹ ہے۔

اگر یہ ایک سادہ سرور سے کم REST API ہے تو ، AWS میں آپ کا سیٹ اپ: لیمبڈا + API گیٹ وے بالکل واضح ہے۔

لیکن آپ کے پسدید میں دیگر (مائیکرو) خدمات کے بارے میں کیا خیال ہے؟ آپ جانتے ہو ، اپنے تمام اطلاق کے کوڈ کو ایک ہی یک سنگی ڈبلیو ایس لامبڈا فنکشن میں رکھنا بہترین خیال نہیں ہے۔

للکار

ہم اطلاق کے ماڈیولز کو بطور سرور لیس مائیکرو سروسز فراہم کرنا چاہتے ہیں جن کو ایک دوسرے کے ساتھ بات چیت بھی کرنی ہوگی۔ خدمات کے مابین مواصلات کو ترجیحی ایک قسم کی ACL کے ذریعہ منظم کرنا چاہئے۔

کوشش 1. API گیٹ وے

اس مسئلے کو حل کرنے کی کوشش کرتے وقت مجھے یہ پہلا سوچا گیا: صرف API گیٹ وے کے ذریعہ تمام مائیکرو سروسز کو بے نقاب کریں۔ مسئلہ یہ ہے کہ ... جو API تیار کی جارہی ہیں وہ عوامی ہیں۔

یہ مسئلہ کیوں ہے؟ مثال کے طور پر ، ہم نہیں چاہتے ہیں کہ بلنگ سروس دنیا میں کہیں بھی دستیاب ہو اگرچہ اجازت کے ذریعہ رسائی پر پابندی ہو۔

ٹھیک ہے ، آپ API کو نجی بنا سکتے ہیں ، لیکن حفاظتی ہدایات کافی محدود ہیں:

آپ API گیٹ وے ریسورس پالیسیاں استعمال کرسکتے ہیں تاکہ اپنے API کو محفوظ طریقے سے درخواست کی جاسکے:
* مخصوص AWS اکاؤنٹ کا صارف * مخصوص ماخذ IP ایڈریس کی حدود یا CIDR بلاکس * مخصوص ورچوئل پرائیویٹ کلاؤڈز (VPCs) یا VPC اختتامی نقطہ (کسی بھی اکاؤنٹ میں)

اس طرح کی خدمات کے مابین مواصلات پر قابو پانا کافی مشکل ہے۔ یہاں کرنے کا واحد طریقہ یہ ہے کہ خدمات کو علیحدہ وی ​​پی سی میں رکھنا ، جو بہت زیادہ کام ہے۔

تجربہ 2. لیمبڈا

ہم صرف ہر مائکروسروائس کو الگ AWS لیمبڈا میں کیوں نہیں رکھتے ہیں؟ کیا اس سے مسئلہ حل ہوگا؟

ہاں ، یہ واقعی ایک بے سرور مائکروسروائس ہے اور آپ آئی اے ایم پالیسیاں بین سروس کی رسائی کو بہتر بنانے کے ل use استعمال کرسکتے ہیں۔ تاہم ، یہ "آسان" نہیں ہے۔

میں جانتا ہوں کہ ان دنوں ڈلیوری یونٹ کے طور پر ایک چھوٹا سا کردار ادا کرنا خاصا معمول ہے۔ اگر آپ کی خدمت میں ایک سے زیادہ اختتامی نقطہ / طریقہ / فنکشن موجود ہیں تو ، یہ ایک سے زیادہ لیمبڈاس کی حیثیت سے فراہم کرنا ٹھیک ہے۔

میں فوائد کو سمجھتا ہوں ، لیکن آپ بحالی اور ترقی میں آسانی کی قربانی دیتے ہیں۔ نیز ، میں واقعتا L پسند نہیں کرتا ہوں کہ لیمبڈا کے افعال کے ایک سیٹ کے طور پر کسی خدمت کا بے نقاب ہوں۔ بلنگ سے نمٹنے والے کئی علیحدہ افعال کا تصور کریں؟ اب یہ محدود تناظر نہیں ہے۔ اگرچہ ایسے معاملات موجود ہیں جہاں ایسی گرانولیٹی کارآمد ثابت ہوسکتی ہے ، یہ ایک غیر معمولی معاملہ ہے۔

کوشش کریں 3. موٹی لیمبڈا

کیا ہم واقعتا a ایک لیمبڈا کے بطور متعدد اختتامی مقامات فراہم کرسکتے ہیں (بلاشبہ کسی API گیٹ وے کے)

اگر ہم یہ کرسکتے تو ہم پچھلے آپشن سے بھر پور فائدہ اٹھائیں گے ، لیکن ہم اپنے تعی unitsناتی یونٹوں کی گرانولیریٹی کا بھی انتخاب کرسکتے ہیں۔

میں جو چاہتا ہوں وہ یہ ہے: کوئی بھی خدمت جو آپ نافذ کرسکتے ہیں وہ طریقوں کے ساتھ ایک سادہ ، پرانا جے ایس اعتراض ہونا چاہئے۔ آپ کے آبجیکٹ اور اے ڈبلیو ایس لامبڈا کے مابین گلو کوڈ کی کچھ لائنیں شامل کرکے یہ کرنا بہت آسان ہے۔

اس پر میرا عمل درآمد یہاں ہے: aws-rpc. یہ نوڈجس ماڈیول لیمبڈا ہینڈلر فنکشن کو بے نقاب کرتا ہے جہاں آپ صرف ایک شے منتقل کرتے ہیں ، اور یہ خود بخود ایسے تمام صارفین کے لئے دستیاب ہوجاتا ہے جو لیمبڈا تک رسائی حاصل کرسکتے ہیں:

'aws-rpc' سے import lambdaHandler import درآمد کریں؛ './TestServiceImpl' سے {TestServiceImpl Import درآمد کریں؛
// یہ آپ کا اسٹیجنگ یونٹ ہے // یہ وہی ہے جس کو آپ لامبڈا ہینڈلر فنکشن ایکسپورٹ کانسٹ ہینڈلر = لیمبڈا ہینڈلر (نیا ٹیسٹسروس آئمپل)) کے طور پر بتاتے ہیں۔

اب آپ صرف ڈبلیو ایس لیمبڈا کے بطور "ہینڈلر" فراہم کرسکتے ہیں۔ طریقوں کو کال کرنے کا طریقہ:

'./TestS सर्विस' سے {ٹیسٹ سروس} درآمد کریں؛
const گاہک = createClient کا انتظار کریں ("لیمبڈا نام" ، "ٹیسٹ")؛ کنسول.لوگ (مؤکل کا انتظار کریں۔

براہ کرم نوٹ کریں کہ کلائنٹ اسٹب آبجیکٹ کے طریقے پیدا کرنے کے قابل ہونے کے ل you ، آپ کو مثال کے طور پر کلئینٹ بنانے کے ل method تمام طریقہ کار کے نام لازمی طور پر پاس کردیں۔

یہ ضروری ہے کیونکہ جے ایس کے پاس ٹائپ اسکرپٹ انٹرفیس پر رن ​​ٹائم معلومات نہیں ہیں۔ میں اسے تجریدی کلاسوں سے نافذ کرسکتا ہوں ، لیکن مجھے ¯ \ _ (ツ) _ / like پسند نہیں ہے۔

اضافی انعام! آپ یہ سب مقامی طور پر کر سکتے ہیں!

میرے خیال میں یہ بہت ضروری ہے کہ آپ کی مقامی ترقی کا ماحول جتنا ممکن ہو آرام دہ ہو۔ اسی وجہ سے ، میں نے مقامی طور پر سروس اور کلائنٹ کو ایڈ ڈبلیو ایس کے لئے کچھ بھی فراہم کیے بغیر چلانے کی اہلیت بھی شامل کردی ہے (فنکشنز رن سروس اور تخلیق کلینٹ دیکھیں)۔ آپ گٹ ہب کے ذخیروں میں مثالیں تلاش کرسکتے ہیں۔

خلاصہ

جب آپ ان خدمات میں کھو جاتے ہیں جو بادل فراہم کرنے والے آپ کے بنیادی ڈھانچے کی پیش کش کرتے ہیں اور اس کی بحالی کرتے ہیں تو یہ کرنا بہت آسان ہے۔

میں ہمیشہ آسان اور واضح حل کا انتخاب کرتا ہوں جس کے بارے میں میں سوچ سکتا ہوں۔ نیز ، ہمیشہ یہ بات ذہن میں رکھیں کہ بہت سے تراکیب اور طریق کار دوسرے پلیٹ فارمز سے دوبارہ استعمال کیے جاسکتے ہیں (بولڈ نوڈ جے ایس لیمبڈا کا خیال جاوا کی دنیا کے نام نہاد بولڈ شیشے سے متاثر ہوتا ہے)۔

اگر آپ کو یہ عنوان اچھا لگتا ہے تو ، مندرجہ ذیل بھی پڑھیں:

  • آپ کو بغیر کسی سرور کے بہترین فن تعمیر کی تعمیر کے بارے میں جاننے کی ضرورت ہے
  • مفت سرور لیس سی آئی / سی ڈی پائپ لائن بنانے کا طریقہ: 3 آسان مثالیں
  • خطوں میں DynamoDB کی آسان نقل
  • ملٹی ریجنل ایپلیکیشن (اور پے زیرو) کی تعمیر کا طریقہ
  • جاوا ویب اپلی کیشن کو بے محل بنائیں

تبصرے ، لائکس اور شیئرز کو بہت سراہا گیا ہے۔ نیچے!