2016-07-28 102 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

我沒能找到一個更快所以我只是和我一樣。