इवेंट हुक्स के लिए Apache APISIX Serverless प्लगइन

Bobur Umurzokov

Bobur Umurzokov

February 15, 2023

Technology

Apache APISIX एक ओपन-सोर्स, हाई-परफॉर्मेंस API गेटवे है जो Nginx के ऊपर बनाया गया है। इसकी एक शक्तिशाली विशेषता सर्वरलेस फंक्शन बनाने की क्षमता है, जो छोटे, स्टेटलेस प्रोग्राम होते हैं जो Apache APISIX की कार्यक्षमता को बढ़ा सकते हैं। इस लेख में, हम Apache APISIX सर्वरलेस प्लगइन की मूल बातें और इसे इवेंट्स के जवाब में सर्वरलेस फंक्शन को ट्रिगर करने के लिए कैसे उपयोग किया जा सकता है, इस पर चर्चा करेंगे।

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

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

  • Apache APISIX सर्वरलेस प्लगइन क्या है?
  • सर्वरलेस प्लगइन कैसे काम करता है और इसे कैसे उपयोग करें?
  • सर्वरलेस प्लगइन के उपयोग के मामले।
  • आप सर्वरलेस प्लगइन का उपयोग वेबहुक के साथ इंटीग्रेट करने के लिए कैसे कर सकते हैं।

Apache APISIX सर्वरलेस प्लगइन क्या है?

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

सर्वरलेस प्लगइन इवेंट्स को हैंडल करने के लॉजिक को अलग-अलग सर्वरलेस फंक्शन में अलग करता है, जिससे आप अपने API आर्किटेक्चर को सरल बना सकते हैं और इसे प्रबंधित करना आसान हो जाता है। Apache APISIX Azure Functions, AWS Lambda जैसे लोकप्रिय क्लाउड वेंडर्स के लिए सर्वरलेस फ्रेमवर्क्स का समर्थन प्रदान करता है।

सर्वरलेस प्लगइन का उपयोग कैसे करें?

Apache APISIX सर्वरलेस प्लगइन का उपयोग करने के लिए, आपको Lua प्रोग्रामिंग भाषा में एक सर्वरलेस फंक्शन कोड लिखना होगा जो इवेंट के जवाब में चलाने के लिए आपके द्वारा चाहे गए लॉजिक को लागू करता है और serverless-pre-function या serverless-post-function प्लगइन को सक्षम करना होगा, जो आपके द्वारा चुने गए अनुरोध-प्रतिक्रिया चक्र के चरणों पर निर्भर करता है।

वर्तमान में, APISIX केवल Lua में फंक्शन कोड लिखने का समर्थन करता है। यदि आप अन्य प्रोग्रामिंग भाषाओं को पसंद करते हैं, तो आप हमेशा प्लगइन रनर्स का उपयोग करके एक नया कस्टम प्लगइन बना सकते हैं।

सर्वरलेस प्लगइन के उपयोग के मामले

यहां Apache APISIX सर्वरलेस प्लगइन के लिए कुछ उपयोग के मामले दिए गए हैं:

  1. डायनामिक रूटिंग: सर्वरलेस प्लगइन का उपयोग विशिष्ट मानदंडों के आधार पर आने वाले API अनुरोधों को डायनामिक रूप से रूट करने के लिए किया जा सकता है, जैसे कि अनुरोध विधि, URL पथ, या हेडर मान। यह आपको अंतर्निहित Apache APISIX कॉन्फ़िगरेशन को संशोधित किए बिना जटिल रूटिंग परिदृश्यों को आसानी से लागू करने की अनुमति देता है।

  2. प्रमाणीकरण और अधिकार प्रबंधन: आप अपने API के लिए प्रमाणीकरण और अधिकार प्रबंधन जांच लागू करने के लिए सर्वरलेस प्लगइन का उपयोग कर सकते हैं। उदाहरण के लिए, आप एक सर्वरलेस फंक्शन लिख सकते हैं जो अनुरोध को जारी रखने से पहले अनुरोध हेडर में एक वैध API कुंजी की उपस्थिति को सत्यापित करता है। या इसे forward-auth प्लगइन के संयोजन के साथ एक बाहरी अधिकार प्रबंधन सेवा के रूप में उपयोग किया जा सकता है।

  3. अनुरोध परिवर्तन: सर्वरलेस प्लगइन का उपयोग बैकएंड सेवा द्वारा प्रसंस्कृत होने से पहले आने वाले API अनुरोधों को परिवर्तित करने के लिए किया जा सकता है। उदाहरण के लिए, आप एक सर्वरलेस फंक्शन लिख सकते हैं जो अनुरोध हेडर या बॉडी को बैकएंड सेवा द्वारा अपेक्षित प्रारूप से मेल खाने के लिए संशोधित करता है।

  4. प्रतिक्रिया परिवर्तन: आप सर्वरलेस प्लगइन का उपयोग बैकएंड सेवा से प्रतिक्रिया को क्लाइंट को वापस भेजने से पहले परिवर्तित करने के लिए भी कर सकते हैं। उदाहरण के लिए, आप एक सर्वरलेस फंक्शन लिख सकते हैं जो प्रतिक्रिया हेडर या बॉडी को क्लाइंट द्वारा अपेक्षित प्रारूप से मेल खाने के लिए संशोधित करता है।

  5. लॉगिंग और मॉनिटरिंग: आप अपने API के लिए लॉगिंग और मॉनिटरिंग लागू करने के लिए सर्वरलेस प्लगइन का उपयोग कर सकते हैं। उदाहरण के लिए, आप एक सर्वरलेस फंक्शन लिख सकते हैं जो प्रत्येक API अनुरोध के बारे में विस्तृत जानकारी लॉग करता है, जैसे कि अनुरोध विधि, URL, हेडर, और बॉडी, बाद में विश्लेषण के लिए।

