Apache APISIX के साथ serverless APIs को प्रबंधित करें

Bobur Umurzokov

Bobur Umurzokov

January 18, 2023

Technology

सर्वरलेस कंप्यूटिंग डेवलपर्स को इंफ्रास्ट्रक्चर प्रबंधित करने की आवश्यकता को समाप्त करके एप्लिकेशन बनाने में तेजी लाने में सक्षम बनाती है। क्लाउड में सर्वरलेस APIs के साथ, क्लाउड सेवा प्रदाता कोड चलाने के लिए आवश्यक इंफ्रास्ट्रक्चर को स्वचालित रूप से प्रोविजन, स्केल और प्रबंधित करता है। इस लेख में, आप सीखेंगे कि Java-आधारित सर्वरलेस APIs को प्रबंधित करने के लिए Apache APISIX API Gateway को Azure functions के साथ कैसे एकीकृत किया जाए।

सीखने के उद्देश्य

आप इस लेख में निम्नलिखित सीखेंगे:

  • सर्वरलेस APIs क्या हैं?
  • जटिल सर्वरलेस API ट्रैफिक को प्रबंधित करने में API Gateway की भूमिका।
  • Apache APISIX Gateway को कैसे सेट अप करें।
  • Azure Functions के साथ सर्वरलेस APIs कैसे बनाएं।
  • सर्वरलेस APIs को अपस्ट्रीम सेवाओं के रूप में कैसे एक्सपोज़ करें।
  • APISIX प्रमाणीकरण प्लगइन्स के साथ सर्वरलेस APIs को कैसे सुरक्षित करें।
  • रेट-लिमिटिंग पॉलिसीज़ कैसे लागू करें।

Apache APISIX अतिरिक्त प्लगइन्स प्रदान करता है जिनका उपयोग AWS Lambda जैसे अन्य सर्वरलेस समाधानों के साथ किया जा सकता है।

प्रैक्टिकल ट्यूटोरियल शुरू करने से पहले, आइए कुछ अवधारणाओं को समझें।

सर्वरलेस APIs क्या हैं?

सर्वरलेस APIs पारंपरिक APIs के समान हैं, सिवाय इसके कि वे सर्वरलेस बैकएंड का उपयोग करते हैं। व्यवसायों और डेवलपर्स के लिए, सर्वरलेस कंप्यूटिंग का मतलब है कि उन्हें अब सर्वर रखरखाव या स्केलिंग के बारे में चिंता करने की आवश्यकता नहीं है। इसके अलावा, सर्वरलेस APIs स्केलिंग की समस्या से बचते हैं क्योंकि वे हर बार एक अनुरोध किए जाने पर सर्वर संसाधन बनाते हैं। सर्वरलेस APIs लेटेंसी को कम करते हैं क्योंकि वे एक ओरिजिन सर्वर पर होस्ट किए जाते हैं। अंतिम लेकिन कम नहीं, सर्वरलेस कंप्यूटिंग पारंपरिक विकल्पों जैसे कि पूरे माइक्रोसर्विसेज बनाने की तुलना में कहीं अधिक लागत-प्रभावी है।

Azure function का उपयोग करके सर्वरलेस APIs

Azure Function क्लाउड में छोटे कोड टुकड़ों को चलाने का एक सरल तरीका है। आपको उस कोड को होस्ट करने के लिए आवश्यक इंफ्रास्ट्रक्चर के बारे में चिंता करने की आवश्यकता नहीं है। आप फ़ंक्शन को C#, Java, JavaScript, PowerShell, Python, या समर्थित भाषाओं में सूचीबद्ध किसी भी भाषा में लिख सकते हैं।

Azure Functions के साथ, आप वेब ऐप्स के लिए HTTP APIs को तेजी से बना सकते हैं बिना वेब फ्रेमवर्क्स की परेशानी के। Azure Functions सर्वरलेस है, इसलिए आपसे केवल तब चार्ज किया जाता है जब एक HTTP एंडपॉइंट को कॉल किया जाता है। जब एंडपॉइंट्स का उपयोग नहीं किया जा रहा होता है, तो आपसे कोई चार्ज नहीं किया जाता है। ये दो चीजें मिलकर Azure Functions जैसे सर्वरलेस प्लेटफॉर्म्स को APIs के लिए एक आदर्श विकल्प बनाती हैं जहां आप ट्रैफिक में अप्रत्याशित स्पाइक्स का अनुभव करते हैं।

सर्वरलेस APIs ट्रैफिक प्रबंधन के लिए API Gateway

API Gateway सर्वरलेस API का मूलभूत हिस्सा है क्योंकि यह एक परिभाषित API और उस API के अनुरोधों को संभालने वाले फ़ंक्शन के बीच कनेक्शन के लिए जिम्मेदार है। सर्वरलेस-आधारित APIs आर्किटेक्चर में API Gateway के कई लाभ हैं। API Gateway की प्राथमिक एज कार्यक्षमताओं जैसे प्रमाणीकरण, रेट थ्रॉटलिंग, ऑब्जर्वेबिलिटी, कैशिंग, आदि के अलावा, यह सर्वरलेस APIs को इनवोक करने, इवेंट्स को सब्सक्राइब करने, फिर उन्हें कॉलबैक्स का उपयोग करके प्रोसेस करने और पूरी तरह से कस्टम सर्वरलेस फ़ंक्शन लॉजिक के साथ बाहरी प्राधिकरण सेवाओं को फॉरवर्ड प्रमाणीकरण अनुरोध भेजने में सक्षम है।

Apache APISIX डेमो के साथ सर्वरलेस APIs प्रबंधित करें

पर्याप्त सैद्धांतिक ज्ञान के साथ, अब हम प्रैक्टिकल सत्र में कूद सकते हैं। हम GitHub पर होस्ट किए गए एक उदाहरण प्रोजेक्ट रेपो apisix-manage-serverless-apis का उपयोग करते हैं। आप इस ट्यूटोरियल में उपयोग किए गए स्रोत कोड और नमूना curl कमांड्स पा सकते हैं।

हमारे मिनी-प्रोजेक्ट के लिए, हम Java में लिखे गए दो सरल Azure फ़ंक्शन्स के साथ काम करेंगे जो Product और Review सेवाओं के लिए हमारे सर्वरलेस APIs का अनुकरण करते हैं।

पूर्वापेक्षाएँ

प्रोजेक्ट सेट अप करें

पहली चीज आप GitHub से प्रोजेक्ट रेपो को क्लोन करें:

git clone https://github.com/Boburmirzo/apisix-manage-serverless-apis.git

प्रोजेक्ट फ़ोल्डर को अपने पसंदीदा कोड एडिटर में खोलें। ट्यूटोरियल VS Code का उपयोग करता है।

Apache APISIX चलाएं

Apache APISIX और Azure फ़ंक्शन्स को स्थानीय रूप से चलाने के लिए, आप इन चरणों का पालन कर सकते हैं:

एक नया टर्मिनल विंडो खोलें और प्रोजेक्ट के रूट फ़ोल्डर से docker compose up कमांड चलाएं:

docker compose up -d

उपरोक्त कमांड Apache APISIX और etcd को Docker के साथ चलाएगा। उदाहरण के लिए, यदि आपकी मशीन पर Docker डेस्कटॉप इंस्टॉल है, तो आप वहां चल रहे कंटेनर्स देख सकते हैं:

Apisix Docker पर चल रहा है

हमने इस डेमो में APISIX को हमारे स्थानीय वातावरण में इंस्टॉल किया है लेकिन आप इसे Azure पर भी डिप्लॉय कर सकते हैं और इसे Azure Container Instance पर चला सकते हैं। निम्नलिखित ट्यूटोरियल देखें।

Azure फ़ंक्शन्स चलाएं

फिर, /upstream फ़ोल्डर पर नेविगेट करें:

mvn clean install mvn azure-functions:run

दो फ़ंक्शन्स एक टर्मिनल विंडो में शुरू होंगे। आप अपने ब्राउज़र में दोनों सर्वरलेस APIs का अनुरोध कर सकते हैं:

उदाहरण के लिए:

Products सर्वरलेस API

Reviews सर्वरलेस API

Azure फ़ंक्शन्स डिप्लॉय करें

अगला, हम फ़ंक्शन्स कोड को Azure Function App पर डिप्लॉय करते हैं नीचे दिए गए कमांड को चलाकर:

mvn azure-functions:deploy

या आप बस Azure पर फ़ंक्शन प्रोजेक्ट को डिप्लॉय करने के लिए इस ट्यूटोरियल का पालन कर सकते हैं।

ध्यान दें कि फ़ंक्शन ऐप का नाम आपके artifactId के आधार पर यादृच्छिक रूप से जेनरेट किया जाता है, जिसमें एक यादृच्छिक संख्या जोड़ी जाती है। ट्यूटोरियल कमांड्स में, फ़ंक्शन ऐप का नाम serverless-apis का उल्लेख किया गया है।

यह सुनिश्चित करने के लिए कि हमारा फ़ंक्शन काम कर रहा है, हम सीधे इसके URL को ब्राउज़र में अनुरोध करके एक इनवोकेशन कॉल का परीक्षण कर सकते हैं:

https://serverless-apis.azurewebsites.net/api/products https://serverless-apis.azurewebsites.net/api/reviews

APISIX में सर्वरलेस APIs को एक्सपोज़ करना

एक बार सेटअप पूरा हो जाने के बाद, अब हम सर्वरलेस Azure फ़ंक्शन APIs को APISIX में अपस्ट्रीम सेवाओं के रूप में एक्सपोज़ करेंगे। ऐसा करने के लिए, हमें products और reviews सर्वरलेस बैकएंड APIs के लिए azure-function प्लगइन सक्षम के साथ एक नया Route बनाने की आवश्यकता है।

यदि किसी रूट पर azure-function प्लगइन सक्षम है, तो APISIX उस रूट के पथ पर अनुरोधों को सुनता है, और फिर उस अनुरोध से पैरामीटर्स के साथ रिमोट Azure फ़ंक्शन कोड को इनवोक करता है।

Products के लिए एक रूट बनाएं

Products फ़ंक्शन के लिए एक रूट बनाने के लिए, निम्नलिखित कमांड चलाएं:

curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "name": "Create a route with Azure function plugin", "plugins": { "azure-functions": { "function_uri": "https://serverless-apis.azurewebsites.net/api/products", "ssl_verify": false } }, "uri": "/products" }'

ध्यान दें कि हमने azure-functions प्लगइन के ssl_verify एट्रिब्यूट को false पर सेट किया है ताकि केवल डेमो उद्देश्य के लिए SSL वेरिफिकेशन को अक्षम किया जा सके। आप इसे सक्षम भी कर सकते हैं ताकि APISIX से Azure Functions तक अधिक सुरक्षित अनुरोध किए जा सकें। अन्य कॉन्फ़िगरेशन पैरामीटर्स सीखें।

एक curl अनुरोध के साथ परीक्षण करें

हम curl का उपयोग करके एक अनुरोध भेज सकते हैं, यह देखने के लिए कि APISIX पथ पर सही ढंग से सुन रहा है और अनुरोध को अपस्ट्रीम सेवा पर सफलतापूर्वक फॉरवर्ड कर रहा है:

curl -i -XGET http://127.0.0.1:9080/products HTTP/1.1 200 OK [ { "id": 1, "name": "Product1", "description": "Description1" }, { "id": 2, "name": "Product2", "description": "Description2" } ]

बढ़िया! हमें Azure Function पर वास्तविक सर्वरलेस API से प्रतिक्रिया मिली।

अगला, हम reviews फ़ंक्शन के लिए समान कॉन्फ़िगरेशन करेंगे।

Reviews के लिए एक रूट बनाएं और परीक्षण करें

दूसरा रूट बनाएं जिसमें Azure फ़ंक्शन प्लगइन सक्षम हो:

curl http://127.0.0.1:9180/apisix/admin/routes/2 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "azure-functions": { "function_uri": "https://serverless-apis.azurewebsites.net/api/reviews", "ssl_verify": false } }, "uri": "/reviews" }'

