क्लाउडफोर्मेशन आपले एपीआयजी पुनर्वितरण करत नाही: ते कसे निश्चित करावे

समस्या:

क्लाऊडफोर्मेशन आपल्या एपीआय गेटवे स्टेज (टे) चे पुन्हा संसाधने करीत नाही, जरी ती ती संसाधने अद्यतनित करते.

परिदृश्यः

माझा कार्यसंघ आणि माझ्याकडे लॅम्बडा संसाधनांसह एसएएम टेम्पलेट आहे. आम्ही स्पष्टपणे एक एडब्ल्यूएस :: सर्व्हरलेस :: आपी स्त्रोत तयार करत नाही कारण जेव्हा ते एपीईएस :: सर्व्हरलेस :: फंक्शन संसाधनात वापरले जातात तेव्हा ते आमच्यासाठी स्पष्टपणे तयार केले जातात. आम्ही कित्येक महिन्यांत उपयोजित गेलो ज्यामध्ये आमच्या कार्यामध्ये अद्यतने होती परंतु त्यांची नावे स्थिर राहिली. आमच्या लॅम्बडासच्या नावांची आवृत्ती सादर केल्याने एक समस्यादेखील आणली. आम्ही आमची लॅम्बडासची नावे बदलली आहेत तेव्हा आम्ही ही एपीआय गेटवे संसाधने गृहीत धरली आहेत जी ती कार्ये ट्रिगर करतात क्लाउडफोर्मेशनद्वारे पुन्हा नियुक्त केले जातील, परंतु तसे नाही. क्लाऊडफोर्मेशन उपयोजन ने आवृत्तीकृत नावाने एक नवीन लँबडा तयार केला, परंतु एपीआय गेटवे उपयोजनेस अद्ययावत केले नाही, लंबडास यापुढे अस्तित्त्वात नसलेले एपीआय समाप्ती सोडले. याचा परिणाम अंतर्गत सर्व्हर त्रुटीमुळे झाला.

समस्या पुन्हा सांगण्यासाठी, ही आवृत्तीच्या नावे ओळख होती ज्यामुळे आम्हाला त्रुटीची जाणीव झाली. हे यापूर्वी कधीच घडले नाही कारण आम्ही यापूर्वी कधीही आमच्या लॅम्बडा संसाधनांची आवृत्ती केली नव्हती, म्हणूनच एपीआय गेटवेची पुनर्बांधणी आवश्यक नव्हती कारण ती अद्याप त्याच फंक्शन नावाच्या नवीनतम: लाइव्ह आवृत्तीकडे निर्देश करीत होती. त्यानंतर, आम्ही आमच्या लॅम्बडासमध्ये आवृत्तीबद्ध नावे जोडली आणि आपला अनुप्रयोग चालविण्याचा प्रयत्न करताना आम्हाला त्वरित 501 त्रुटी आल्या.

उपाय:

नवीन एपीआयजी नाव: आपल्या टेम्पलेटमध्ये एक स्पष्ट एपीआयजी संसाधन असल्यास, उपरोधिकपणे, आपण माझ्या कार्यसंघाने त्रुटीची ओळख करुन दिली त्याच मार्गाने हे निराकरण करू शकता; आवृत्तीबद्ध नाव जोडून, ​​परंतु यावेळी आपल्या एपीआयजी संसाधनात. काही ब्लॉग पोस्ट्स आपल्या एपीआयजी स्त्रोत नावाच्या शेवटी टाईमस्टँप जोडल्याचा उल्लेख करतात, इतरांनी स्वतः ते अद्यतनित केले. आपण ज्या कुठल्या मार्गाने त्याकडे जाल ही कल्पना ही आहे की प्रत्येक उपयोजित ठिकाणी नाव बदलले जावे जेणेकरुन क्लाउडफोर्मेशनने हे नवीन संसाधन म्हणून हाताळले आणि नवीन उपयोजन तयार केले.

कोडपिपलाईनमधील लॅम्बडा: मी सोडविलेले उपाय म्हणजे माझ्या एपीआय गेटवेवर पुनर्प्रवास करणार्‍या माझ्या कोडपिपलिनमध्ये एक स्टेज जोडणे. माझ्या क्लाऊडफॉर्मेशन चेंजसेटच्या अंमलबजावणीनंतर ते ठीक बसते, एपीआय आयडी घेते, ते एका लॅम्बडाला पाठवते आणि नंतर अ‍ॅपिगेटवे एसडीके चालविते जेणेकरून माझे प्रोड स्टेज पुन्हा नव्याने सुरू होईल. या समाधानाने आमच्यासाठी चांगले कार्य केले आहे आणि स्वतः ते अंमलात आणण्यासाठी खालील चरण आहेत.

माझ्या कोड पाइपलाइनमध्ये लॅम्बडा जोडणे म्हणजे मी हा प्रश्न कसा सोडवला.

पायर्‍या:

1 - आपला लॅम्बडा तयार करा

लँबडाने यासारखे काहीतरी दिसावे:

निर्यात.हँडलर = एसिंक (इव्हेंट) => {कॉन्स्ट जॉब = इव्हेंट ['CodePipline.job']; प्रयत्न करा {कॉन्स्ट पॅरामीटर्स = JSON.parse (जॉब.डेटा.अॅक्शन कॉन्फिगरेशन. कॉन्फिगरेशन. युजरपॅरामीटर्स);
        कन्स्ट {एपीआयआयडी} = पॅरामीटर्स;
        डिलीट पेरामस = {रेस्टअपीआयडी: एपीआयआयडी, स्टेजनाव: 'प्रोड'};
        अपिगेटवे.डिलीटस्टेज (डिलीटपाराम्स) प्रतीक्षा करा .प्रोमीज ();
        चला उपयोजनपाराम = {restApiId: apiId, वर्णन: dep उपयोजन लॅम्ब्डामार्गे तयार केले. `
        चला उपयोजन = प्रतीक्षा करा अ‍ॅपिगेटवे .क्रिप्टेड डिप्लोयमेंट (डिप्लॉयमेंटपॅरम) .प्रोमीज ();
        चला तयार करा पॅरम = {उपयोजन आयडी: उपयोजन.आयडी, रेस्टअपीआयआयडी: एपीआयआयडी, स्टेजनाव: 'प्रोड',};
        अ‍ॅपिगेटवे.क्रीएटस्टेज (क्रिएटपाराम्स) प्रतीक्षा करा.
        चला अपडेटपॅरम = {restApiId: apiId, stepsName: 'Prod', patchOperations: [{वरुन: '*', ऑप: "पुनर्स्थित करा", पथ: "/ उपयोजनआयडी", मूल्य: उपयोजन.आयडी}]};
        get updateResult = वाट पहा अ‍ॅपिगेटवे .अपडेटस्टेज (अपडेटपॅरम्स) .प्रोमीज ();
if (updateResult.dep रोजगारId) od कोडेपिपलिन.पुस्तक jobSuccessResult ({जॉबआयडी: जॉब.आईडी}) प्रतीक्षा करा. failed अन्यथा {// एसएनएस अधिसूचना अयशस्वी एपीआय उपयोजन थ्रोची सूचना {स्टेटस कोड: 500, संदेश: "एपीआय अद्यतनित केले नाही"}; }} कॅच (एरर) {कॉन्स्ट फेल्युअरपॅरामा = {फेल्युअर डेटेल: {संदेश: एरर.मेसेज, प्रकारः “जॉबफेल्ड”}, जॉब आयडी: जॉब.आइड};
कॉन्स्ट फेलरॅरसॉल्ट = कोडेपिपलाइनची प्रतीक्षा करा .पुटजॉबफलररसॉल्ट (अपयशपाराम) .प्रोमीज (); }};

हा लॅम्बडा काय करीत आहे याचा एक संक्षिप्त आढावा प्रथम, आपल्याला कोड पाइपलाइन जॉब मिळवणे आवश्यक आहे कारण कार्याच्या शेवटी आपल्याला या टप्प्यातील स्थिती "यश" किंवा "अपयश" वर सेट करणे आवश्यक आहे. आपण फक्त “हॅलो वर्ल्ड” स्टेटमेंट छापून पाइपलाइनमध्ये डिफॉल्ट लॅम्बडा चिकटवले असल्यास, आपल्याला आढळेल की आपल्या पाईपलाईन आपल्या लॅम्बडासह स्टेजवर सुमारे 20 मिनिटे थांबेल. कारण नोकरीच्या स्थिती अद्ययावत केल्याशिवाय कोड पाइपलाइन त्या टप्प्यावरुन पुढे जाऊ शकत नाही.

त्यानंतर, आपण कोडपीपलाइन स्टेज actionक्शन सेटअप दरम्यान वापरकर्ता पॅरामीटर म्हणून पास केलेला एपीआयजी आयडी घ्या. आपण पुनर्निर्देशित करू इच्छित स्टेज हटविण्यासाठी अ‍ॅपिगेटवे एसडीके वापरा. होय, आपण ते योग्यरित्या वाचले आहे. त्यानंतर उपयोजित करण्यासाठी एक नवीन उपयोजन आणि नवीन टप्पा तयार करा. अखेरीस, अद्ययावतस्टेज वरून निराकरण झालेल्या प्रतिज्ञेचे मूल्य कॅप्चर करा, आणि त्यात एक .dep مامورId असेल तर आम्हाला माहित आहे की आम्ही एपीआयजी तैनाती यशस्वी झाली आहे, यासाठी आम्हाला कोडपिपलाइनवर परत अहवाल देऊ शकतो, जेणेकरून आपली पाइपलाइन चालू राहू शकेल. कोणतीही त्रुटी पकडली जातील आणि परिणामी पाइपलाइन कार्य अयशस्वी होईल.

पर्यायी: मी एक टिप्पणी जोडली परंतु एसएनएस सूचनेसाठी कोड समाविष्ट केलेला नाही. आपल्या पाइपलाइनवर सूचना असणे किंवा ही लॅम्बडा त्रुटी असल्यास आपल्याला आपली नवीन क्लाउडफोर्मेशन उपयोजन अद्ययावत होईल हे माहित असणे चांगले होईल परंतु एपीआयजी केले नाही, ज्यामुळे आपण या सर्व गोष्टी सुरू केल्या त्याच स्थितीत राहतील.

2 - स्टेज आपल्या कोड पाइपलाइनवर जोडा

आपल्या क्लाउडफॉर्मेशन चेंजसेट स्टेज कार्यान्वित झाल्यानंतर लॅम्बडा स्टेज जोडण्यासाठी आपली पाइपलाइन संपादित करा. Providerक्शन प्रदाता म्हणून लॅम्बडा निवडा, आम्ही आत्ताच तयार केलेला लॅम्बडा निवडा आणि आपण तैनात करू इच्छित असलेल्या एपीआय गेटवेचा आयडी प्रविष्ट करा. आपण आपल्या एपीआय गेटवे मॅनेजमेंट कन्सोलवर गेल्यास, मुख्य पृष्ठावर आयडीची यादी आहे.

3 - लॅम्बडाला योग्य परवानग्या असल्याचे सुनिश्चित करा.

आपल्या एपीआयजी उपयोजनेसाठी आयएएमच्या भूमिकेत लँबडामध्ये सहभागी असलेल्या एपीआयजी (जे तैनात करता येईल) आणि कोडपिपलाइन (जेणेकरून ते नोकरी अद्ययावत करू शकेल) यासाठी परवानगीची आवश्यकता असेल.

4 - आपल्या पाइपलाइनची चाचणी घ्या

जेव्हा आपण हे सर्व सेट केलेले कराल, तेव्हा पुढे जा आणि बदल रिलीझ करा किंवा आपला कोड दाबा, आणि आपल्या क्लाउडफॉर्मेशन स्टॅक आणि आपली एपीआय गेटवे उपयोजन अद्ययावत करण्याची प्रक्रिया स्वयंचलितपणे पहा.

निष्कर्ष

हे थोडी मजेदार आहे की आमच्यासाठी क्लाउडफॉर्मेशन हे आधीपासूनच हाताळत नाही. कदाचित एखाद्या दिवशी ते होईल.

रीकॅप करण्यासाठी, आम्ही क्लाउडफोर्मेशनद्वारे उपयोजनेस भाग पाडण्यासाठी आपल्या टेम्पलेटमध्ये एपीआयजी स्त्रोत नाव अद्यतनित करण्याच्या समाधानाबद्दल थोडक्यात चर्चा केली. आम्ही आपले एपीआयजी पुन्हा डिझाइन करण्यासाठी कोडपिपलाइन आणि लॅम्बडा वापरून प्रक्रिया स्वयंचलित कशी करू शकता हे देखील आम्ही पाहिले.

वाचल्याबद्दल धन्यवाद, आणि हे सोडवण्याच्या मार्गांबद्दल, माझ्या दृष्टिकोनातून सुधारणा किंवा इतर कल्पनांबद्दल अभिप्राय देण्यासाठी मोकळ्या मनाने.