Apache APISIX को वेबहुक्स के साथ इंटीग्रेट करना (डेमो)

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

सर्वरलेस फंक्शन को वेबहुक से प्रतिक्रिया भी वापस करनी चाहिए, ताकि आप वेबहुक की स्थिति और किसी भी त्रुटि संदेश को देख सकें यदि कुछ गलत हो जाता है। दोनों मामलों में, APISIX लक्ष्य सेवा के साथ संचार कर सकता है, लक्ष्य को यह बताते हुए कि एक इवेंट ट्रिगर हुआ है और उस इवेंट के बारे में जानकारी के साथ एक प्रदान किए गए URL को कॉल करके।

APISIX वेबहुक को POST अनुरोध भेजता है

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

  • APISIX चलाने के लिए आपकी मशीन पर Docker इंस्टॉल होना चाहिए।
  • APISIX के कुछ मुख्य अवधारणाओं जैसे रूट, अपस्ट्रीम और प्लगइन के बारे में बुनियादी ज्ञान।

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

सबसे पहले आप GitHub से apisix-docker प्रोजेक्ट रेपो को क्लोन करें:

git clone https://github.com/apache/apisix-docker.git

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

Apache APISIX इंस्टॉल और चलाएं

Apache APISIX चलाने के लिए, आप इन चरणों का पालन कर सकते हैं:

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

docker compose up -d

उपरोक्त कमांड Apache APISIX और etcd को Docker के साथ चलाएगा।

हमने इस डेमो में APISIX को Docker का उपयोग करके इंस्टॉल किया है। हालांकि, इसे इंस्टॉलेशन गाइड पर अन्य विकल्पों का उपयोग करके इंस्टॉल करने के लिए भी उपलब्ध है।

Apache APISIX में सर्वरलेस फंक्शन कॉन्फ़िगर करें

Apache APISIX में सर्वरलेस फंक्शन सेटअप करने के लिए, आपको एंडपॉइंट के लिए एक नया रूट बनाना होगा और हमारे कस्टम फंक्शन कोड के साथ सर्वरलेस प्लगइन को कॉन्फ़िगर करना होगा।

यहां Lua में एक सर्वरलेस फंक्शन का उदाहरण दिया गया है जो एंडपॉइंट पर आने वाले POST अनुरोधों को सुनता है और एक वेबहुक नोटिफिकेशन भेजता है:

function webhook(conf, ctx) -- आवश्यक लाइब्रेरी आयात करें local http = require("resty.http") local core = require("apisix.core") -- वेबहुक नोटिफिकेशन केवल तभी भेजें जब अनुरोध विधि POST हो, अन्यथा इसे सामान्य रूप से अपस्ट्रीम को भेजें if core.request.get_method() == "POST" then -- निर्दिष्ट URL को वेबहुक नोटिफिकेशन भेजें local httpc = http.new() local res, err = httpc:request_uri("http://webhook.site/9db3d3a0-ab64-4142-a39f-d4852ca50f8d", { method = "POST", headers = { ["Content-Type"] = "application/json" }, body = core.request.get_body(), }) -- वेबहुक से प्रतिक्रिया की जांच करें if not res then core.log.error("वेबहुक भेजने में विफल: ", err) return 500, err end end -- अपस्ट्रीम सेवा से प्रतिक्रिया वापस करें return conf.status, conf.body end

जैसा कि आप उपरोक्त नमूना वेबहुक फंक्शन कोड में देख सकते हैं, यह एक प्रदान किए गए URL को JSON POST अनुरोध भेजता है जिसमें अनुरोध बॉडी (क्लाइंट से API गेटवे तक) पेलोड के रूप में होती है। वेबहुक्स वेबसाइट का उपयोग हमारे वेबहुक एंडपॉइंट को मॉक करने के लिए किया गया है: https://webhook.site।

अपना वेबहुक एंडपॉइंट बनाने और सेट करने के लिए:

  1. https://webhook.site पर नेविगेट करके एक URL जनरेट करें।
  2. Your unique URL के बगल में Copy to clipboard चुनें।
  3. इसे फंक्शन कोड में HTTP अनुरोध के request_uri मेथड में पेस्ट करें।

