Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> इस ब्लॉग पोस्ट में, मैं अपस्टैश रेडिस, एडब्ल्यूएस लैम्ब्डा (पायथन), और एडब्ल्यूएस एपीआई गेटवे पर निर्मित सर्वर रहित यूआरएल शॉर्टनर सेवा के निर्माण में आपका मार्गदर्शन करूंगा। इस ब्लॉग पोस्ट का मुख्य उद्देश्य पायथन लैम्ब्डा फ़ंक्शन बनाने, इसे रेडिस से जोड़ने और एपीआई के माध्यम से उपभोग करने की प्रक्रिया को प्रदर्शित करना है।

<पी> आप इसके माध्यम से परियोजना के कार्यान्वयन तक पहुंच सकते हैं:यूआरएल शॉर्टनर <पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

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

परियोजना विवरण

<पी> इस परियोजना में अपस्टैश रेडिस पर एक डेटाबेस, दो पायथन लैम्ब्डा फ़ंक्शन और एडब्ल्यूएस पर एक एपीआई गेटवे शामिल हैं। शॉर्टनर सेवा का उपभोग करने के लिए उपयोगकर्ता या तो वेब इंटरफ़ेस या एपीआई का उपयोग कर सकते हैं।

<पी> shortener लैम्ब्डा फ़ंक्शन HTTP अनुरोध क्वेरी में प्रदान किए गए लंबे URL से एक छोटी URL कुंजी बनाता है। इसके बाद यह उपयोगकर्ता को छोटा यूआरएल लौटाने से पहले, अपस्टैश रेडिस में छोटी यूआरएल कुंजी और उसके संबंधित लंबे यूआरएल मान को संग्रहीत करता है।

<पी> redirector लैम्ब्डा फ़ंक्शन उपयोगकर्ताओं को एक छोटे URL से उसके संबंधित लंबे URL पर पुनर्निर्देशित करता है। यह छोटी यूआरएल कुंजी का उपयोग करके रेडिस से लंबा यूआरएल पुनर्प्राप्त करता है और उपयोगकर्ता के ब्राउज़र पर HTTP 302 पुनर्निर्देशन प्रतिक्रिया भेजता है। यह फ़ंक्शन उपयोगकर्ताओं को लंबे URL को याद करने या मैन्युअल रूप से दर्ज करने की आवश्यकता के बिना वांछित सामग्री तक पहुंचने में मदद करता है।

<पी> अंत में, हम लैम्ब्डा फ़ंक्शंस का उपभोग करने के लिए एक एपीआई गेटवे बनाएंगे। यह एपीआई हमारे बेसिक यूआरएल शॉर्टनर फ्रंटएंड से जुड़ा होगा।

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

अपस्टैश रेडिस की स्थापना

<पी> हम अपस्टैश कंसोल पर अपना रेडिस डेटाबेस बना सकते हैं। लॉग इन करने के बाद डेटाबेस बनाएं पर क्लिक करें बटन. इसमें कुछ सेकंड लगेंगे और आप पूरी तरह तैयार हो जाएंगे। फिर, UPSTASH_REDIS_REST_HOST को कॉपी और पेस्ट करें , UPSTASH_REDIS_REST_PORT और UPSTASH_REDIS_REST_PASSWORD विवरण से चर किसी फ़ाइल का अनुभाग. हम इन कुंजियों का उपयोग AWS पर्यावरण चर में करने जा रहे हैं।

AWS Lambda पर सर्वर रहित फ़ंक्शंस बनाना

<पी> आगे, हम अपने सर्वर रहित पायथन फ़ंक्शन बनाएंगे। AWS में लॉग इन करने के बाद, सीधे AWS Lambda पर जाएं। डैशबोर्ड से, लैम्ब्डा फ़ंक्शन बनाएं।

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

यूआरएल छोटा करने के लिए लैम्ब्डा फ़ंक्शन

<पी> करने वाली पहली चीज़ पर्यावरण चर जोड़ना है। shortener से फ़ंक्शन अवलोकन, कॉन्फ़िगरेशन> पर्यावरण चर> संपादित करें> पर्यावरण चर जोड़ें पर जाएं . फिर, UPSTASH_REDIS_REST_HOST टाइप करें , UPSTASH_REDIS_REST_PORT और UPSTASH_REDIS_REST_PASSWORD अपस्टैश कंसोल से कुंजियाँ और उनके संबंधित मान।

<पी> अब हम कोडिंग शुरू कर सकते हैं। कोड पर वापस लौटें shortener का अनुभाग फ़ंक्शन, और नीचे दिए गए कोड को पेस्ट करें। यह हमें अपस्टैश रेडिस डेटाबेस से कनेक्शन प्रदान करेगा।

import random
import string
import json
import redis
 
#Create a redis client.
redis_client = redis.Redis(
 host= UPSTASH_REDIS_REST_HOST,
 port= UPSTASH_REDIS_REST_PORT,
 password= UPSTASH_REDIS_REST_PASSWORD
)
<पी> फिर हम अपना मुख्य शॉर्टनर एल्गोरिदम लागू करेंगे। नीचे दिया गया कोड स्निपेट क्या करता है:

  • क्वेरी पैरामीटर प्राप्त करना long_url एपीआई अनुरोध यूआरएल से,
  • छोटे URL के लिए एक यादृच्छिक 7 वर्ण कुंजी उत्पन्न करना,
  • अपस्टैश रेडिस पर इस कुंजी का मान लंबे URL पर सेट करना,
  • प्रतिक्रिया के मुख्य भाग में हमारे पूर्ण संक्षिप्त URL के साथ HTTP 200 प्रतिक्रिया लौटाना।
<पी> रेडिस क्लाइंट निर्माण के ठीक नीचे, generate_short_url जोड़ें और lambda_handler कार्य.

def generate_short_url():
 # Define the character set for generating the short URLs
 CHARSET = string.ascii_letters + string.digits
 
 # Generate a random short URL using the character set
 short_url = ''.join(random.choice(CHARSET) for _ in range(7))
 
 # Check if the short URL already exists in Redis
 if redis_client.exists(short_url):
 # If it does, recursively generate a new short URL
 return generate_short_url()
 
 # Otherwise, return the new short URL
 return short_url
 
 
def lambda_handler(event, context):
 long_url = event["queryStringParameters"]['long_url']
 
 base_url = f"https://{event['headers']['Host'] }/{event['requestContext']['stage']}/"
 
 # Generate a unique short URL
 short_url_key = generate_short_url()
 
 # Store the mapping between the short URL and long URL in Redis
 redis_client.set(short_url_key, long_url)
 
 # Return the short URL to the client
 response_body = {
 'short_url' : base_url + short_url_key,
 }
 
 response={
 'statusCode' : 200,
 'headers' : {'ContentType':'application/json',
 "Access-Control-Allow-Origin": "*"},
 'body' : json.dumps(response_body)
 }
 
 return response
<पी> फिर तैनाती पर क्लिक करें .भले ही कोड तैयार हैं; यदि आप अभी लैम्ब्डा का परीक्षण करते हैं, तो आपको लैम्ब्डा

से नीचे प्रतिक्रिया मिलेगी <पी> Unable to import module 'lambda_function': No module named 'redis' <पी> ऐसा इसलिए है, क्योंकि बाहरी पायथन लाइब्रेरीज़ का उपयोग करने के लिए, हमें एक कस्टम पैकेज के रूप में अपनी लाइब्रेरीज़ बनाने की ज़रूरत है और फिर पैकेज को लैम्ब्डा में संलग्न करने का एक तरीका ढूंढना होगा। इसे हल करने के कई तरीके हैं, लेकिन मेरा पसंदीदा समाधान लैम्ब्डा लेयर्स का उपयोग करना होगा। इसे भ्रमित न होने दें, यह एक सरल प्रक्रिया है।

परत बनाना

<पी> सबसे पहले, हमें पैकेज बनाना और ज़िप करना होगा। अपने स्थानीय टर्मिनल पर जाएँ और नीचे दिए गए आदेश टाइप करें। इससे एक requirements-package.zip बन जाएगा Redis स्थापित के साथ संकुल फ़ोल्डर में फ़ाइल।

mkdir packages
cd packages
python3 -m venv venv
source venv/bin/activate
 
mkdir python
cd python
pip install redis -t .
 
