获取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 可能会偶尔更改
我找不到更快的方法,所以我就用我现有的方法。
我在 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 可能会偶尔更改
我找不到更快的方法,所以我就用我现有的方法。