【问题标题】:List all AWS ECS (EC2 Container) servers across all the accounts列出所有账户中的所有 AWS ECS(EC2 容器)服务器
【发布时间】:2018-02-04 01:02:52
【问题描述】:

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

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

但我必须为每台服务器运行它以获取信息。 然后列出响应容器服务的服务器。

有没有更好的方法来做到这一点?任何 lambda 函数或任何东西。

感谢任何帮助。

谢谢。

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 谢谢,如果我想将结果发送到 SES,我该如何修改这个 lambda 函数,完整列表?再次感谢。
    • 答案已更新。为了将结果发送到 sns 主题,您只需添加一个发布结果的方法。
    【解决方案2】:

    你试过命令行界面吗?

    大意是:

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

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 2015-05-01
      • 1970-01-01
      • 2021-12-30
      • 2018-10-13
      • 1970-01-01
      • 2019-07-21
      • 2017-07-11
      • 2017-05-05
      相关资源
      最近更新 更多