获取ECS容器的IP地址

Get IP address of an ECS container

我在 AWS Lambda 中使用 NodeJS,我正在尝试获取我的 ECS 集群中特定容器的 IP/hostname。 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 可能会偶尔更改

我找不到更快的方法,所以我就用我现有的方法。