Log in to leave a comment
No posts yet
मैं जानता हूँ कि Amazon S3 बिल देखते समय कैसा महसूस होता है। एक डेटा इंजीनियर के लिए S3 हवा की तरह अनिवार्य है, लेकिन जब आप परीक्षण के लिए हज़ारों बार API कॉल करते हैं और बड़ी फ़ाइलों को स्थानांतरित करते हैं, तो लागत लाभ से कहीं अधिक हो सकती है। 2025 तक, S3 Standard स्टोरेज की लागत $0.023 प्रति GB है, लेकिन असली डर डेटा ट्रांसफर (Egress) लागत का है। यदि यह 100GB से अधिक हो जाता है, तो आपको $0.09 प्रति GB का भुगतान करना होगा, जो स्टोरेज लागत का लगभग 4 गुना है। इस लागत को बचाने के लिए कई लोग स्थानीय रूप से MinIO चलाते हैं, लेकिन अक्सर वास्तविक प्रोडक्शन कोड के साथ तालमेल बिठाने में संघर्ष करते हैं। इसलिए, मैंने उन कॉन्फ़िगरेशन विधियों को संकलित किया है जिनका उपयोग मैं व्यावहारिक कार्य में करता हूँ।
एप्लिकेशन कोड के भीतर सीधे S3 एड्रेस लिखना एक खतरनाक आदत है। यदि आप परिनियोजन (deployment) के समय गलती से स्थानीय एड्रेस छोड़ देते हैं, तो यह विफलता का कारण बन सकता है। Boto3 लाइब्रेरी कोड के आंतरिक सेटिंग्स से पहले सिस्टम एनवायरनमेंट वेरिएबल्स को पढ़ती है। इस प्राथमिकता का उपयोग करके, आप स्थानीय स्तर पर MinIO की ओर देख सकते हैं और प्रोडक्शन एनवायरनमेंट में स्वचालित रूप से AWS S3 का उपयोग कर सकते हैं।
सेटअप विधि
.env फ़ाइल में AWS_S3_ENDPOINT_URL=http://localhost:9000 परिभाषित करें।os.getenv("AWS_S3_ENDPOINT_URL") का उपयोग करके इस मान को पढ़ें।boto3.client("s3", endpoint_url=endpoint) की तरह इनिशियलाइज़ करें।इस तरह से सेट करने पर, चूंकि प्रोडक्शन सर्वर पर वह एनवायरनमेंट वेरिएबल नहीं होगा, इसलिए Boto3 डिफ़ॉल्ट AWS एड्रेस का उपयोग करेगा। स्थानीय परीक्षण चरण के दौरान होने वाले हज़ारों PUT/GET अनुरोधों की लागत को शून्य करने का यह सबसे निश्चित तरीका है।
जब आप कमर्शियल इन्फ्रास्ट्रक्चर को परिभाषित करने वाले टेराफॉर्म कोड को स्थानीय MinIO पर सीधे उपयोग करने का प्रयास करते हैं, तो आपको त्रुटियों का सामना करना पड़ेगा। ऐसा इसलिए है क्योंकि टेराफॉर्म AWS प्रदाता डिफ़ॉल्ट रूप से वास्तविक AWS खाता आईडी को सत्यापित करने का प्रयास करता है। स्थानीय एनवायरनमेंट में, आपको इस सत्यापन प्रक्रिया को रोकना और चकमा देना होगा।
टेराफॉर्म कॉन्फ़िगरेशन उदाहरण
endpoints सेटिंग में s3 = "http://localhost:9000" निर्दिष्ट करें।s3_use_path_style, skip_credentials_validation, और skip_requesting_account_id गुणों को true पर सेट करें।access_key और secret_key में mock_key जैसा कोई भी स्ट्रिंग डालें।इस सेटअप के बाद, टेराफॉर्म वास्तविक AWS खाते से जुड़े बिना स्थानीय MinIO में बकेट नीतियां और जीवनचक्र नियम (Lifecycle Rules) बना देगा। यह परिनियोजन से पहले इन्फ्रास्ट्रक्चर परिभाषा में त्रुटियों को पकड़ने में प्रभावी है, जिससे परिनियोजन विफलता दर कम हो जाती है।
क्वेरी प्रदर्शन को ठीक से देखने के लिए, नकली डेटा भी बड़े पैमाने पर होना चाहिए। हालाँकि, यदि आप सामान्य लूप स्टेटमेंट के साथ डेटा बनाते हैं, तो यह बहुत धीमा हो जाता है। मैं Polars या Apache Arrow का उपयोग करता हूँ। चूंकि Polars वेक्टराइज़्ड ऑपरेशन्स का उपयोग करता है, यह Pandas की तुलना में 10 गुना तक तेज़ है।
डेटा निर्माण प्रक्रिया
Faker लाइब्रेरी के साथ नमूना लॉग प्रारूप तय करें और Polars के साथ 100,000 पंक्तियों के चंक्स (chunks) बनाएं।pyarrow इंजन की write_to_dataset सुविधा का उपयोग करके Hive शैली (year=2026/month=04) में विभाजित Parquet फ़ाइलों को सहेजें।क्लाउड पर 100GB डेटा को बार-बार अपलोड और डाउनलोड करने पर सैकड़ों डॉलर का शुल्क लग सकता है। स्थानीय हार्डवेयर को उसकी सीमा तक धकेलते हुए परीक्षण करना आपके बटुए के स्वास्थ्य के लिए बहुत बेहतर है।
फ़ाइल अपलोड होने पर स्वचालित रूप से चलने वाले सर्वरलेस लॉजिक का स्थानीय स्तर पर परीक्षण करते समय, आप MinIO की बकेट नोटिफिकेशन सुविधा का उपयोग कर सकते हैं। MinIO वेबहुक सुविधा का समर्थन करता है जो ऑब्जेक्ट बनने पर निर्दिष्ट HTTP एंडपॉइंट पर JSON डेटा भेजता है।
कार्यान्वयन क्रम
MINIO_NOTIFY_WEBHOOK_ENDPOINT को स्थानीय सर्वर एड्रेस से कनेक्ट करें।s3:ObjectCreated:Put इवेंट स्थानीय सर्वर पर ठीक से प्राप्त हुआ है।इवेंट की भीड़ होने पर विश्वसनीयता, क्यू (queue) आकार और इवेंट दर द्वारा निर्धारित की जाती है (
)। स्थानीय परीक्षण परिवेश में, queue_limit सेटिंग को उदारतापूर्वक बढ़ाना मानसिक शांति के लिए अच्छा है।
कभी-कभी डॉकर कंटेनर के भीतर बनाई गई फ़ाइलें होस्ट मशीन पर अनुमति (permission) समस्याओं के कारण नहीं खुलती हैं। विशेष रूप से macOS उपयोगकर्ताओं के लिए, यह जांचना महत्वपूर्ण है कि क्या Docker Desktop सेटिंग्स में 'VirtioFS' सक्षम है। VirtioFS पारंपरिक gRPC FUSE पद्धति की तुलना में फ़ाइल सिस्टम प्रोसेसिंग में 98% तक तेज़ है। बड़े डेटा को संभालते समय यह अंतर बहुत महत्वपूर्ण होता है।
अनुमति समस्या समाधान
docker run के दौरान --user $(id -u):$(id -g) विकल्प का उपयोग करके होस्ट और कंटेनर की अनुमतियों का मिलान करें।/data पथ के साथ वॉल्यूम माउंट करें।यदि आप एक अच्छा स्थानीय परिवेश बनाते हैं, तो आपके पास एक आदर्श प्रयोगशाला होगी जहाँ आप लागत की चिंता किए बिना इन्फ्रास्ट्रक्चर के कार्य सिद्धांतों का पता लगा सकते हैं। यह केवल पैसे बचाने के बारे में नहीं है, बल्कि क्लाउड परिवेश पर निर्भर हुए बिना एक स्वतंत्र विकास लय (rhythm) प्राप्त करने के बारे में है।