सर्वरलेस API प्रतिक्रिया का परीक्षण करें:

curl -i -XGET http://127.0.0.1:9080/reviews

इस सेक्शन में, हमने नया रूट पेश किया और हमारे सर्वरलेस APIs में azure-functions प्लगइन जोड़ा ताकि APISIX रिमोट Azure फ़ंक्शन्स को इनवोक कर सके और ट्रैफिक को प्रबंधित कर सके। निम्नलिखित सेक्शन्स में, हम सीखेंगे कि API उपभोक्ताओं को प्रमाणित कैसे करें और रेट-लिमिटिंग जैसी रनटाइम पॉलिसीज़ कैसे लागू करें।

APISIX प्रमाणीकरण प्लगइन्स के साथ सर्वरलेस APIs को सुरक्षित करें

अब तक, हमारे सर्वरलेस APIs सार्वजनिक हैं और अनधिकृत उपयोगकर्ताओं द्वारा एक्सेस किए जा सकते हैं। इस सेक्शन में, हम प्रमाणीकरण सुविधा को सक्षम करेंगे ताकि अनधिकृत अनुरोधों को सर्वरलेस APIs तक पहुंचने से रोका जा सके।

Apache APISIX API अनुरोधों से जुड़ी पहचान को क्रेडेंशियल और टोकन वैलिडेशन के माध्यम से सत्यापित कर सकता है। साथ ही, यह यह निर्धारित करने में सक्षम है कि कौन सा ट्रैफिक API से बैकएंड सेवाओं तक पास होने के लिए अधिकृत है। आप सभी उपलब्ध प्रमाणीकरण प्लगइन्स की जांच कर सकते हैं।

आइए हमारे सर्वरलेस APIs के लिए एक नया उपभोक्ता बनाएं और मौजूदा रूट के लिए basic-auth प्लगइन जोड़ें ताकि केवल अनुमति प्राप्त उपयोगकर्ता ही उन्हें एक्सेस कर सकें।

सर्वरलेस APIs के लिए एक नया उपभोक्ता बनाएं

नीचे दिया गया कमांड हमारे नए उपभोक्ता को उसके क्रेडेंशियल्स जैसे यूजरनेम और पासवर्ड के साथ बनाएगा:

curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "consumer1", "plugins": { "basic-auth": { "username": "username1", "password": "password1" } } }

मौजूदा Products और Services रूट्स में basic auth प्लगइन जोड़ें

अब हम रूट्स के लिए basic-auth प्लगइन को कॉन्फ़िगर करते हैं ताकि APISIX हर बार APIs को कॉल किए जाने पर अनुरोध हेडर को API उपभोक्ता क्रेडेंशियल्स के साथ जांच सके:

curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "name": "Create a route with Azure function plugin", "plugins": { "azure-functions": { "function_uri": "https://serverless-apis.azurewebsites.net/api/products", "ssl_verify": false }, "basic-auth": {} }, "uri": "/products" }'
curl http://127.0.0.1:9180/apisix/admin/routes/2 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "azure-functions": { "function_uri": "https://serverless-apis.azurewebsites.net/api/reviews", "ssl_verify": false }, "basic-auth": {} }, "uri": "/reviews" }'

basic auth प्लगइन का परीक्षण करें

अब यदि हम हेडर में उपयोगकर्ता क्रेडेंशियल्स के बिना सर्वरलेस APIs का अनुरोध करते हैं, तो हमें एक अनधिकृत त्रुटि मिलेगी:

curl -i http://127.0.0.1:9080/products HTTP/1.1 401 Unauthorized {"message":"Missing authorization in request"}

परिणाम हमारी अपेक्षा के अनुरूप है। लेकिन यदि हम अनुरोध में सही उपयोगकर्ता क्रेडेंशियल्स प्रदान करते हैं और उसी एंडपॉइंट को एक्सेस करते हैं, तो यह अच्छी तरह से काम करना चाहिए:

curl -i -u username1:password1 http://127.0.0.1:9080/products HTTP/1.1 200 OK

