2016-04-09 29 views
39

Sto tentando di distribuire un'immagine del contenitore docker su AWS utilizzando ECS, ma l'istanza EC2 non viene creata. Ho perlustrato internet alla ricerca di una spiegazione sul motivo per cui sto ricevendo il seguente errore:Errore ECS AWS durante l'esecuzione dell'attività: Nessuna istanza contenitore trovata nel cluster

"A client error (InvalidParameterException) occurred when calling the RunTask operation: No Container Instances were found in your cluster."

Qui sono i miei passi:

1. spinto un immagine finestra mobile da Ubuntu al mio Amazon ECS pronti contro termine.

2. registrato un Definizione ECS Task:

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

3. Ran il compito:

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

Eppure, non riesce.

Qui è il mio compito:

{ 
    "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 
    } 
    ] 
} 

ho provato anche utilizzando la console di gestione per configurare un cluster e dei servizi, ma ottengo lo stesso errore. Come configurare il cluster in modo che abbia istanze ec2 e quale tipo di istanze contenitore è necessario utilizzare? Ho pensato che l'intero processo fosse quello di creare le istanze EC2 per cominciare !!

risposta

65

L'ho capito dopo qualche ora in più di ricerche. Amazon, se si sta ascoltando, si deve indicare questo da qualche parte nella tua console di gestione durante la creazione di un cluster o aggiungendo le istanze al cluster:

"Before you can add ECS instances to a cluster you must first go to the EC2 Management Console and create ecs-optimized instances with an IAM role that has the AmazonEC2ContainerServiceforEC2Role policy attached"

Qui è la trafila:

1. Vai al tuo EC2 Dashboard e fai clic sul pulsante Launch Instance.

2. Sotto Community AMIs, cercare ecs-optimized e selezionare quello che si adatta meglio alle esigenze del progetto. Qualsiasi funzionerà. Clicca dopo.

3. Quando viene visualizzato Configura dettagli istanza, fare clic su create new IAM role link e creare un nuovo ruolo chiamato ecsInstanceRole.

4. Collegare la politica AmazonEC2ContainerServiceforEC2Role a tale ruolo.

5. Quindi, terminare la configurazione dell'istanza ECS.
NOTA: Se si una creazione di un server web che si vuole creare un SecurityGroup per consentire l'accesso alla porta 80.

Dopo pochi minuti, quando l'istanza viene inizializzata e in esecuzione è possibile aggiornare la scheda Istanze ECS su stai provando ad aggiungere anche le istanze.

+4

Selezionare l'ami suggerito specificato per la regione specificata ha risolto il problema. Per scoprire l'ami che dovresti selezionare controlla questo url http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html – user3716835

+1

non vedendo AmazonEC2ContainerServiceforEC2Role, ci sono cambiamenti dal tuo ultimo post? – BlueDolphin

+0

@BlueDolphin Sono riuscito a trovare quella politica quando ho creato un nuovo ruolo in IAM. – cyrf

10

Altri controlli suggeriti

1) Selezione del ami suggerito che è stato specificato per una determinata regione risolto il mio problema. Per individuare l'ami - Controllare questo URL http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

2) Con defaault sono aggiunte tutte le istanze EC2 per cluster predefinito. Quindi anche il nome del cluster è importante.

Vedi punto 10 qui http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

Maggiori informazioni sono disponibili in questa discussione https://forums.aws.amazon.com/thread.jspa?threadID=189513

15

Attualmente, l'interfaccia web di Amazon AWS in grado di creare automaticamente le istanze con la corretta AMI e il nome corretto in modo che sarà registrati al cluster corretto.

Anche se tutte le istanze sono state create da Amazon con le impostazioni corrette, le mie istanze non verrebbero registrate. Sul numero Amazon AWS forums ho trovato un indizio. Si scopre che i tuoi cluster hanno bisogno di un accesso a Internet e se il tuo VPC privato non ha un gateway Internet, i cluster non saranno in grado di connettersi.

La correzione

Nel cruscotto VPC è necessario creare un nuovo gateway Internet e collegarlo al VPC utilizzato dal cluster. Una volta attaccato è necessario aggiornare (o creare) la tabella di route per la VPC e aggiungere come ultima linea

0.0.0.0/0 igw-24b16740 

Dove IGW-24b16740 è il nome del gateway Internet appena creato.

+0

La tua risposta ha risolto il problema di "Nessuna istanza di contenitore trovata nel tuo cluster" per me. Grazie mille! –

+0

Questo è citato su http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html * [EC2-VPC] Controllare la tabella di instradamento per la sottorete. È necessario un instradamento che invii tutto il traffico destinato all'esterno del VPC al gateway Internet per il VPC. * –

+0

Grazie per l'indizio! Avevo assegnato un gruppo di sicurezza alle mie istanze che bloccava tutto il traffico in uscita ad eccezione del traffico verso il mio servizio di bilanciamento del carico. L'ho passato per consentire tutto il traffico in uscita ma limitare il traffico in entrata solo dal bilanciamento del carico e le istanze sono poi apparse nel mio cluster EC2. – Mikepote