2016-07-28 6 views
1

Я работаю от NodeJS в AWS Lambda, и я пытаюсь получить IP/hostname конкретного контейнера в своем кластере ECS. ELB не может быть и речи для нас, или я просто использую это.Получить IP-адрес контейнера ECS

Это то, что я придумал:

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

Это кажется ужасно много вызовов API и много закапывания в сложные объекты просто получить то, что я хочу. Мне бы хотелось получить более быстрый и менее интенсивный способ получить это.

NB: Я могу использовать Instances[0] здесь, даже если я не должен, потому что я знаю, что есть только один контейнер, и только когда-либо один экземпляр, но IP может изменить спорадически

+1

Я не думаю, что этот вопрос относится к Лямбде. Lambda не предоставляет никаких дополнительных инструментов для этого и не должен блокировать какие-либо обычные решения AWS SDK. Однако никакого вреда в определении контекста. –

+0

Вы правы. Я развяжу это. Я только упомянул об этом, поскольку это может быть актуальным в качестве отправной точки для совершения звонка. – Raychaser

+1

Ваш предпочтительный вариант, если вы не используете специальные теги на хостах ECS. –

ответ

0

Я не смог найти быстрее так что я просто пошел с тем, что у меня было.

Смежные вопросы