कार्य चलाते समय AWS ECS त्रुटि: आपके क्लस्टर में कोई कंटेनर इंस्टेंस नहीं मिला


115

इम एक को तैनात करने की कोशिश कर रहा dockerकरने के लिए कंटेनर छवि AWSका उपयोग करते हुए ECS, लेकिन EC2 उदाहरण नहीं बनाया जा रहा है। मैंने इंटरनेट से स्पष्टीकरण की तलाश की है कि मैं निम्नलिखित त्रुटि क्यों प्राप्त कर रहा हूं:

"RunTask ऑपरेशन को कॉल करते समय एक क्लाइंट त्रुटि (InvalidParameterException) हुई: आपके क्लस्टर में कोई कंटेनर इंस्टेंस नहीं मिला।"

यहाँ मेरे कदम हैं:

1. मेरे अमेज़न ईसीएस रेपो से उबंटू से एक डॉकटर छवि को धक्का दिया।

2. पंजीकृत ईसीएस टास्क परिभाषा:

aws ecs register-task-definition --cli-input-json file://path/to/my-task.json 

3. भाग गया कार्य:

aws ecs run-task --task-definition my-task

फिर भी, यह विफल है।

यहाँ मेरा काम है:

{
  "family": "my-task",
  "containerDefinitions": [
    {
        "environment": [],
        "name": "my-container",
        "image": "my-namespace/my-image",
        "cpu": 10,
        "memory": 500,
        "portMappings": [
            {
                "containerPort": 8080,
                "hostPort": 80
            }
        ],
        "entryPoint": [
            "java",
            "-jar",
            "my-jar.jar"
        ],
        "essential": true
    }
  ]
}

मैंने क्लस्टर और सेवाओं को कॉन्फ़िगर करने के लिए प्रबंधन कंसोल का उपयोग करने की भी कोशिश की है, फिर भी मुझे वही त्रुटि मिलती है। मैं ec2 उदाहरणों के लिए क्लस्टर को कैसे कॉन्फ़िगर करूं, और मुझे किस प्रकार के कंटेनर इंस्टेंसेस का उपयोग करने की आवश्यकता है? मुझे लगा कि यह पूरी प्रक्रिया EC2 उदाहरणों के साथ शुरू करने के लिए थी !!


मुझे ऐसा लगता है कि मैंने यह देखा जब मैं एक क्लस्टर बनाने और एक कार्य चलाने के चरणों के बीच तेजी से चला गया।
बेन क्रीसी जूल

जवाबों:


158

मैंने जांच के कुछ घंटों के बाद यह पता लगाया। अमेज़ॅन, यदि आप सुन रहे हैं, तो आपको क्लस्टर बनाते समय या क्लस्टर में इंस्टेंस जोड़ते समय अपने प्रबंधन कंसोल में यह बताना चाहिए:

"इससे पहले कि आप एक क्लस्टर में ईसीएस उदाहरण जोड़ सकते हैं आपको पहले EC2 प्रबंधन कंसोल पर जाना होगा और ecs-optimizedIAM भूमिका के साथ ऐसे उदाहरण बनाने होंगे जिसमें AmazonEC2ContainerServiceforEC2Roleनीति संलग्न हो"

यहाँ कठोरता है:

1. अपने EC2 डैशबोर्ड पर जाएं , और Launch Instanceबटन पर क्लिक करें।

2. के तहत Community AMIs, के लिए खोजें ecs-optimized, और एक का चयन करें जो आपकी परियोजना की आवश्यकताओं को सबसे अच्छा फिट बैठता है। कोई काम होगा। अगला पर क्लिक करें।

3. जब आपको इंस्टेंस विवरण कॉन्फ़िगर करने के लिए मिलता है, तो पर क्लिक करें create new IAM role linkऔर नामक एक नई भूमिका बनाएं ecsInstanceRole

4. AmazonEC2ContainerServiceforEC2Roleउस भूमिका के लिए पॉलिसी संलग्न करें ।

5. फिर, अपने ECS इंस्टेंस को कॉन्फ़िगर करना समाप्त करें।
नोट: यदि आप एक वेब सर्वर बना रहे हैं, तो आप पोर्ट 80 तक पहुँच की अनुमति देने के लिए एक सुरक्षा समूह बनाना चाहेंगे।

कुछ मिनटों के बाद, जब इंस्टेंस को इनिशियलाइज़ किया जाता है और आप ECS इंस्टेंस टैब को रिफ्रेश कर सकते हैं, तो आप इंस्टेंस को भी जोड़ने का प्रयास कर सकते हैं।


10
दिए गए क्षेत्र के लिए निर्दिष्ट एमि का चयन करने से मेरी समस्या हल हो गई। अमी का पता लगाने के लिए आपको इस url docs.aws.amazon.com/AmazonECS/latest/developerguide/…
sanath_p

1
AmazonEC2ContainerServiceforEC2Role को नहीं देख रहा है, क्या आपकी पिछली पोस्ट के बाद कोई बदलाव हुआ है?
ब्लूडॉल्फिन

1
@BlueDolphin IAM में एक नई भूमिका बनाते समय मैं उस नीति को खोजने में सक्षम था।
सिरफ

6
यह अब (अप्रैल 2018) ध्यान देने योग्य है, यदि आप इस संपूर्ण प्रकार की परेशानी से बचने के लिए वर्तमान में बीटा फ़रगेट ( aws.amazon.com/fargate ) का उपयोग कर रहे हैं , तो आप मुझे पसंद कर सकते हैं जब आपने यह त्रुटि मिलने पर लॉन्च प्रकार के रूप में चुना हो ...EC2
अपकर्ष

10
और, जब EC2 बनाने, जोड़ने के लिए मत भूलना #!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.configमें Advanced Details -> User dataअगर आप अपने खुद के, गैर डिफ़ॉल्ट क्लस्टर की है। अन्य बुद्धिमान नए बनाए गए EC2 उदाहरण डिफ़ॉल्ट क्लस्टर बनाएंगे।
जकुब कजप्लेकी

40

वर्तमान में, अमेज़ॅन AWS वेब इंटरफ़ेस स्वचालित रूप से सही AMI और सही नाम के साथ उदाहरण बना सकता है इसलिए यह सही क्लस्टर में पंजीकृत होगा।

हालांकि सभी सेटिंग्स अमेज़ॅन द्वारा सही सेटिंग्स के साथ बनाई गई थीं, मेरे उदाहरण पंजीकृत नहीं होंगे। पर अमेज़न एडब्ल्यूएस मंचों मैं एक सुराग मिल गया। यह पता चला है कि आपके क्लस्टर को इंटरनेट एक्सेस की आवश्यकता है और यदि आपके निजी VPC में इंटरनेट गेटवे नहीं है, तो क्लस्टर कनेक्ट नहीं हो पाएंगे।

जोड़

वीपीसी डैशबोर्ड में आपको एक नया इंटरनेट गेटवे बनाना चाहिए और इसे क्लस्टर द्वारा उपयोग किए जाने वाले वीपीसी से कनेक्ट करना चाहिए। एक बार संलग्न होने पर आपको VPC के लिए रूट टेबल को अपडेट (या बनाना) करना होगा और अंतिम पंक्ति के रूप में जोड़ना होगा

0.0.0.0/0 igw-24b16740  

जहां igw-24b16740 आपके नए बनाए गए इंटरनेट गेटवे का नाम है।


इसका उल्लेख docs.aws.amazon.com/AWSEC2/latest/UserGuide/… [EC2-VPC] सबनेट के लिए रूट तालिका की जाँच करें। आपको एक ऐसा मार्ग चाहिए जो VPC के बाहर नियत सभी ट्रैफ़िक को VPC के लिए इंटरनेट गेटवे पर भेजता हो।
जस्टिन एम। कीज