इसके अलावा, POST सहित सभी अन्य अनुरोधों को आगे अपस्ट्रीम सेवा को भेजा जाएगा। अगले चरण में, हम एक रूट और अपस्ट्रीम कॉन्फ़िगर करेंगे।

रूट और अपस्ट्रीम कॉन्फ़िगर करें

अब हम सर्वरलेस फंक्शन प्लगइन सक्षम के साथ एक नया रूट बनाएंगे और एक अपस्ट्रीम जो हमारी बैकएंड सेवा के रूप में कार्य करेगा।

curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/1' \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \ -H 'Content-Type: application/json' \ -d '{ "uri": "/post", "plugins": { "serverless-pre-function": { "phase": "rewrite", "functions" : [" return function(conf, ctx) -- आवश्यक लाइब्रेरी आयात करें local http = require(\"resty.http\") local core = require(\"apisix.core\") -- वेबहुक नोटिफिकेशन केवल तभी भेजें जब अनुरोध विधि POST हो, अन्यथा इसे सामान्य रूप से अपस्ट्रीम को भेजें if core.request.get_method() == \"POST\" then -- निर्दिष्ट URL को वेबहुक नोटिफिकेशन भेजें local httpc = http.new() local res, err = httpc:request_uri(\"http://webhook.site/9db3d3a0-ab64-4142-a39f-d4852ca50f8d\", { method = \"POST\", headers = { [\"Content-Type\"] = \"application/json\" }, body = core.request.get_body(), }) -- वेबहुक से प्रतिक्रिया की जांच करें if not res then core.log.error(\"वेबहुक भेजने में विफल: \", err) return 500, err end end -- अपस्ट्रीम सेवा से प्रतिक्रिया वापस करें return conf.status, conf.body end"] } }, "upstream": { "nodes": { "httpbin.org:80": 1 }, "type": "roundrobin" } }'

पूर्ववर्ती रूट कॉन्फ़िगरेशन उदाहरण में, हमने APISIX Admin API को curl अनुरोध भेजकर हमारा पहला रूट बनाया। रूट अनुरोध बॉडी में, हमने निर्दिष्ट किया कि /post पथ पर किसी भी अनुरोध को सर्वरलेस फंक्शन कोड ट्रिगर करेगा और बाद में लक्ष्य httpbin.org को आगे भेजा जाएगा। इसका मतलब है कि अनुरोध को httpbin.org/post एंडपॉइंट पर रूट किया जाएगा जब यह जांचता है कि अनुरोध विधि POST है और इवेंट को तीसरे पक्ष की सेवा वेबहुक एंडपॉइंट को भेजा जाना चाहिए या नहीं। बैकएंड सेवा को आपकी बैकएंड सेवा से बदला जा सकता है।

आप यह भी देख सकते हैं कि हमने फंक्शन कोड को Json ऑब्जेक्ट में serverless-pre-function के functions गुणों में जोड़ा है।

कॉन्फ़िगरेशन का परीक्षण करें

अंत में, हम /post API गेटवे एंडपॉइंट को कॉल करके परीक्षण करते हैं कि सब कुछ हमारे अपेक्षित रूप से काम कर रहा है और पोस्ट इवेंट वेबहुक वेबसाइट को भेजा जाएगा।

curl -i http://127.0.0.1:9080/post -X POST -d \ '{ "message": "A new webhook message" }'

इसके बाद, आप https://webhook.site पेज से उस वेबहुक URL पर नेविगेट करें जिसे आपने पिछले चरणों में जनरेट किया था। आपको एक POST अनुरोध दिखाई देना चाहिए, जो हमारे वेबहुक एंडपॉइंट को इवेंट के बारे में सूचित करता है और अनुरोध बॉडी को भेजता है।

APISIX पेलोड वेबहुक को भेजता है

इसके अतिरिक्त, हमें मॉक अपस्ट्रीम सेवा httpbin.org से प्रतिक्रिया वापस मिलती है:

HTTP/1.1 200 OK Content-Type: application/json { ... "form": { "{\n \"message\": \"A new webhook message\"\n}": "" }, "headers": { "Accept": "*/*", "Content-Length": "41", "Content-Type": "application/x-www-form-urlencoded", "Host": "127.0.0.1", "X-Forwarded-Host": "127.0.0.1" }, "json": null, "url": "http://127.0.0.1/post" }

स्पष्ट रूप से, यदि आप POST के अलावा अन्य HTTP अनुरोध विधियों को भेजते हैं, तो सर्वरलेस फंक्शन कोड वेबहुक एंडपॉइंट को ट्रिगर नहीं करेगा।

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

निष्कर्ष

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

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

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

समुदाय

🙋 Apache APISIX समुदाय में शामिल हों 🐦 हमें Twitter पर फॉलो करें 📝 हमें Slack पर खोजें

Tags: