列出所有账户中的所有 AWS ECS(EC2 容器)服务器
List all AWS ECS (EC2 Container) servers across all the accounts
是否有任何方法可以获取单个 AWS 订阅中多个账户中所有 ECS 服务器的列表 running/stopped。
我可以 curl 进入本地主机来获取元数据
curl http://localhost:51678/v1/metadata
但我必须 运行 它为每个服务器获取信息。
然后列出响应容器服务的服务器。
有没有更好的方法来做到这一点?任何 lambda 函数或任何东西。
感谢任何帮助。
谢谢。
您尝试过命令行界面吗?
大意为:
aws ec2 describe-instances --query "Reservations[*].Instances[*].{ID:InstanceId,AZ:Placement.AvailabilityZone,Name:State.Name}"
如果需要,您可以实施 Lambda 函数来执行此操作。
那会是这样的(如果你选择 nodejs):
const AWS = require('aws-sdk');
const bluebird = require('bluebird');
const EC2_TOPIC_ARN = process.env.EC2_TOPIC_ARN;
const DEFAULT_FILTERS = {};
AWS.config.setPromisesDependency(bluebird);
var ec2 = new AWS.EC2();
var sns = new AWS.SNS();
/**
* Describes EC2 instances
*
* @param {Object} filters
*/
var getEC2Instances = (filters) => {
var params = {
DryRun : false,
Filters: [filters]
};
return ec2.describeInstances(params).promise();
}
/**
* Publishes a message to the sns topic
*
* @param {Object} message
*/
var broadcast = (message) => {
var params = {
TargetArn: EC2_TOPIC_ARN,
Message : JSON.stringify(message),
Subject : 'EC2 Describe Event'
};
return sns.publish(params).promise();
}
exports.handler = (event, context, callback) => {
var body = JSON.parse(event.body);
var filters = body.filters || DEFAULT_FILTERS;
getEC2Instances(filters)
.then(
(result) => {
console.log(result);
broadcast(result)
.then((status) => console.log(status))
.catch((error) => console.error(error));
callback(null, { statusCode: 200, body: JSON.stringify(result) });
}
).catch(
(error) => {
console.error(error);
callback(null, { statusCode: 500, body: JSON.stringify({message: 'Ops'}) });
}
);
}
有关详细信息,请查看 AWS-SDK Documentation
是否有任何方法可以获取单个 AWS 订阅中多个账户中所有 ECS 服务器的列表 running/stopped。 我可以 curl 进入本地主机来获取元数据
curl http://localhost:51678/v1/metadata
但我必须 运行 它为每个服务器获取信息。 然后列出响应容器服务的服务器。
有没有更好的方法来做到这一点?任何 lambda 函数或任何东西。
感谢任何帮助。
谢谢。
您尝试过命令行界面吗?
大意为:
aws ec2 describe-instances --query "Reservations[*].Instances[*].{ID:InstanceId,AZ:Placement.AvailabilityZone,Name:State.Name}"
如果需要,您可以实施 Lambda 函数来执行此操作。
那会是这样的(如果你选择 nodejs):
const AWS = require('aws-sdk');
const bluebird = require('bluebird');
const EC2_TOPIC_ARN = process.env.EC2_TOPIC_ARN;
const DEFAULT_FILTERS = {};
AWS.config.setPromisesDependency(bluebird);
var ec2 = new AWS.EC2();
var sns = new AWS.SNS();
/**
* Describes EC2 instances
*
* @param {Object} filters
*/
var getEC2Instances = (filters) => {
var params = {
DryRun : false,
Filters: [filters]
};
return ec2.describeInstances(params).promise();
}
/**
* Publishes a message to the sns topic
*
* @param {Object} message
*/
var broadcast = (message) => {
var params = {
TargetArn: EC2_TOPIC_ARN,
Message : JSON.stringify(message),
Subject : 'EC2 Describe Event'
};
return sns.publish(params).promise();
}
exports.handler = (event, context, callback) => {
var body = JSON.parse(event.body);
var filters = body.filters || DEFAULT_FILTERS;
getEC2Instances(filters)
.then(
(result) => {
console.log(result);
broadcast(result)
.then((status) => console.log(status))
.catch((error) => console.error(error));
callback(null, { statusCode: 200, body: JSON.stringify(result) });
}
).catch(
(error) => {
console.error(error);
callback(null, { statusCode: 500, body: JSON.stringify({message: 'Ops'}) });
}
);
}
有关详细信息,请查看 AWS-SDK Documentation