2017-08-25 142 views
1

是否有任何方法可以獲得在單個AWS訂閱中的多個賬戶中運行/停止的所有ECS服務器的列表。 我可以蜷縮成localhost來獲取元數據列出所有賬戶中的所有AWS ECS(EC2容器)服務器

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

但我要運行它爲每一個服務器,以獲取信息。 ,然後列出使用容器服務回覆的服務器。

有沒有更好的方法來做到這一點?任何lambda函數或任何東西。

任何幫助表示讚賞。

謝謝。

回答

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

+0

感謝的,我怎麼能如果我要發送修改此lambda函數結果到SES,完整列表?再次感謝。 –

+0

答案已更新。爲了將結果發送給sns主題,您只需添加一個公佈結果的方法。 –

0

您是否嘗試過命令行界面?

東西的效果:

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