2016-07-28 104 views
1

我正在使用AWS Lambda中的NodeJS,并试图获取ECS集群中特定容器的IP /主机名。 ELB对我们来说不存在问题,或者我只是使用它。获取ECS容器的IP地址

这是我想出了:

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调用和大量的穴居到复杂的对象只是为了得到我想要的东西。我想要一个更快,不那么激烈的方式来获得这个。

注:我可以用Instances[0]这里即使我不应该,因为我知道,只有一个容器中,并永远只一个实例,但该IP可能会改变零星

+1

我不认为这个问题涉及到Lambda。 Lambda不为此提供任何其他工具,并且不应阻止任何常规的AWS SDK解决方案。尽管如此,确定上下文没有任何危害。 –

+0

你说得对。我会解开它。我只是提到它,因为它可能是作为我打电话的起点。 – Raychaser

+1

除非您在您的ECS主机上使用特定标签,否则您的首选方式是。 –

回答

0

我没能找到一个更快所以我只是和我一样。