Apache APISIX का Azure Serverless के साथ एकीकरण

API7.ai

December 1, 2021

Ecosystem

Apache APISIX का Azure Serverless के साथ एकीकरण

Apache APISIX लोकप्रिय क्लाउड वेंडर्स के लिए सर्वरलेस फ्रेमवर्क्स के लिए समर्थन प्रदान करता है (और अधिक आने वाले हैं)। एप्लिकेशन में फ़ंक्शन URL को हार्डकोड करने के बजाय, Apache APISIX सर्वरलेस प्लगइन सक्षम करके एक रूट को परिभाषित करने का सुझाव देता है। यह डेवलपर्स को फ़ंक्शन URI को हॉट अपडेट करने और बिना किसी परेशानी के FaaS वेंडर को एक अलग क्लाउड प्रदाता में बदलने की लचीलापन प्रदान करता है। इसके अलावा, यह दृष्टिकोण एप्लिकेशन लॉजिक से प्राधिकरण और प्रमाणीकरण संबंधी चिंताओं को कम करता है क्योंकि Apache APISIX में बहुत मजबूत प्रमाणीकरण समर्थन है जिसका उपयोग क्लाइंट उपभोक्ताओं को FaaS के साथ विशेष रूट तक पहुंचने के लिए पहचानने और प्राधिकृत करने के लिए किया जा सकता है। यह लेख हाल ही में जोड़े गए नए प्लगइन azure-functions के बारे में बात करता है, और Azure Functions, जो एक व्यापक रूप से उपयोग किया जाने वाला सर्वरलेस समाधान है, को Apache APISIX सर्वरलेस सूट में एकीकृत करने के बारे में विस्तृत निर्देश देता है।

azure-functions प्लगइन कैसे काम करता है

azure-functions प्लगइन उपयोगकर्ताओं को एक गेटवे URI के लिए azure HTTP ट्रिगर सर्वरलेस फ़ंक्शन के लिए एक अपस्ट्रीम को परिभाषित करने की अनुमति देता है। यदि सक्षम किया गया है, तो यह प्लगइन उस विशेष URI के लिए चल रहे अनुरोध को समाप्त करता है और उपयोगकर्ताओं द्वारा सेट किए गए उपयुक्त प्राधिकरण विवरण, अनुरोध हेडर, अनुरोध बॉडी, पैरामीटर्स (ये तीनों घटक मूल अनुरोध से पास किए जाते हैं) के साथ azure FaaS (नया अपस्ट्रीम) के लिए एक नया अनुरोध शुरू करता है और प्रतिक्रिया बॉडी, स्थिति कोड और हेडर को मूल क्लाइंट को वापस लौटाता है जिसने Apache APISIX एजेंट को अनुरोध किया है।

प्लगइन API कुंजी और azure सक्रिय निर्देशिका के माध्यम से azure FaaS सेवा के लिए प्राधिकरण का समर्थन करता है।

Apache APISIX के साथ Azure Functions का उपयोग कैसे करें

