कस्टम स्क्रिप्टिंग के बिना विफल ECS Fargate डिप्लॉयमेंट के लिए स्वचालित रोलबैक।
→ECS सर्विस पर रोलबैक के साथ ECS डिप्लॉयमेंट सर्किट ब्रेकर सक्षम करें।
क्यों: नेटिव ECS सुविधा जो नए कार्यों के स्थिर होने में विफल होने पर स्वचालित रूप से रोलबैक करती है। कस्टम CodeBuild पोलिंग या जटिल CodeDeploy सेटअप की तुलना में सबसे कम ऑपरेशनल ओवरहेड।
संदर्भ↗
प्राथमिक रीजन में डिप्लॉय करें, स्वचालित परीक्षणों से मान्य करें, फिर अन्य रीजनों में समानांतर डिप्लॉय करें।
→अनुक्रमिक चरणों के साथ एक एकल CodePipeline का उपयोग करें: (1) रीजन A डिप्लॉय करें, (2) एक CodeBuild परीक्षण चरण जो सत्यापन चलाता है, (3) रीजनों B और C के लिए एक समानांतर डिप्लॉय चरण।
क्यों: CodeBuild एक स्वचालित, प्रोग्रामेटिक गेट के रूप में कार्य करता है। स्टेप फंक्शन्स के साथ कई पाइपलाइन ऑर्केस्ट्रेट करने की तुलना में एक सिंगल पाइपलाइन सरल है।
CodeDeploy लाइफसाइकिल हुक में एक लंबे समय तक चलने वाली सत्यापन स्क्रिप्ट समय से पहले डिप्लॉयमेंट की सफलता का कारण बनती है।
→`AppSpec.yml` फ़ाइल में विशिष्ट लाइफसाइकिल हुक स्क्रिप्ट के लिए `timeout` प्रॉपर्टी बढ़ाएँ।
क्यों: टाइमआउट AppSpec फ़ाइल में प्रति-हुक कॉन्फ़िगर किया जाता है, न कि डिप्लॉयमेंट समूह स्तर पर। यह सुनिश्चित करता है कि सत्यापन स्क्रिप्ट के पास पूरा होने के लिए पर्याप्त समय हो।
हर रन पर निर्भरताओं और इमेज लेयर्स को फिर से डाउनलोड करने के कारण होने वाले धीमे CodeBuild Docker इमेज बिल्ड को तेज़ करें।
→CodeBuild प्रोजेक्ट कॉन्फ़िग में, `LOCAL_DOCKER_LAYER_CACHE` सक्षम करें और निर्भरता निर्देशिकाओं (जैसे, `.m2`, `node_modules`) के लिए एक S3 कैश कॉन्फ़िगर करें।
क्यों: सीधे धीमेपन के दोनों स्रोतों को संबोधित करता है। Docker लेयर कैशिंग अपरिवर्तित इमेज लेयर्स का पुन: उपयोग करती है; S3 कैशिंग डाउनलोड की गई एप्लिकेशन निर्भरताओं का पुन: उपयोग करती है।
स्वचालित, मीट्रिक-आधारित रोलबैक के साथ एक Lambda फ़ंक्शन के लिए कैनरी डिप्लॉयमेंट लागू करें।
→`DeploymentPreference` (उदाहरण के लिए, प्रकार `Canary10Percent5Minutes`) के साथ AWS SAM का उपयोग करें। रोलबैक ट्रिगर के रूप में `Errors` मीट्रिक पर एक CloudWatch अलार्म जोड़ें।
क्यों: SAM, Lambda के लिए CodeDeploy के साथ नेटिव रूप से एकीकृत होता है, कस्टम स्क्रिप्ट के बिना उपनाम ट्रैफ़िक शिफ्टिंग, मॉनिटरिंग और रोलबैक को स्वचालित करता है।
संदर्भ↗
Account A में एक CodePipeline के लिए IAM को कॉन्फ़िगर करें ताकि Account B में रिसोर्स डिप्लॉय किए जा सकें।
→पाइपलाइन भूमिका (खाता A) एक एक्शन भूमिका (खाता B) मानती है। B में एक्शन भूमिका पाइपलाइन भूमिका पर भरोसा करती है और उसके पास डिप्लॉय अनुमतियाँ होती हैं। A में S3 आर्टिफैक्ट बकेट और KMS कुंजी में B में एक्शन भूमिका को पहुंच प्रदान करने वाली संसाधन नीतियां होनी चाहिए।
क्यों: यह मानक, सुरक्षित क्रॉस-अकाउंट एक्सेस पैटर्न है: कार्यों के लिए भूमिका ग्रहण, डेटा एक्सेस के लिए संसाधन-आधारित नीतियां।
EKS के लिए एक GitOps वर्कफ़्लो लागू करें जहाँ क्लस्टर स्थिति Git रिपॉजिटरी के साथ स्वचालित रूप से और लगातार मेल खाती है।
→EKS क्लस्टर में एक GitOps कंट्रोलर (जैसे, Flux, ArgoCD) डिप्लॉय करें। इसे Git रिपॉजिटरी की निगरानी करने और परिवर्तनों को लागू/मेल खाने के लिए कॉन्फ़िगर करें।
क्यों: यह मानक "पुल-आधारित" GitOps पैटर्न है। इन-क्लस्टर कंट्रोलर निरंतर सुलह और ड्रिफ्ट डिटेक्शन को संभालता है, जो GitOps का मूल सिद्धांत है।
एक केंद्रीय टूलिंग खाते में एक CodeBuild प्रोजेक्ट को अलग-अलग वर्कलोड खातों में EKS क्लस्टर में Kubernetes मैनिफेस्ट डिप्लॉय करने की अनुमति दें।
→प्रत्येक वर्कलोड खाते में, CodeBuild भूमिका द्वारा विश्वसनीय एक क्रॉस-अकाउंट IAM भूमिका बनाएँ। इस नई भूमिका को EKS क्लस्टर के `aws-auth` ConfigMap में एक Kubernetes RBAC समूह में मैप करें। CodeBuild स्क्रिप्ट `kubectl` चलाने से पहले भूमिका ग्रहण करती है।
क्यों: यह क्रॉस-अकाउंट EKS एक्सेस के लिए मानक, सुरक्षित पैटर्न है। यह इस उद्देश्य के लिए एक समर्पित, विश्वसनीय भूमिका बनाकर न्यूनतम विशेषाधिकार का पालन करता है।
शून्य या लगभग शून्य डाउनटाइम के साथ एक जटिल RDS PostgreSQL या MySQL स्कीमा माइग्रेशन करें।
→Amazon RDS Blue/Green डिप्लॉयमेंट्स सुविधा का उपयोग करें। एक सिंक्रनाइज़्ड स्टेजिंग (ग्रीन) वातावरण बनाएँ, उस पर स्कीमा परिवर्तन लागू करें, और फिर उसे उत्पादन में बढ़ावा देने के लिए स्विच ओवर करें।
क्यों: यह सुरक्षित, शून्य-डाउनटाइम RDS अपडेट के लिए विशेष रूप से निर्मित, प्रबंधित सेवा है। यह क्लोनिंग, सिंक्रनाइज़ेशन, और बिल्ट-इन गार्डरेल के साथ एक तेज़ (< 1 मिनट) स्विचओवर को संभालता है।
एक सिंगल-पेज एप्लिकेशन (SPA) का एक नया संस्करण S3/CloudFront पर डिप्लॉय करें और सुनिश्चित करें कि उपयोगकर्ताओं को न्यूनतम कैश अमान्यकरण लागत के साथ तुरंत नया संस्करण प्राप्त हो।
→एसेट फ़ाइल नामों के लिए सामग्री-आधारित हैशिंग का उपयोग करें (जैसे, `app.a1b2c3d4.js`)। नए एसेट्स डिप्लॉय करने के बाद, CloudFront डिस्ट्रीब्यूशन में केवल `index.html` फ़ाइल को अमान्य करें।
क्यों: हैश किए गए फ़ाइल नाम अद्वितीय होते हैं, इसलिए CloudFront उन्हें नए ऑब्जेक्ट के रूप में मानता है और उन्हें मूल से प्राप्त करता है, कैश को बायपास करता है। केवल एकल प्रवेश बिंदु फ़ाइल (`index.html`) को अमान्य करने की आवश्यकता होती है, जो वाइल्डकार्ड (`/*`) अमान्यकरण की तुलना में काफी सस्ता है।
एक AWS CDK एप्लिकेशन के लिए एक CI/CD पाइपलाइन लागू करें जो पाइपलाइन की अपनी परिभाषा बदलने पर स्वचालित रूप से खुद को अपडेट करती है।
→CDK Pipelines कंस्ट्रक्ट (`pipelines.CodePipeline`) का उपयोग करें। यह कंस्ट्रक्ट एक पाइपलाइन बनाता है जिसमें डिफ़ॉल्ट रूप से एक `SelfMutate` चरण शामिल होता है।
क्यों: CDK Pipelines इस पैटर्न के लिए विशेष रूप से निर्मित एक उच्च-स्तरीय कंस्ट्रक्ट है। `SelfMutate` चरण सुनिश्चित करता है कि एप्लिकेशन परिवर्तनों को डिप्लॉय करने से पहले पाइपलाइन हमेशा कोड से नवीनतम परिभाषा को दर्शाती है।
एक नया एप्लिकेशन संस्करण डिप्लॉय करें जिसके लिए शून्य डाउनटाइम के साथ पिछड़े-संगत डेटाबेस स्कीमा परिवर्तन (जैसे, नए कॉलम जोड़ना) की आवश्यकता होती है।
→एक एक्सपैंड-एंड-कॉन्ट्रैक्ट (या समानांतर परिवर्तन) पैटर्न लागू करें। सबसे पहले, योगात्मक, पिछड़े-संगत डेटाबेस स्कीमा परिवर्तन डिप्लॉय करें। दूसरा, नया एप्लिकेशन संस्करण डिप्लॉय करें जो नई स्कीमा का उपयोग करता है। पुराने और नए दोनों एप्लिकेशन संस्करण अपडेटेड डेटाबेस के साथ सह-अस्तित्व में रह सकते हैं।
क्यों: यह पैटर्न डेटाबेस और एप्लिकेशन डिप्लॉयमेंट को अलग करता है, यह सुनिश्चित करता है कि डेटाबेस स्थिति हमेशा पुराने और नए दोनों एप्लिकेशन संस्करणों के साथ संगत हो, जिससे शून्य-डाउनटाइम रोलआउट सक्षम हो सके।
विशिष्ट उपयोगकर्ता खंडों के लिए एक नई सुविधा को धीरे-धीरे रोल आउट करें और A/B परीक्षण का उपयोग करके व्यावसायिक मेट्रिक्स (जैसे, रूपांतरण दर) पर प्रभाव को मापें।
→Amazon CloudWatch Evidently का उपयोग करें। कई विविधताओं के साथ एक सुविधा बनाएँ, रोलआउट प्रतिशत को नियंत्रित करने के लिए एक लॉन्च, और परिभाषित मेट्रिक्स पर सांख्यिकीय प्रभाव को मापने के लिए एक प्रयोग।
क्यों: Evidently फीचर फ़्लैगिंग और A/B प्रयोग के लिए एक विशेष रूप से निर्मित सेवा है, जो न केवल रोलआउट तंत्र बल्कि प्रभाव को मापने के लिए सांख्यिकीय विश्लेषण इंजन भी प्रदान करती है।