【发布时间】:2016-08-03 05:02:49
【问题描述】:
我正在使用 AWS Lambda 中的 NodeJS,并且我正在尝试获取我的 ECS 集群中特定容器的 IP/主机名。 ELB 对我们来说是不可能的,否则我就使用它。
这是我想出的:
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 可能会偶尔更改
【问题讨论】:
-
我认为这个问题与 Lambda 无关。 Lambda 不为此提供任何额外的工具,也不应该阻止任何正常的 AWS 开发工具包解决方案。不过,识别上下文并没有什么坏处。
-
你是对的。我会取消标记它。我之所以提到它,是因为它可能与我拨打电话的起点有关。
-
除非您在 ECS 主机上使用特定标签,否则首选您的方式。
标签: amazon-web-services aws-sdk amazon-ecs