2
सुराग के लिए धन्यवाद! मैंने अपने उदाहरणों के लिए एक सुरक्षा समूह सौंपा था जिसने मेरे लोड बैलेंसर को ट्रैफ़िक को छोड़कर सभी आउटबाउंड ट्रैफ़िक को रोक दिया था। मैंने इसे सभी आउटबाउंड ट्रैफ़िक की अनुमति देने के लिए स्विच किया, लेकिन लोड बैलेंसर से आने वाले ट्रैफ़िक को प्रतिबंधित कर दिया, और उदाहरण तब मेरे EC2 क्लस्टर में दिखाई दिए।
मिकपोते

1
काश मैं आपके जवाब को एक से अधिक बार वोट कर सकता। इससे मेरी सटीक समस्या "आपके कंटेनर में कोई कंटेनर इंस्टेंस नहीं मिला।" और मूल उत्तर में अधिक मतदान का आपके वास्तविक समाधान से कोई लेना-देना नहीं था। फिर से धन्यवाद।
एलेक्सएक्स

अपने VPC के साथ प्रवेश द्वार को संबद्ध करने के साथ-साथ, आपको अपने ECS उदाहरणों के लिए विशिष्ट सबनेट के लिए इंटरनेट ट्रैफ़िक को रूट करना पड़ सकता है। - उदाहरण के लिए aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID- क्या मैं इसे उत्तर में जोड़ने का सुझाव दे सकता हूं?
ग्रेग

मुझे लगता है कि यह ध्यान देने योग्य है कि जिस क्षण आप 0.0.0..0 / 0 के लिए एक मार्ग जोड़ते हैं वह आईजीडब्ल्यू को इंगित करता है कि सबनेट अब निजी सबनेट नहीं है। नेटवर्क सुरक्षा के नजरिए से नैट-गेटवे की ओर इशारा करते हुए रास्ता बनाना बेहतर है।
हेनरिक पिंगल

18

फरगेट का उपयोग करते समय मैं इस मुद्दे पर भाग गया। जब मैंने स्पष्ट रूप से launchType="FARGATE"कॉल करते समय परिभाषित किया तो मैंने इसे ठीक कर दिया run_task


1
CLI के साथ मैंने जोड़ा--launch-type FARGATE
shlomiLan

11

अन्य सुझाए गए चेक

  1. दिए गए क्षेत्र के लिए निर्दिष्ट एएमआई का चयन करने से मेरी समस्या हल हो गई।

    एएमआई का पता लगाने के लिए - अमेज़ॅन ईसीएस कंटेनर इंस्टेंस लॉन्च करना

  2. डिफ़ॉल्ट रूप से सभी ec2 उदाहरण डिफ़ॉल्ट क्लस्टर में जोड़े जाते हैं। तो क्लस्टर का नाम भी मायने रखता है।

Amazon ECS कंटेनर इंस्टेंस को लॉन्च करते समय बिंदु 10 देखें ।

इस थ्रेड में अधिक जानकारी उपलब्ध है ।


3

बस के मामले में किसी और को इस समस्या के साथ अवरुद्ध किया गया है जैसा कि मैं था ... मैंने यहां सब कुछ करने की कोशिश की है और मेरे लिए काम नहीं किया।

इसके अलावा जो यहां कहा गया था वह ईसी 2 इंस्टेंस रोल के संबंध में है, जैसा कि यहां टिप्पणी की गई है , मेरे मामले में केवल तभी काम किया गया जब मैंने अभी भी ईसी 2 इंस्टेंस को सरल जानकारी के साथ कॉन्फ़िगर किया। उपयोगकर्ता डेटा का इस तरह एक प्रारंभिक स्क्रिप्ट का उपयोग करना:

#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=quarkus-ec2
EOF

