2016-07-28 17 views
1

Ich arbeite von NodeJS in AWS Lambda und ich versuche, die IP/Hostname eines bestimmten Containers in meinem ECS-Cluster zu erhalten. ELB kommt für uns nicht in Frage oder ich würde es einfach benutzen.Erhalten IP-Adresse eines ECS-Containers

Das ist, was ich kam mit:

const AWS = require('aws-sdk'); 
const ecs = new AWS.ECS({region: 'us-east-1'}); 
const ec2 = new AWS.EC2({region: 'us-east-1'}); 

const CLUSTER = 'MyClusterNameHere'; 


function getIP() { 
    return ecs.listContainerInstances({ cluster: CLUSTER }).promise() 
    .then(data => ecs.describeContainerInstances({ containerInstances: data.containerInstanceArns, cluster: CLUSTER }).promise()) 
    .then(data => ec2.describeInstances({ InstanceIds: [ data.containerInstances[0].ec2InstanceID ] }).promise()) 
    .then(data => data.Reservations[0].Instances[0].PrivateDnsName); 
} 

getIP().then(data => console.log(data)) 

Dies scheint eine Menge von API-Aufrufe und eine Menge nur in komplexe Objekte wühlen zu bekommen, was ich will. Ich würde einen schnelleren, weniger intensiven Weg lieben, dies zu erreichen.

NB: Ich kann Instances[0] hier verwenden, obwohl ich nicht soll, weil ich weiß, gibt es nur einen Behälter und immer nur eine Instanz, aber die IP kann sporadisch

+1

Ich glaube nicht, diese Frage bezieht sich auf Lambda. Lambda stellt hierfür keine zusätzlichen Tools zur Verfügung und sollte keine normalen AWS SDK-Lösungen blockieren. Es ist jedoch kein Schaden, den Kontext zu identifizieren. –

+0

Sie haben Recht. Ich werde es aufdecken. Ich habe es nur erwähnt, weil es als Ausgangspunkt für den Anruf relevant sein könnte. – Raychaser

+1

Ihr bevorzugtes Verfahren, es sei denn, Sie verwenden bestimmte Tags auf Ihren ECS-Hosts. –

Antwort

0

ändern, die ich nicht in der Lage war, schneller zu finden So ging ich einfach mit dem, was ich hatte.