rm -rf *dist-info
cd..
zip -r requirements-package.zip python
<पी> फिर, shortener पर वापस जाएं AWS पर कार्य करें और साइडबार से सीधे लेयर्स पर जाएं। परत बनाएं पर क्लिक करें और आवश्यक कॉन्फ़िगरेशन भरें और requirements-package.zip अपलोड करें फ़ाइल, बिल्कुल मेरी जैसी।

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> जब परत बन जाती है, तो हमें इस परत को अपने shortener से जोड़ना होगा समारोह. फ़ंक्शन के परत अनुभाग पर जाएं और एक परत जोड़ें पर क्लिक करें बटन.

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> अब, हमें यूआरएल को छोटा करने में सक्षम होना चाहिए। short_url से लंबा यूआरएल पुनर्प्राप्त करना बाकी है कुंजी और ब्राउज़र को उस यूआरएल पर रीडायरेक्ट करना। उसके लिए, हम एक redirector बनाने जा रहे हैं लैम्ब्डा फ़ंक्शन.

यूआरएल पुनर्निर्देशन के लिए लैम्ब्डा फ़ंक्शन

<पी> redirector बनाने की प्रक्रिया लैम्ब्डा वैसा ही है जैसा ऊपर बताया गया है। यहां एक बार फिर चरण दिए गए हैं:

  • redirector नाम का एक लैम्ब्डा फ़ंक्शन बनाना लैम्ब्डा डैशबोर्ड से।
  • पर्यावरण चर सेट करना।
  • ठीक नीचे दिए गए कोड को टाइप कर रहे हैं।
  • requirements-package.zip के साथ एक परत बनाना फ़ाइल. (हम redis-library-layer का उपयोग कर सकते हैं फिर, इस मामले में आवश्यकताएँ समान हैं।)
  • लैम्ब्डा फ़ंक्शन में परत जोड़ना।
<पी> यहां पुनर्निर्देशक लैम्ब्डा के लिए मुख्य एल्गोरिदम है।

import json
import redis
 
#Create a redis client.
redis_client = redis.Redis(
 host= UPSTASH_REDIS_REST_HOST,
 port= UPSTASH_REDIS_REST_PORT,
 password= UPSTASH_REDIS_REST_PASSWORD
)
 
def lambda_handler(event, context):
 # Get the short URL from the request path
 short_url = event['pathParameters']['short_url']
 
 # Look up the long URL associated with the short URL in Redis
 long_url = redis_client.get(short_url).decode('utf-8').strip('"')
 
 long_url = format_url_for_redirection(long_url)
 
 # If the short URL doesn't exist, return a 404 error
 if not long_url:
 response = {
 'statusCode': 404,
 'body': json.dumps({'error': 'Short URL not found'})
 }
 return response
 
 # Otherwise, redirect the user to the long URL
 response = {
 'statusCode': 302,
 'headers' : {'Location':long_url},
 'body' : ''
 }
 return response
 
 
def format_url_for_redirection(url):
 if not url.startswith("http://") and not url.startswith("https://"):
 url = "https://" + url
 return url
<पी> ठीक वैसे ही, हमारे लैम्ब्डा बिल्कुल तैयार हैं! यद्यपि यह कार्यात्मक है, इस यूआरएल शॉर्टनर को एक सुलभ सेवा बनाने के लिए, हमें अपने लैम्ब्डा को चलाने का एक तरीका ढूंढना होगा। लैम्ब्डा फ़ंक्शंस का उपभोग करने के कई तरीके हैं, लेकिन इस कार्यान्वयन के लिए हम AWS API गेटवे का उपयोग करेंगे .

AWS पर एपीआई गेटवे बनाना

<पी> सबसे पहले, AWS कंसोल से एपीआई गेटवे पर जाएं। डैशबोर्ड में, एपीआई बनाएं पर क्लिक करें बटन दबाएं और एक REST API बनाएं . बुनियादी कॉन्फ़िगरेशन करने के बाद, हमारे पास सेकंडों में हमारी एपीआई होती है।

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> फिर हमें एपीआई गेटवे को अपने लैम्ब्डा फ़ंक्शंस से कनेक्ट करने की आवश्यकता है। संसाधन अनुभाग में, क्रियाएँ> संसाधन बनाएँ पर जाएँ . resource name दर्ज करें और resource path .

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> फिर /shortener पर क्लिक करें संसाधन में पथ और कार्रवाइयां> विधि बनाएं> GET चुनें> पुष्टि करें पर जाएं . यह हिस्सा काफी महत्वपूर्ण है, यह कॉन्फ़िगरेशन हमें एपीआई गेटवे से लैम्ब्डा फ़ंक्शंस में अनुरोध डेटा स्थानांतरित करने में सक्षम बनाता है। सुनिश्चित करें कि वे सही हैं!

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> हमने शॉर्टनर फ़ंक्शन को अपने एपीआई से जोड़ा है, इसलिए अब हम अपने यूआरएल को छोटा कर सकते हैं। हालाँकि, हमें redirector की आवश्यकता है हमारी सेवा के काम करने के लिए लैम्ब्डा फ़ंक्शन एपीआई से जुड़ा है। / पर क्लिक करें संसाधन में , क्रियाएँ> संसाधन बनाएँ पर जाएँ .

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> /{short_url} पर क्लिक करें संसाधन में अनुभाग, फिर कार्रवाई> विधि बनाएं> प्राप्त करें> पुष्टि करें चुनें .

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> अंत में, हमारा एपीआई सेट हो गया है। अंतिम चरण एपीआई तैनात करना है। कार्रवाइयां> एपीआई तैनात करें> नया चरण बनाएं पर जाएं . आवश्यक फ़ील्ड टाइप करें और तैनात करें। अब हमारे पास एक सार्वजनिक एपीआई है। चरणोंमें अनुभाग, आप अपने एपीआई के लिए सार्वजनिक इनवोक यूआरएल देख सकते हैं। <पी> एक अंतिम कार्य करना है:serverless-shortener-API के माध्यम से लैम्ब्डा फ़ंक्शंस को ट्रिगर करना प्रवेशद्वार.

<पी> shortener पर जाएं लैम्ब्डा फ़ंक्शन, फ़ंक्शन अवलोकन के अंतर्गत अनुभाग में, ट्रिगर जोड़ें पर क्लिक करें बटन.

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> जब आप दोनों फ़ंक्शंस में ट्रिगर जोड़ते हैं, तो हमारी सार्वजनिक एपीआई और लैम्ब्डा फ़ंक्शंस उपभोग के लिए तैयार होते हैं। shortener के लिए फ़ंक्शन, ट्रिगरिंग URL पथ इस प्रकार है:

<पी> <YOUR_INVOKE_URL>/shortener?short_url="<LONG_URL>" <पी> redirector को ट्रिगर करने के लिए फ़ंक्शन, आपको shortener से प्रतिक्रिया की आवश्यकता होगी समारोह. redirector के लिए ट्रिगरिंग यूआरएल इसकी संरचना नीचे दी गई है:

<पी> <YOUR_INVOKE_URL>/<SHORT_URL_KEY> <पी> जब आप इसे क्लिक करते हैं या इसे एक HTTP अनुरोध भेजते हैं, तो आपको अपने लंबे यूआरएल पर रीडायरेक्ट कर दिया जाएगा। दरअसल, हमारी सेवा तैयार है, लेकिन हम थोड़ी चमक के रूप में एक वेब इंटरफ़ेस बनाएंगे।

वेब इंटरफ़ेस बनाना और फ़ंक्शन उपयोग को संभालना

<पी> हम फ्रंटएंड के लिए HTML, बूटस्ट्रैप और जावास्क्रिप्ट का उपयोग करेंगे। जब उपयोगकर्ता URL टाइप करता है और छोटा करें पर क्लिक करता है बटन, एक यूआरएल पूछा जाएगा, जो उपयोगकर्ता को मूल वेबसाइट पर रीडायरेक्ट करेगा।

<पी> AWS लैम्ब्डा, पायथन और अपस्टैश रेडिस के साथ सर्वर रहित यूआरएल शॉर्टनर बनाएं

<पी> यह कुछ तत्वों के साथ काफी सरल वेबसाइट है। सबसे पहले, निम्न पंक्ति को <head> में जोड़ें बूटस्ट्रैप सुविधाओं का उपयोग करने के लिए HTML कोड को ब्लॉक करें।

<पी> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"/> <पी> <body> के भीतर ब्लॉक करें, हमारे पास मुख्य HTML तत्व होंगे।

<div class="container mt-5">
 <h1 class="mb-4 text-center">URL Shortener</h1>
 <div class="row justify-content-center">
 <div class="col-md-6">
 <div class="input-group mb-3">
 <input
 type="text"
 class="form-control"
 id="url-input"
 placeholder="Enter URL to shorten"
 />
 <div class="input-group-append">
 <button class="btn btn-primary" type="button" id="shorten-btn">
 Shorten
 </button>
 </div>
 </div>
 <a id="short-url" class="d-none"></a>
 </div>
 </div>
</div>
<पी> तत्वों को जोड़ने के बाद, केवल एपीआई गेटवे से प्राप्त किया जाने वाला डेटा ही बचता है। हम इसे जावास्क्रिप्ट से संभाल लेंगे। <body> के अंत से पहले भाग, यूआरएल लाने की कार्यक्षमता डालें। <INVOKE_URL> को बदलना न भूलें आपके AWS API गेटवे से।

<!-- Add Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
 
<!-- Add custom JS -->
<script>
 const shortenBtn = document.getElementById("shorten-btn");
 const urlInput = document.getElementById("url-input");
 const urlOutput = document.getElementById("short-url");
 
 shortenBtn.addEventListener("click", async function () {
 let long_url = urlInput.value;
 const apiUrl = `<INVOKE_URL>/shortener?long_url="${long_url}"`;
 const response = await fetch(apiUrl);
 const data = await response.json();
 shortUrl = data.short_url;
 
 urlOutput.innerHTML = shortUrl;
 urlOutput.href = shortUrl;
 urlOutput.classList.remove("d-none");
 });
</script>

अंतिम शब्द और परियोजना सुधार

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

  • यूआरएल शॉर्टनर के लिए एक कस्टम डोमेन सेट करना। Invoke URL AWS द्वारा दिया गया विवरण काफी जटिल है। चूँकि इस प्रोजेक्ट का मुख्य उद्देश्य AWS लैम्ब्डा और अपस्टैश रेडिस का प्रदर्शन करना था, इसलिए मैं इस पोस्ट को इसके साथ लंबा नहीं बनाना चाहता था। लेकिन यदि आप चाहें तो आप AWS API गेटवे से URL को सरल और छोटे में बदल सकते हैं।
  • एपीआई के लिए अपस्टैश दर सीमा लागू करना। मैंने इस परियोजना के लिए निःशुल्क स्तरीय सेवाओं का उपयोग किया है, लेकिन यदि आप एक सक्रिय और सार्वजनिक सेवा बनाने का इरादा रखते हैं, तो आपको अप्रत्याशित लागतों से बचने के लिए अनुरोध सीमा स्थापित करने पर विचार करना चाहिए।
  • इस प्रोजेक्ट को वर्सेल पर होस्ट किया जा रहा है।
<पी> पढ़ने के लिए धन्यवाद.


  1. CSS निरपेक्ष और सापेक्ष इकाइयाँ CSS निरपेक्ष और सापेक्ष इकाइयाँ

    CSS निरपेक्ष इकाइयाँ और सापेक्ष इकाइयाँ दोनों दूरी इकाइयों की श्रेणी में आती हैं। CSS सापेक्ष इकाइयाँ किसी अन्य तत्व के संदर्भ में एक तत्व की लंबाई को परिभाषित करती हैं। उदाहरण के लिए, vh सापेक्ष इकाई व्यूपोर्ट ऊंचाई के सापेक्ष है। CSS सापेक्ष इकाइयाँ निम्नलिखित हैं - Sr.No इकाई और इससे संबंधित

  1. एंड्रॉइड LinkedBlockingDeque में शेष क्षमता () का उपयोग कैसे करें? एंड्रॉइड LinkedBlockingDeque में शेष क्षमता () का उपयोग कैसे करें?

    उदाहरण में आने से पहले, हमें पता होना चाहिए कि LinkedBlockingDeque क्या है। यह संग्रह इंटरफ़ेस और AbstractQueue वर्ग द्वारा कार्यान्वित किया जाता है। यह लिंक्ड नोड्स के आधार पर वैकल्पिक सीमाएँ प्रदान करता है। यह एक कंस्ट्रक्टर को मेमोरी साइज पास करने वाला है और एंड्रॉइड में मेमोरी अपव्यय प्रदान करने

  1. Arraylist String  से डुप्लिकेट मान कैसे प्राप्त करें और फिर उन वस्तुओं को Android में किसी अन्य Arraylist में प्राप्त करें? Arraylist<String> से डुप्लिकेट मान कैसे प्राप्त करें और फिर उन वस्तुओं को Android में किसी अन्य Arraylist में प्राप्त करें?

    यह उदाहरण दर्शाता है कि कैसे Arraylist से डुप्लीकेट मान प्राप्त करें और फिर उन वस्तुओं को किसी अन्य Arraylist में प्राप्त करें। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्न कोड को res/layou