列出所有帐户中的所有AWS ECS(EC2 Container)服务器

时间:2017-08-25 23:28:03

标签: amazon-web-services amazon-ec2 aws-lambda amazon-ecs

有没有办法获得在单个AWS订阅中在多个帐户中运行/停止的所有ECS服务器的列表。 我可以卷入localhost来获取元数据

curl http://localhost:51678/v1/metadata

但是我必须为每个服务器运行它来获取信息。 然后列出使用容器服务响应的服务器。

有没有更好的方法呢?任何lambda函数或任何东西。

感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

如果需要,您可以实现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

答案 1 :(得分:0)

您是否尝试过命令行界面?

产生影响的东西:

aws ec2 describe-instances --query "Reservations[*].Instances[*].{ID:InstanceId,AZ:Placement.AvailabilityZone,Name:State.Name}"