मैं ईसीएस कंटेनर उदाहरण (मैं डॉकर्स होस्ट्स के बारे में बात कर रहा हूं - मुझे यहां एडब्ल्यूएस शब्दावली पसंद नहीं है) और तैनाती दो अलग-अलग चीजों के रूप में होगी।
अपने ECS को स्टैक करें और चलाएं। आप CloudFormation और Auto-स्केलिंग समूहों के माध्यम से इसे प्रबंधित कर सकते हैं, यह ठीक है। बस एक मंच है जहाँ आप को तैनात होगा के रूप में अपने क्लस्टर के बारे में सोच करने के लिए , नहीं कुछ आप की जरूरत है पुनर्वितरित ।
फिर, सीडी के लिए, अब तक का सबसे आसान तरीका एक नई कार्य परिभाषा का उपयोग करने के लिए सेवा परिभाषा को अपडेट करना है और ईसीएस रोलिंग को आपके लिए कंटेनरों को अपडेट करने देना है।
हर बार जब यह एक कार्य शुरू करता है, तो ईसीएस डॉक पुल इमेज चलाएगा: टैग भले ही उसके पास स्थानीय रूप से छवि हो यह सुनिश्चित करने के लिए कि उस छवि का नवीनतम संस्करण है: टैग। तो आपके द्वारा उपयोग किया जाने वाला छवि टैग वास्तव में कोई फर्क नहीं पड़ता (हर बिल्ड पर टैग को बदलने की कोई आवश्यकता नहीं है)।
इसका मतलब है कि आप इसे आसानी से तैनात करने के लिए myimage: नवीनतम ओवर-ओवर बना सकते हैं।
आपको जिस चीज़ की ज़रूरत है वह एक कार्य परिभाषा है जहाँ छवि = myimage: नवीनतम। उस कार्य परिभाषा के साथ एक सेवा बनाएं और हर बार जब ईसीएस एक कार्य (आपकी सेवा का एक उदाहरण) शुरू करता है तो यह आपके द्वारा बनाया गया सबसे नवीनतम "myimage: नवीनतम" होगा।
वहां से, आपको कोडडेप्लॉय से पहेली में केवल एक टुकड़ा याद आ रहा है, आप अपने कार्य की परिभाषा में एक नया संशोधन बनाने और अपनी सेवा को अपडेट करने के लिए एक लैम्ब्डा फ़ंक्शन, कुछ कॉल कर सकते हैं, और ECS स्वचालित रूप से उस संशोधन के लिए नए कार्य बनाएंगे। पुराने कार्यों को हटा दें।
एक उदाहरण:
मान लेते हैं कि आपने MyService नामक एक सेवा बनाई है। कि आप कार्य परिभाषा MyTaskDefinition: 1 (संशोधन 1) के लिए 2 कार्य चलाने के लिए उस सेवा को कॉन्फ़िगर कर चुके हैं। उस कार्य परिभाषा में, आपके पास एक कंटेनर परिभाषा है जो छवि "myimage: नवीनतम" पर सेट है।
- कल आपने myimage का निर्माण किया: नवीनतम जिसमें ID (SHA) 365d8f7bf565 था।
- आपका कंटेनर उदाहरण ABC, MyTaskDefinition- 1 -containerName-someLongId नामक एक कार्य चला रहा है । जब आप उस कंटेनर का निरीक्षण करते हैं, तो यह "sha256: 365d8f7bf565 .........." छवि को चला रहा है
- आपका अन्य कंटेनर उदाहरण DEF एक और कार्य चला रहा है। इसका एक समान नाम है (केवल आईडी भिन्न है), लेकिन यह एक ही छवि चला रहा है।
- आप अपने रेपो में बदलाव को आगे बढ़ाते हैं।
- CodePipeline उस बदलाव को चुनता है, जो छवि को ECR में बनाता और प्रकाशित करता है।
- यह नई डॉकटर छवि भी myimage: नवीनतम है, लेकिन इसकी ID (SHA) f7ec5e54ac96 है
- अब आपको लेम्बडा फ़ंक्शन और AWS NodeJS SDK का उपयोग करने के लिए अपनी पाइपलाइन में एक कदम जोड़ने की आवश्यकता है:
- एक नई कार्य परिभाषा बनाएं (जो पहले जैसी ही होगी)। वह MyTaskDefinition: 2 होगा
- MyTaskDefinition: 2 (1 के बजाय) का उपयोग करने के लिए अपने MyService को अपडेट करें
- ईसीएस नए कार्यों का निर्माण करेगा। कंटेनर के नाम MyTaskDefinition- 2 -containerName-someLongId होंगे। जब आप उन कंटेनरों का निरीक्षण करेंगे, तो आप देखेंगे कि वे "sha256: f7ec5e54ac96 ......." चलेंगे। शायद आपके पास कंटेनर उदाहरण एबीसी पर 2 कार्य होंगे, शायद उन्हें छिड़का जाएगा (जो आपकी सेवा के कॉन्फ़िगरेशन पर निर्भर करता है)
- कुछ समय बाद ECS पुराने कार्य MyTaskDefinition-1-containerName-someLongId को ABC और DEF से हटा देगा।
नोट: आपको वास्तव में एक नई कार्य परिभाषा बनाने की आवश्यकता नहीं है। यदि आप चाहते हैं कि आप इसके बजाय सेवा के कार्यों की सूची को पुनः प्राप्त कर सकते हैं और मैन्युअल रूप से उन्हें एक-एक करके बंद कर सकते हैं। आपको एक नए को रोकने से पहले ईसीएस के लिए एक कार्य को फिर से शुरू करने के लिए इंतजार करना चाहिए (वह है: पहला कंटेनर रोकें, ईसीएस की प्रतीक्षा करें इसे बदलने के लिए, दूसरा कंटेनर रोकें)। जब ECS कंटेनर को पुनरारंभ करता है, तो यह सबसे हाल ही में प्राप्त होने वाला माइमेज हड़प लेगा: नवीनतम निर्मित, जैसा कि पहले बताया गया है। मुझे लगता है कि एक नई कार्य परिभाषा बनाना आसान है और कम त्रुटि प्रवण (प्रतीक्षा करने और जांचने के लिए कोई तर्क की आवश्यकता नहीं है, यदि आपके पास नया कार्य परिभाषा है तो ईसीएस आपके लिए रोलिंग अपडेट को संभाल लेगा)।