Я работаю от 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 может изменить спорадически
Я не думаю, что этот вопрос относится к Лямбде. Lambda не предоставляет никаких дополнительных инструментов для этого и не должен блокировать какие-либо обычные решения AWS SDK. Однако никакого вреда в определении контекста. –
Вы правы. Я развяжу это. Я только упомянул об этом, поскольку это может быть актуальным в качестве отправной точки для совершения звонка. – Raychaser
Ваш предпочтительный вариант, если вы не используете специальные теги на хостах ECS. –