इस ecs config फाइल में बनाए गए संबंधित ECS क्लस्टर नाम की जानकारी देने से मेरी समस्या हल हो गई। इस कॉन्फ़िगरेशन के बिना, ईसी 2 इंस्टेंस पर ईसीएस एजेंट लॉग एक त्रुटि दिखा रहा था जो ईसीएस से कनेक्ट करना संभव नहीं था, ऐसा करने से मुझे ईसी 2 इंस्टेंस को ईसीएस क्लस्टर के लिए दिखाई दिया।

ऐसा करने के बाद, मुझे मेरे EC2 क्लस्टर के लिए EC2 इंस्टेंस उपलब्ध हो सकता है: यहां छवि विवरण दर्ज करें

AWS प्रलेखन ने कहा कि यह हिस्सा वैकल्पिक है, लेकिन मेरे मामले में, यह "वैकल्पिक" कॉन्फ़िगरेशन के बिना काम नहीं करता था।


2

यदि आप क्लस्टर बनाने के बाद इस मुद्दे पर आए हैं

ईसीएस इंस्टेंस सूची में ईसीएस इंस्टेंस पर जाएं और आईएएम भूमिका की जांच करें जिसे आपने उदाहरण के लिए सौंपा है। आप उदाहरणों के नाम से शुरू होने वाले उदाहरणों को आसानी से पहचान सकते हैंECS Instance

यहां छवि विवरण दर्ज करें

उसके बाद IAM भूमिका पर क्लिक करें और यह आपको IAM कंसोल पर निर्देशित करेगा। AmazonEC2ContainerServiceforEC2Roleअनुमति नीति सूची से नीति का चयन करें और भूमिका को बचाएं।

आपके इंस्टेंसेस आपको सेव करने के कुछ ही समय बाद क्लस्टर में उपलब्ध होंगे।


1

असली मुद्दा अनुमति का अभाव है। जब तक आप AmazonEC2ContainerServiceforEC2Role अनुमति के साथ IAM रोल बनाते और असाइन करते हैं, समस्या दूर हो जाती है।


0

एक और संभावित कारण है कि मैं अपने ईसीएस क्लस्टर एएमआई को "अमेज़ॅन लिनक्स 2 एएमआई" के बजाय "अमेज़ॅन लिनक्स एएमआई" के लिए अपडेट कर रहा था, जिसके कारण मेरा ईसी 2 उपयोगकर्ता_डेटा लॉन्च स्क्रिप्ट काम नहीं कर रहा था।


0

जब ऐसा होता है, तो आपको निम्नलिखित देखने की आवश्यकता है:

  1. आपके EC2 उदाहरणों की AmazonEC2ContainerServiceforEC2Roleइसमें संलग्न नीति के साथ भूमिका होनी चाहिए
  2. आपके EC2 इंस्टेंस को AMI इमेज रन करना चाहिए ecs-optimized( जो आप EC2 डैशबोर्ड में इसे चेक कर सकते हैं)
  3. आपके VPC के निजी सबनेट में सार्वजनिक IP नियत नहीं है, या आपके पास एक VPC समापन बिंदु अंतरफलक कॉन्फ़िगर नहीं है, या आपके पास NAT गेटवे सेट नहीं है

अधिकांश समय, यह समस्या गलत VPC के कारण दिखाई देती है। दस्तावेज़ के अनुसार :

प्रश्न: यदि आपके पास एक इंटरफ़ेस VPC समापन बिंदु कॉन्फ़िगर नहीं है और आपके कंटेनर इंस्टेंस में सार्वजनिक IP पते नहीं हैं, तो उन्हें यह एक्सेस प्रदान करने के लिए नेटवर्क एड्रेस ट्रांसलेशन (NAT) का उपयोग करना होगा।

यही कारण हैं कि ईसीएस डैशबोर्ड में सूचीबद्ध ईसी 2 उदाहरण आपको दिखाई नहीं देते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.