मैं एक ही डोमेन के लिए AWS CloudFront और API गेटवे साइड का उपयोग कैसे कर सकता हूं?


9

मैं S3 पर अपनी वेबसाइट की स्थैतिक संपत्ति डाल रहा हूं, और उन्हें वितरित करने के लिए CloudFront की स्थापना कर रहा हूं। यह अनिवार्य रूप से उन सामग्री को रखता है जो उपयोगकर्ताओं को मेरी साइट पर किसी भी GET अनुरोध के लिए चाहिए, जो मौजूदा रास्तों पर है, त्रुटियों के लिए एक catchall के साथ।

मेरे पास कुछ POST अनुरोध भी हैं जिन्हें मुझे संभालने की आवश्यकता है। फॉर्म सबमिशन, ईमेल भेजना, सूचनाएं, डेटाबेस के साथ बातचीत करना।

मैं उसी डोमेन के लिए CloudFront के साथ लैम्ब्डा (या एपीआई गेटवे) को एक साथ कैसे सेट कर सकता हूं ताकि CloudFront GET अनुरोधों को संभालती है, और API गेटवे अनुरोधों को एक निकाय या POST अनुरोधों के साथ संभालती है। या मैं इसे किसी भी तरह अलग-अलग URL से कर सकता हूँ?

जवाबों:


2

मैं आपके प्रस्तावित डिज़ाइन के साथ कई वेब ऐप चलाता हूं, और मैंने तकनीकों को साझा करने के लिए gofa , एक शैक्षिक गो और लैंबडा ऐप निकाला है।

आपको www.gofaas.netS3 + CloudFront और api.gofaas.netAPI Gateway + Lambda के लिए दो अलग-अलग डोमेन चाहिए ।

फिर आप अपनी स्थैतिक साइट को एपीआई के साथ एपीआई गेटवे कॉर्स कॉन्फ़िगरेशन और कुछ जावास्क्रिप्ट के साथ बातचीत कर सकते हैं:

fetch(`https://api.gofaas.net/work`, {
    method: "POST",
    mode: "cors",
    headers: {
        "Accept": "application/json",
        ...
    },
    body: JSON.stringify(...)
})
    .then(function(response) {
        return response.json();
    })
    .then(function (json) {
        // use response
    })
    .catch(function (err) {
        console.log("fetch error", err);
    });

यहाँ यह सब स्थापित करने के लिए कुछ गाइड हैं:

S3, CloudFront और ACM के साथ स्टेटिक वेबसाइट

लैंबडा, एपीआई गेटवे, कॉर्स और JWT के साथ एपीआई सुरक्षा


साइट का परीक्षण हमेशा यहां दिलचस्प हो जाता है। एडब्ल्यूएस के बुनियादी ढांचे को स्थानीय रूप से दोहराना कठिन है ताकि आप स्थानीय स्तर पर एकीकरण परीक्षण कर सकें। मैं एक उपडोमेन के बजाय एक मार्ग का उपयोग करता हूं। यह परीक्षण का हिस्सा मदद करता है। इसके अलावा कॉर्स चुनौतियों को भी समाप्त करता है। फिर, एपीआई गेटवे उस मार्ग के लिए CloudFront के लिए एक मूल बन जाता है।
कोस्टा

6

आप एक लैम्ब्डा फ़ंक्शन, सेटअप एपीआई गेटवे बना सकते हैं, और फिर कुछ गेटवे (जैसे / रेस्ट / *) को एपीआई गेटवे को अग्रेषित करने के लिए क्लाउडफ्रंट को कॉन्फ़िगर कर सकते हैं, और एक एस 3 बाल्टी से बाकी सब कुछ परोस सकते हैं।

यह कैसे करना है, यह दिखाने के लिए यहां एक पूरा चल रहा है: https://www.codeengine.com/articles/process-form-aws-api-gateway-lambda/


2

कनेक्शन के दृष्टिकोण से "कुछ" को आपके अनुरोधों का जवाब देने की आवश्यकता है (GET, POST, PUT, सब कुछ)। सबसे पहले आपके पास एक टीसीपी कनेक्शन है और "कुछ" को यह सुनिश्चित करने की आवश्यकता है कि यह परत 7 को समझ रहा है और ग्राहक द्वारा भेजे जा रहे बाइट्स से समझ बना रहा है। केवल इस बिंदु पर POST अनुरोधों या किसी अन्य URL की तुलना में एक URL से भिन्न GET अनुरोधों को संभालना संभव है। तो अंत में आपको एक ऐसी सेवा की आवश्यकता होती है जो HTTP को समझने और रुट करने में सक्षम हो। निम्नलिखित सेवाएँ ऐसा करने में सक्षम हैं: CloudFront ELB / ALB API गेटवे (सीमा बाद में आती है)

API गेटवे आंतरिक रूप से CloudFront का उपयोग करता है (आपको वास्तव में CloudFront स्तर पर कुछ भी कॉन्फ़िगर करने का मौका दिए बिना) - इसका मतलब है कि CloudFront और API Gateway को साइड-बाय-साइड चलाने का कोई तरीका नहीं है क्योंकि अंत में इसका मतलब यह होगा कि CloudFront के साथ CloudFront साथ साथ।

CloudFront आपको पैटर्न के आधार पर विभिन्न उत्पत्ति का चयन करने का मौका देता है - लेकिन आप केवल S3 या ELB / ALBs को मूल के रूप में चुन सकते हैं - लैम्बडा फ़ंक्शंस के अलावा (लैम्बडा @ एज फ़ंक्शनलिटी के अलावा)।

ALB / ELB केवल बैकेंड के रूप में EC2 उदाहरणों का उपयोग कर सकते हैं - यहाँ कोई लैम्ब्डा या S3 नहीं है।

केवल वे ही तरीके हैं जिनके बारे में मैं सोच सकता हूँ कि आप ये करना चाहते हैं:

  • आप एपीआई गेटवे का उपयोग करते हैं और एक विशिष्ट "संपत्ति" -पैथ को एक लैम्ब्डा फ़ंक्शन में रूट करते हैं जो एस 3 के लिए रिवर्स प्रॉक्सी की तरह करता है (इसलिए लैम्ब्डा के माध्यम से स्थैतिक संपत्ति को पाइप करना) - यहां लैम्ब्डा के लिए लागतों से अवगत रहें!
  • आप ऐसा ही कर सकते हैं लेकिन लैंबडा के माध्यम से परिसंपत्ति को पाइप करने के बजाय सिर्फ लैम्ब्डा के भीतर एक हस्ताक्षरित URL उत्पन्न करें जो कि सेवा के लिए सीधे S3 पर पुनर्निर्देशित करें (अधिक लागत कुशल हो सकता है)
  • अपने शेष एप्लिकेशन की तुलना में अपनी संपत्ति के लिए विभिन्न उप-डोमेन का उपयोग करना - यह एक बहुत ही सामान्य पैटर्न है क्योंकि आप आसानी से DNS स्तर पर अलग हो सकते हैं और विभिन्न उपयोग के मामलों के लिए विभिन्न सेवाओं का उपयोग कर सकते हैं (गैर-स्थैतिक के लिए संपत्ति और एपीआई गेटवे के लिए CloudFront भागों)

तो मेरा कॉल अंतिम विकल्प होगा - लेकिन इसका मतलब है कि आपको क्लाइंट / ब्राउज़र को सभी स्थिर संपत्तियों (या सभी POST अनुरोधों के लिए) के लिए एक अलग उपडोमेन पर इंगित करना होगा।

ऐसा लगता है जैसे आप AngularJS या React जैसी तकनीकों पर एक नज़र रखना चाहते हैं ताकि ब्राउजर में सही मायने में एपीआई-संचालित एप्लिकेशन का निर्माण किया जा सके। इस दृष्टिकोण के साथ आप एक वास्तविक एपीआई चला रहे हैं जो एक एपीआई गेटवे के साथ सभी "गतिशील" अनुरोधों को संभाल रहा है और एस 3 से स्वयं को स्थिर संपत्ति के रूप में आवेदन वितरित कर रहा है। शायद उन लोगों को देखने से आपको अपना रास्ता खोजने में मदद मिल सकती है - भले ही आप उनका उपयोग न करें, इस तरह की चीजों का निर्माण करने का वास्तुशिल्प पैटर्न इस तरह से है जो आप imho के लिए पूछ रहे हैं।


2

मेरे पास एक ही सेटअप है। S3 पर स्टैटिक एसेट्स, लैम्ब्डा फ़ंक्शन एपीआई गेटवे के माध्यम से सेवा करते हैं, और वे एक ही डोमेन नाम साझा करते हैं।

मैं एपीआई गेटवे के साथ जाता हूं जो पहले से ही क्लाउडफ्रंट का उपयोग करता है और इसकी कुछ कार्यक्षमता जैसे कैशिंग को उजागर करता है। फिर मैं URI को कॉन्फ़िगर करता हूं जो स्थैतिक संपत्ति के लिए मैप करता है। एपीआई गेटवे में, एक संसाधन एक लैम्बडा फ़ंक्शन, एक एडब्ल्यूएस फ़ंक्शन, एक मॉक या एक अन्य URL हो सकता है। मेरे पास उनके S3 URL की ओर इशारा है।

यूआरआई को उप-वर्गों के साथ-साथ उदा करने के लिए सेट किया जा सकता है /assets/*


तो जो हिस्सा मुझे परेशान करता है वह एपीआई को तैनात करता है। यह आमतौर पर आपके मामले में अग्रणी पथ के बिना दर्शाती है /assets/*। मुझे तैनाती को हटाना होगा, और /assets/*रास्ते पर राइट क्लिक करना होगा और वहां से तैनाती करनी होगी ।
कोस्टा

1
मुझे कमांड लाइन टूल्स में खुदाई करनी चाहिए, और वहां से एपीआई और लंबोदा बनाने और संपादित करने का तरीका सीखना चाहिए।
कोस्टा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.