क्या EC2 के पुन: निर्माण के लिए संभव है :: उदाहरण या RDS :: अमेज़ॅन क्लाउडफॉर्म में DBInstance?


16

क्लाउड-स्टैक का उपयोग करके EC2 या RDS इंस्टेंस को फिर से बनाना संभव है?

मेरा स्टैक एक ऐसे बिंदु पर अटक जाता है जहां बस संसाधन को नष्ट करना और बनाना इसे ठीक कर देगा, इसके बजाय मुझे काम जारी रखने के लिए पूरे स्टैक को हटाना होगा।

संपादित करें:

इस मुद्दे ने मुझे दो बार मारा। पहले मैंने AWS :: RDS :: कुछ चूक के साथ उदाहरण बनाया और फिर इसे "EngineVersion": "5.5" पर डाउनग्रेड करने का प्रयास किया। इसे बदलने के लिए इसे कुछ रुकावट के साथ किया जा रहा है, लेकिन mysql के उदाहरणों को 5.6 से घटाकर 5.5 नहीं किया जा सकता है, इसलिए स्टैक को UPDATE_FAILED अवस्था में छोड़ दिया गया था और मैं बिना नोड चाल के RDS को फिर से बनाने में सक्षम नहीं हो सकता।

दूसरी घटना यह थी कि मेरे पास कई "AWS :: EC2 :: Instance" हैं जो एक स्क्रिप्ट को डाउनलोड करता है और उसमें से एक स्क्रिप्ट निष्पादित करता है "जाहिर है कि अगर Y ने डाउनलोड की गई स्क्रिप्ट को बदल दिया है तो मुझे इंस्टेंट को पुनरावृत्ति करना होगा, और ऐसा करने का कोई तरीका नहीं है। एक बार फिर से मैं मशीन को पुनः प्राप्त करने के लिए एक ही बुरा चाल का उपयोग करता हूं।

बुरा चाल:

एक मशीन के एक ऑटोसैसलिंग समूह का उपयोग करने के बजाय, मैंने गुणों में उपलब्धता क्षेत्र को बदलने में दोनों समस्याओं को हल किया ... लेकिन मुझे एक खराब स्वाद के साथ छोड़ दिया


जवाब देने के लिए और जानकारी चाहिए। क्या आपके उदाहरण स्टार्टअप पर फ्रीज हैं? क्या कोई सेवा अनुत्तरदायी बन जाती है? यदि आप मैन्युअल रूप से EC2 उदाहरण को फिर से बनाना चाहते हैं, तो आप एक उदाहरण के साथ एक ऑटो-स्केलिंग समूह बना सकते हैं। जब आप उदाहरण समाप्त करते हैं, तो एक और बनाया जाएगा।
एडविन

स्पष्ट करने के लिए संपादित किया गया। मैंने यहां भी पूछा: फ़ोरम .aws.amazon.com
theist

यह सीधे आपके प्रश्न का उत्तर नहीं देता है, लेकिन जब उपयोगकर्ता परिवर्तित होते हैं, तो पुन: चलाने के लिए, आप इसमें देख सकते हैं cfn-hup: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
रीड क्राफ्ट-मर्फी

जवाबों:


10

उदाहरण के लिए स्टोर-समर्थित EC2 इंस्टेंसेस के लिए, एक ट्रिक यह है कि यूजर डेटा स्क्रिप्ट में एक वर्जन नंबर, दिनांक या इसी तरह की एक टिप्पणी जोड़ी जाए, फिर इसे बदल दें कि जब भी आप चाहें तो इस उदाहरण को फिर से बनाया जाए:

{
    "Resources" : {
        "MyEC2Instance" : {
            "Type" : "AWS::EC2::Instance",
            "Properties" : {
                // ... other properties ...
                "UserData": { 
                    "Fn::Base64" : {
                        "Fn::Join" : [ ":", [
                        "#!/bin/bash\n",
                        "# Version: 1.0\n",
                        // ... rest of user data ...
                    ]]}
            }
        }
    }
}

किसी भी परिवर्तन के UserDataकारण उदाहरण को प्रतिस्थापित किया जाएगा (यानी, पुनर्जीवित)। उपयोगकर्ता डेटा स्क्रिप्ट का व्यवहार समान होना चाहिए, हालांकि, चूंकि एकमात्र संशोधन एक टिप्पणी है। ध्यान दें कि यह ईबीएस समर्थित उदाहरणों के लिए काम नहीं करता है।

RDS के लिए, आप वर्तमान RDS उदाहरण का DB स्नैपशॉट ले सकते हैं , फिर उस स्नैपशॉट का उपयोग करने के लिए अपने टेम्पलेट को संशोधित करें DBSnapshotIdentifier:

{
    "Resources" : {
        "MyDB" : {
        "Type" : "AWS::RDS::DBInstance",
        "Properties" : {
            // ... other properties ...
            "DBSnapshotIdentifier": "<db snapshot ID>"
        }
    }    
}

जब भी DBSnapshotIdentifierबदला जाता है, डेटाबेस इंस्टेंस को बदल दिया जाएगा। स्नैपशॉट का उपयोग करने से आपको स्नैपशॉट बनाने के बाद से डेटा रखने की सुविधा भी मिलेगी। (यदि आप डेटा को मिटा देना चाहते हैं , तो आप एक खाली स्नैपशॉट बना सकते हैं और उस इनपुट के रूप में पास कर सकते हैं। या पूरे CloudFormation स्टैक को हटा सकते हैं और पुनः बना सकते हैं।)

संसाधन का तार्किक नाम बदलने के लिए एक अधिक सामान्य दृष्टिकोण है। CloudFormation डॉक्स में एक स्टैक टेम्पलेट को संशोधित करने से :

अधिकांश संसाधनों के लिए, किसी संसाधन का तार्किक नाम बदलना उस संसाधन को हटाने और एक नए के साथ बदलने के बराबर है। किसी भी अन्य संसाधन जो नामांकित संसाधन पर निर्भर करते हैं, उन्हें भी अद्यतन करने की आवश्यकता होती है और उन्हें प्रतिस्थापित करने का कारण हो सकता है। अन्य संसाधनों के लिए आपको एक संपत्ति (केवल तार्किक नाम नहीं) अपडेट करने की आवश्यकता होती है ताकि एक अद्यतन को ट्रिगर किया जा सके।


ऐसा लगता है कि एकमात्र समाधान "गंदी चाल" करना है मैं एक समान समाधान तक पहुंच गया (उपलब्धता ज़ोन बदलने के लिए मजबूर करने के बाद) :) पूछने पर कुछ समय :)
theist

4
केवल यह इंगित करना चाहते हैं कि उदाहरण बदल दिया गया है और इस प्रकार जब EC2 इंस्टेंस स्टोर-बैक किया गया है, तो उपयोगकर्ता द्वारा निष्पादित किया गया। यदि यह EBS समर्थित है, तो UserData का परिवर्तन केवल आवृत्ति को पुनरारंभ करेगा और UserData को फिर से निष्पादित नहीं किया जाएगा। आप इस मामले में भी फिर से UserData को चलाने के लिए cfn-hup का उपयोग कर सकते हैं, लेकिन उदाहरण समान रहता है।
काित्सु

@Kaitsu: धन्यवाद, यह एक बहुत ही मूल्यवान स्पष्टीकरण है। मैंने उसी हिसाब से अपना जवाब अपडेट किया।
अंकुश

@Kaitsu लेकिन अगर आप स्क्रिप्ट को मैन्युअल रूप से चलाते हैं (/ / var / lib / cloud / inst / script / part-001 पर स्थित) तो आपको यह सुनिश्चित करना होगा कि स्क्रिप्ट एक ही कमांड को कई बार चलाने के लिए रक्षात्मक है :(
c24w

1

यदि आप इसे AutoScalingGroup में डालते हैं, तो आप AutoScalingGroup मिनट / अधिकतम / डिफ़ॉल्ट को 0 में संपादित कर सकते हैं, फिर जैसे ही यह पुराने उदाहरण को नष्ट करना शुरू करता है, आप बाद में 1/1/1 पर मिनट / अधिकतम / डिफ़ॉल्ट डाल सकते हैं प्रेस्टो: नया उदाहरण।


0

यदि आपका EC2 एक AutoScalingGroup में है तो आप AutoScalingGroupNameइसमें एक संस्करण संख्या के साथ संपत्ति सेट कर सकते हैं।

हर बार जब आप उस संस्करण संख्या को बदलेंगे तो CFN होगा: 1. एक नया ऑटो-स्केलिंग समूह बनाएं और इच्छित उदाहरणों को स्पिन करें 2. पुराने ऑटो-स्केलिंग समूह में उदाहरणों को मारें और इसे हटाएं

यहां मेरे स्टैक से कोड का एक टुकड़ा है जहां मैं इस तकनीक का उपयोग करके बड़ी संख्या में EC2 मशीनों को फिर से बनाने और S3 से नए सॉफ़्टवेयर को स्वचालित रूप से खींचने के लिए मजबूर करता हूं।

AutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
        AutoScalingGroupName: !Sub "${StackName}-${ServiceName}-${ServiceVersion}"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.