प्लगइन का प्राथमिक लक्ष्य रूट कॉन्फ़िगरेशन में निर्दिष्ट गेटवे रूट को azure फ़ंक्शन URI पर प्रॉक्सी करना है। यह खंड आपको azure क्लाउड पर सर्वरलेस HTTP ट्रिगर को कॉन्फ़िगर और बनाने का हाथों-हाथ अनुभव देता है।

  1. पहले Microsoft Azure में साइन अप/इन करें और एक ट्रायल प्लान सेट करें। Azure Functions 1 मिलियन इनवोकेशन तक हमेशा मुफ्त हैं। कीमत के बारे में अधिक जानने के लिए यहां जाएं।

  2. Azure पोर्टल पर जाएं (FYI, azure सेवाओं को वेब पोर्टल, CLI और VSCode के माध्यम से एक्सेस किया जा सकता है। उपयोगकर्ता-मित्रता के लिए हम वेब का उपयोग कर रहे हैं)।

    1. पहले, एक संसाधन समूह बनाएं ताकि आपके द्वारा बनाए जाने वाले FaaS को तार्किक रूप से विभाजित किया जा सके। एक संसाधन समूह बनाएं
    2. अपनी पसंद के URL के साथ एक फ़ंक्शन ऐप बनाएं (मैं test-apisix चुनने जा रहा हूं)। एक फ़ंक्शन ऐप बनाएं
  3. VSCode एडिटर में Azure Functions एक्सटेंशन इंस्टॉल करें। इंस्टॉलेशन के बाद, एक्सटेंशन के माध्यम से प्रमाणीकरण करें और स्थानीय विकास के लिए azure फ़ंक्शन कोर टूल इंस्टॉल करें:

    npm install -g azure-functions-core-tools@3 --unsafe-perm true
  4. निम्नलिखित स्निपेट को VSCode में Azure Functions एक्सटेंशन पैनल के माध्यम से हमारे द्वारा बनाए गए फ़ंक्शन ऐप पर डिप्लॉय करें:

    module.exports = async function (context, req) { context.log("HTTP ट्रिगर Test-APISIX पर इनवोक किया गया।"); const name = req.query.name || (req.body && req.body.name); const responseMessage = name ? "नमस्ते, " + name : "यह HTTP ट्रिगर फ़ंक्शन सफलतापूर्वक निष्पादित हुआ। एक व्यक्तिगत प्रतिक्रिया उत्पन्न करने के लिए क्वेरी स्ट्रिंग या अनुरोध बॉडी में एक नाम पास करें।"; context.res = { // स्थिति: 200, /* डिफ़ॉल्ट 200 */ body: responseMessage, }; };

यह स्निपेट क्वेरी पैरामीटर्स से नाम लेता है (यदि मौजूद है, अन्यथा अनुरोध बॉडी से) और उपयोगकर्ता का अभिवादन करता है।

azure-functions प्लगइन को सक्रिय करें

निम्नलिखित एक विशिष्ट रूट के लिए azure-functions प्लगइन को सक्षम करने का एक उदाहरण है। हम मान रहे हैं कि आपका HTTP ट्रिगर डिप्लॉय किया गया है और सेवा के लिए तैयार है।

# एक विशिष्ट रूट के लिए प्लगइन सक्षम करें curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "azure-functions": { "function_uri": "http://test-apisix.azurewebsites.net/api/HttpTrigger", "authorization": { "apikey": "<Azure-Function तक पहुंचने के लिए उत्पन्न API कुंजी>" } } }, "uri": "/azure" }'

अब Apache APISIX गेटवे पर URI /azure के लिए किसी भी अनुरोध (HTTP/1.1, HTTPS, HTTP2) को उपरोक्त फ़ंक्शन URI पर एक HTTP इनवोकेशन ट्रिगर करेगा और प्रतिक्रिया बॉडी के साथ प्रतिक्रिया हेडर और प्रतिक्रिया कोड को क्लाइंट को प्रॉक्सी किया जाएगा। उदाहरण के लिए (यहां azure क्लाउड फ़ंक्शन केवल name क्वेरी पैरामीटर लेता है और Hello $name लौटाता है):

curl -i -XGET http://localhost:9080/azure\?name=Bisakh HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Request-Context: appId=cid-v1:38aae829-293b-43c2-82c6-fa94aec0a071 Date: Wed, 19 Nov 2021 18:46:55 GMT Server: APISIX/2.10.2 नमस्ते, Bisakh

यह मानते हुए कि Apache APISIX config-default.yaml पर enable_http2: true के साथ भी चल रहा है, पोर्ट 9081 (मान लें) के लिए, क्लाइंट और APISIX एजेंट के बीच किसी भी HTTP/2 संचार को HTTP/1.1 के समान azure FaaS पर प्रॉक्सी किया जाएगा और प्रतिक्रियाओं को उचित हेडर के साथ क्लाइंट को वापस प्रॉक्सी किया जाएगा। उदाहरण के लिए:

curl -i -XGET --http2 --http2-prior-knowledge http://localhost:9081/azure\?name=Bisakh HTTP/2 200 content-type: text/plain; charset=utf-8 request-context: appId=cid-v1:38aae829-293b-43c2-82c6-fa94aec0a071 Date: Wed, 19 Nov 2021 18:46:56 GMT server: APISIX/2.10.2 नमस्ते, Bisakh

azure-functions प्लगइन को निष्क्रिय करें

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

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/azure", "plugins": {}, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } } }'

कस्टम कॉन्फ़िगरेशन

एक नया रूट बनाते समय azure-functions प्लगइन को सक्षम करने के लिए एक न्यूनतम कॉन्फ़िगरेशन में, function_uri प्लगइन कॉन्फ़िग का अनिवार्य गुण है जो फ़ंक्शन URL को इंगित करता है। प्लगइन स्कीमा और मेटाडेटा स्कीमा के साथ बहुत सारे अतिरिक्त विकल्प हैं जिन्हें ट्वीक किया जा सकता है।

प्लगइन स्कीमा

नामप्रकारआवश्यकडिफ़ॉल्टमान्यविवरण
function_uriस्ट्रिंगआवश्यकn/an/aazure फ़ंक्शन एंडपॉइंट जो सर्वरलेस फ़ंक्शन कोड को ट्रिगर करता है (उदाहरण: http://test-apisix.azurewebsites.net/api/HttpTrigger)।
authorizationऑब्जेक्टवैकल्पिकn/an/aक्लाउड फ़ंक्शन तक पहुंचने के लिए प्राधिकरण क्रेडेंशियल्स।
authorization.apikeyस्ट्रिंगवैकल्पिकn/an/aप्राधिकरण के अंदर फ़ील्ड। उस एंडपॉइंट तक अनुरोधों को प्राधिकृत करने के लिए उत्पन्न API कुंजी।
authorization.clientidस्ट्रिंगवैकल्पिकn/an/aप्राधिकरण के अंदर फ़ील्ड। उस एंडपॉइंट तक अनुरोधों को प्राधिकृत करने के लिए क्लाइंट ID (azure सक्रिय निर्देशिका)।
timeoutपूर्णांकवैकल्पिक3000[100,...]प्रॉक्सी अनुरोध टाइमआउट मिलीसेकंड में।
ssl_verifyबूलियनवैकल्पिकtruetrue/falseक्या सक्षम होने पर सर्वर का SSL सत्यापन करता है।
keepaliveबूलियनवैकल्पिकtruetrue/falseभविष्य में उसी प्रॉक्सी कनेक्शन को पुन: उपयोग करने के लिए। कनेक्शन को तुरंत बंद करने और keepalives को अक्षम करने के लिए false सेट करें।
keepalive_poolपूर्णांकवैकल्पिक5[1,...]पूल में कनेक्शन की अधिकतम संख्या।
keepalive_timeoutपूर्णांकवैकल्पिक60000[1000,...]अधिकतम निष्क्रिय टाइमआउट (ms)।

यह azure FaaS के व्यवहार को कसकर बांधने के लिए बहुत सारी लचीलापन प्रदान करता है - टाइमआउट को कॉन्फ़िगर करने से लेकर keepalive पूल और सर्वरलेस FaaS के SSL प्रमाणपत्र को सत्यापित करने तक। सच कहूं तो, यह वास्तव में बहुत मायने रखता है जब सर्वरलेस की बात आती है क्योंकि सेवाएं इवेंट-ड्रिवेन हैं और संसाधन क्लाउड प्रदाता द्वारा ऑन-द-फ्लाई आवंटित किए जाते हैं।

मेटाडेटा स्कीमा

इसी तरह, मेटाडेटा का उपयोग करके कुछ गुणों को ट्वीक किया जा सकता है।

नामप्रकारआवश्यकडिफ़ॉल्टमान्यविवरण
master_apikeyस्ट्रिंगवैकल्पिक""n/aवह API KEY सीक्रेट जिसका उपयोग azure फ़ंक्शन URI तक पहुंचने के लिए किया जा सकता है।
master_clientidस्ट्रिंगवैकल्पिक""n/aवह क्लाइंट ID (सक्रिय निर्देशिका) जिसका उपयोग फ़ंक्शन URI को प्राधिकृत करने के लिए किया जा सकता है।

azure-functions प्लगइन के लिए मेटाडेटा प्राधिकरण फॉलबैक की कार्यक्षमता प्रदान करता है। यह master_apikey और master_clientid (azure सक्रिय निर्देशिका क्लाइंट ID) को परिभाषित करता है जहां उपयोगकर्ता (वैकल्पिक रूप से) मिशन-क्रिटिकल एप्लिकेशन डिप्लॉयमेंट के लिए मास्टर API कुंजी या क्लाइंट ID को परिभाषित कर सकते हैं। इसलिए यदि प्लगइन गुण के अंदर कोई प्राधिकरण विवरण नहीं मिलता है तो मेटाडेटा में मौजूद प्राधिकरण विवरण काम में आते हैं।

सापेक्ष प्राथमिकता क्रम इस प्रकार है:

  • पहले, प्लगइन Apache APISIX एजेंट को अनुरोध हेडर के अंदर x-functions-key या x-functions-clientid कुंजी की तलाश करता है।
  • यदि वे नहीं मिलते हैं, तो azure-functions प्लगइन प्लगइन गुणों के अंदर प्राधिकरण विवरण की जांच करता है। यदि मौजूद है, तो यह Azure क्लाउड फ़ंक्शन को भेजे गए अनुरोध में संबंधित हेडर जोड़ता है।
  • यदि प्लगइन गुणों के अंदर कोई प्राधिकरण विवरण नहीं मिलता है, तो Apache APISIX इस प्लगइन के लिए मेटाडेटा कॉन्फ़िग को फ़ेच करता है और मास्टर कुंजी का उपयोग करता है।

एक नई मास्टर APIKEY जोड़ने के लिए, अद्यतन मेटाडेटा के साथ /apisix/admin/plugin_metadata एंडपॉइंट पर एक अनुरोध करें:

curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/azure-functions \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "master_apikey" : "<आपकी azure मास्टर एक्सेस कुंजी>" }'

सारांश

azure-functions प्लगइन Apache APISIX का दूसरा प्लगइन है जो सर्वरलेस के लिए डिज़ाइन किया गया है। हम अन्य सर्वरलेस प्लगइन्स विकसित कर रहे हैं और उन्हें आने वाले Apache APISIX रिलीज़ के साथ फीचर करेंगे। यदि आप रुचि रखते हैं, तो कृपया अपनी राय साझा करने के लिए एक समस्या फ़ाइल करने में संकोच न करें। आप हमारे मेलिंग सूची में एक नया प्लगइन विकसित करने के प्रस्तावों के बारे में भी बात कर सकते हैं!

Tags: