列出所有账户中的所有 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