2016-07-28 5 views
1

Je travaille depuis NodeJS dans AWS Lambda et j'essaie d'obtenir l'adresse IP/nom d'hôte d'un conteneur particulier dans mon cluster ECS. ELB est hors de question pour nous ou je l'utiliserais tout simplement.Récupère l'adresse IP d'un conteneur ECS

C'est ce que je suis venu avec:

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)) 

Cela semble un très grand nombre d'appels API et beaucoup d'enfouir dans des objets complexes juste pour obtenir ce que je veux. J'aimerais un moyen plus rapide et moins intense d'obtenir ceci.

NB: Je peux utiliser Instances[0] ici même si je ne devrais pas parce que je sais qu'il n'y a qu'un seul conteneur et que jamais une instance, mais l'IP peut changer de façon sporadique

+1

Je ne pense pas que cette question concerne Lambda. Lambda ne fournit aucun outil supplémentaire pour cela et ne devrait pas bloquer les solutions AWS SDK normales. Cependant, aucun mal à identifier le contexte. –

+0

Vous avez raison. Je vais le détacher. Je l'ai seulement mentionné car il pourrait être pertinent comme point de départ pour faire l'appel. – Raychaser

+1

Vous préférez le vôtre, sauf si vous utilisez des balises spécifiques sur vos hôtes ECS. –

Répondre

0

Je n'ai pas pu trouver un moyen plus rapide chemin donc je suis juste allé avec ce que j'avais.