हमने Apache APISIX की मदद से बेसिक प्रमाणीकरण प्लगइन का उपयोग करके सर्वरलेस APIs का अनुरोध करने वाले क्लाइंट की पहचान को सत्यापित किया है।

सर्वरलेस APIs के लिए रेट लिमिटिंग पॉलिसीज़ लागू करें

इस सेक्शन में, हम सर्वरलेस APIs को दुरुपयोग से बचाने के लिए एक थ्रॉटलिंग पॉलिसी लागू करेंगे। Apache APISIX Gateway में हम आने वाले कॉल्स की संख्या को सीमित करने के लिए रेट लिमिटिंग लागू कर सकते हैं।

रेट-लिमिट पॉलिसी लागू करें और परीक्षण करें

Products और Reviews फ़ंक्शन्स के लिए मौजूदा रूट कॉन्फ़िगरेशन के साथ, हम limit-count प्लगइन के साथ एक रेट-लिमिट पॉलिसी लागू कर सकते हैं ताकि हमारे API को असामान्य उपयोग से बचाया जा सके। हम प्रति API उपभोक्ता के लिए 60 सेकंड में 2 API कॉल्स की संख्या को सीमित करेंगे।

मौजूदा Products रूट के लिए limit-count प्लगइन को सक्षम करने के लिए, हमें हमारे Json रूट कॉन्फ़िगरेशन में प्लगइन्स एट्रिब्यूट में प्लगइन जोड़ने की आवश्यकता है:

curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "name": "Create a route with Azure function plugin", "plugins": { "azure-functions": { "function_uri": "https://serverless-apis.azurewebsites.net/api/products", "ssl_verify": false }, "basic-auth": {}, "limit-count": { "count": 2, "time_window": 60, "rejected_code": 403, "rejected_msg": "Requests are too frequent, please try again later." } }, "uri": "/products" }'

Apache APISIX पहले दो अनुरोधों को सामान्य रूप से संभालेगा। हालांकि, उसी अवधि में तीसरा अनुरोध हमारे कस्टम त्रुटि संदेश के साथ 403 HTTP Forbidden कोड लौटाएगा:

HTTP/1.1 403 Forbidden {"error_msg":"Requests are too frequent, please try again later."}

अगले कदम

इस लेख में, हमने कदम दर कदम सीखा कि कैसे Azure Functions और Apache APISIX Gateway के साथ Java-आधारित सर्वरलेस APIs बनाएं और अपने APIs को उनके पूर्ण जीवनचक्र में प्रबंधित करें, APISIX में सर्वरलेस APIs को अपस्ट्रीम सेवाओं के रूप में एक्सपोज़ करने से लेकर उन्हें सही ढंग से सुरक्षित करने और अनुरोधों की संख्या को सीमित करने के लिए रेट-लिमिटिंग लागू करने तक। यह API Gateway और सर्वरलेस APIs एकीकरण के अन्य उपयोग-मामलों के द्वार खोलता है।

आप विभिन्न बिल्ट-इन प्लगइन्स को जोड़कर APISIX Gateway की अन्य क्षमताओं का अन्वेषण कर सकते हैं ताकि अनुरोधों को ट्रांसफॉर्म किया जा सके, हमारे सर्वरलेस APIs की उपलब्धता, प्रदर्शन और उपयोग को मॉनिटर किया जा सके, API प्रतिक्रियाओं को कैश किया जा सके और APIs को वर्ज़निंग करके उन्हें और विकसित किया जा सके जो आपको विकास समय को कम करने, स्केलेबिलिटी बढ़ाने और लागत बचाने में मदद करता है।

Apache APISIX एक पूरी तरह से ओपन-सोर्स API Gateway समाधान है। यदि आपको सर्वरलेस APIs के लिए अधिक उन्नत API प्रबंधन सुविधाओं की आवश्यकता है, तो आप API7 Enterprise या API7 Cloud का उपयोग कर सकते हैं जो APISIX द्वारा संचालित हैं।

संबंधित संसाधन

अनुशंसित सामग्री

Tags: