TLDR: हम आने वाले प्रतिक्रिया के लिए नया कैश व्यवहार बनाकर CloudFront 307 रीडायरेक्ट कैशिंग चाल करने के लिए है हमारे Lambda समारोह से।आकार छवियों और एक ही URL में उन्हें तुरंत मिल: एडब्ल्यूएस CloudFront -> S3 -> लैम्ब्डा -> CloudFront
आप विश्वास नहीं करेंगे कि हम इसे प्राप्त करने के लिए कितने करीब हैं। हमने पिछले चरण में इतनी बुरी तरह फंस गई है।
व्यापार मामला:
हमारे आवेदन भंडार S3 में छवियों और व्यवस्था विश्व भर में किसी भी भौगोलिक धीमी चढ़ाव से बचने के लिए CloudFront के साथ उन्हें कार्य करता है। अब, हम डिज़ाइन के साथ वास्तव में लचीला होना चाहते हैं और सीधे CanFront URL में नई छवि डिमेंमेंट का अनुरोध करने में सक्षम होना चाहते हैं! प्रत्येक नए छवि का आकार मांग पर बनाया जाएगा और फिर एस 3 में संग्रहीत किया जाएगा, इसलिए दूसरी बार अनुरोध किया जाएगा कि यह वास्तव में जल्दी से कार्य करेगा क्योंकि यह एस 3 में मौजूद होगा और क्लाउडफ्रंट में भी कैश किया जाएगा।
आइए कहें कि उपयोगकर्ता ने छवि chucknorris.jpg अपलोड की है। केवल मूल छवि S3 में संग्रहीत किया जाएगा और इस तरह हमारे पृष्ठ पर पूरा किया wil:
//xxxxx.cloudfront.net/chucknorris.jpg
हम गणना की है कि अब हम एक थंबनेल प्रदर्शित करने के लिए की जरूरत है 200x200 पिक्सल का। इसलिए हम अपने टेम्पलेट में होने की छवि src डाल:
//xxxxx.cloudfront.net/chucknorris-200x200.jpg
जब इस नए आकार अनुरोध किया जाता है, अमेज़न वेब सेवाओं उस पर प्रदान करने के लिए एक ही बाल्टी में और अनुरोधित कुंजी के साथ फ्लाई। इस तरह से छवि क्लाउडफ्रंट के उसी यूआरएल में सीधे लोड हो जाएगी।
यहाँ कैसे अजगर लैम्ब्डा समाप्त होता है:
मैं वास्तुकला सिंहावलोकन के साथ एक बदसूरत ड्राइंग और कैसे हम एडब्ल्यूएस में यह कर रहे हैं पर कार्यप्रवाह बनाया
return {
'statusCode': '301',
'headers': {'location': redirect_url},
'body': ''
}
समस्या :
यदि हम लैम्ब्डा फ़ंक्शन को S3 पर रीडायरेक्ट करते हैं, तो यह एक आकर्षण की तरह काम करता है। यदि हम क्लाउडफ्रंट पर रीडायरेक्ट करते हैं, तो यह रीडायरेक्ट लूप में जाता है क्योंकि क्लाउडफ्रंट 307 (साथ ही 301, 302 और 303) तक पहुंचता है। जैसे ही हमारे लैम्ब्डा समारोह CloudFront पर रीडायरेक्ट के रूप में, CloudFront एपीआई द गेटवे यूआरएल कॉल के बजाय S3 से छवि प्राप्त करते समय की:
मैं CloudFront के Behaviors
सेटिंग्स टैब में नए कैश व्यवहार बनाना चाहेंगे। इस व्यवहार को लैम्ब्डा या एस 3 से प्रतिक्रियाओं को कैश नहीं करना चाहिए (पता नहीं है कि आंतरिक रूप से वास्तव में क्या हो रहा है), लेकिन फिर भी इस आकार के किसी भी अनुरोध को इस तरह के आकार में कैश करना चाहिए। मैं पथ पैटर्न -\d+x\d+\..+$
सेट करने की कोशिश कर रहा हूं, "लैम्ब्डा फ़ंक्शन एसोसिएशन" जोड़ने के लिए लैम्ब्डा फ़ंक्शन का एआरएन जोड़ें और इवेंट प्रकार Origin Response
सेट करें। इसके आगे, मैं "डिफ़ॉल्ट टीटीएल" को 0
पर सेट कर रहा हूं।
लेकिन मैं व्यवहार किसी त्रुटि के कारण नहीं बचा सकते हैं:
हम सही रास्ते पर हैं, या इस "लैम्ब्डा समारोह एसोसिएशन" के विचार पूरी तरह से अलग है?
आपको लगता है कि त्रुटि संदेश के बारे में एडब्ल्यूएस समर्थन से संपर्क करना चाहिए। इसके अलावा, क्या आपने क्लाउडफ़्रंट की नई Lambda @ Edge सुविधा देखी है? –