2015-12-29 7 views
37

Sto provando a configurare un'applicazione Web di base, che ha un database associato, in AWS ECS. A livello locale ho queste impostazioni in diversi contenitori, e su ECS, mi piacerebbe avere definizioni di attività separate in modo che io possa scalare le due separatamente.Collegamento di contenitori tra le definizioni di attività in AWS ECS?

  1. Ho registrato la prima definizione dell'attività come david_mongodb correttamente in ECS. Ha un contenitore chiamato david_mongodb in esso.
  2. Quindi ho tentato di registrare la mia seconda definizione di attività come david_web, che ha un contenitore denominato david_web che collega il database tramite david_mongodb:db.
  3. Quando ho clicca su 'Crea', restituisce un errore:

    Unable to create Task Definition 
    Linked container 'david_mongodb:db' doesn't exist. 
    

Sembra definizioni di attività non può vedere i nomi di container in altre definizioni di attività? Sto pensando che mettere entrambi i container nella stessa definizione di compito funzionerebbe, ma non voglio farlo: mi impedirebbe di ridimensionare separatamente l'app web o il database. This overview sembra confermare che la mia architettura è consigliata ...

Quindi, come faccio a collegare i contenitori che vivono in diverse definizioni di attività? O c'è un altro modo intelligente di gestirlo?

+0

[Amazon ECS supporta ora le modalità di rete e la prenotazione di memoria] (https://forums.aws.amazon.com/ann.jspa?annID=3980). Non c'è bisogno di fare rete interistituzionale utilizzando ELB – RajDev

+1

C'è nessuna connessione tra la domanda e questa risposta, avendo il controllo delle modalità di rete non è direttamente correlata al collegamento delle attività eseguite in contenitori diversi. –

+0

Non credo che la modalità di rete risolva questo problema. Dovresti ancora scoprire quale nodo (e l'IP) dove atterra l'attività. – CashIsClay

risposta

51

I collegamenti in una definizione di attività ECS sono analoghi a Docker links e funzionano solo quando i contenitori fanno parte della stessa definizione di attività (i contenitori che fanno parte di una singola definizione di attività vengono collocati insieme sullo stesso host). Per comunicare tra contenitori in diverse definizioni di attività, è necessario un meccanismo per scoprire dove si trovano i contenitori (quale host) e la porta per la comunicazione.

ECS ha l'integrazione con ELB tramite la funzione service, in cui le attività verranno automaticamente registrate nell'ELB e annullate in modo appropriato nell'ELB. Se si desidera evitare ELB, un altro pattern potrebbe essere un (è disponibile un esempio chiamato ecs-task-kite che utilizza l'API ECS) o potrebbe essere interessato a una rete di sovrapposizione (Weave ha un valore abbastanza dettagliato getting started guide per la loro soluzione).

Service Discovery for Amazon ECS Using DNS descrive un approccio diverso in cui una funzione Lambda ascolta il flusso di eventi ECS tramite Eventi CloudWatch e aggiorna i record DNS Route 53.

Nathan Peck tiene traccia di un numero di argomenti diversi relativi a ECS, incluso il rilevamento servizi, here.

+0

Buono a sapersi. Esiste un meccanismo prescritto per tale comunicazione? Viene in mente DNS + ELB, ma esiste una soluzione che non richiede un ELB? –

+1

Ho aggiornato la mia risposta con ulteriori dettagli sui possibili approcci (ELB, contenitori di ambasciatori e reti di sovrapposizione). –

+0

Grandi risorse, grazie! –