2017-08-25 2 views
1

Gibt es eine Möglichkeit, eine Liste aller ECS-Server zu erhalten, die in mehreren Konten innerhalb eines einzelnen AWS-Abonnements ausgeführt/gestoppt werden. Ich kann in localhost locken die Meta-DatenAlle AWS ECS (EC2 Container) -Server über alle Konten auflisten

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

aber ich habe, um es auszuführen für jeden einzelnen Server zu holen, die Informationen zu holen. und dann die Server auflisten, die mit Containers-Diensten geantwortet haben.

Gibt es einen besseren Weg, dies zu tun? jede Lambda-Funktion oder irgendetwas.

Jede Hilfe wird geschätzt.

Danke.

Antwort

1

Sie eine Lambda-Funktion, die wollen, wenn Sie tun umsetzen können.

dass wäre so etwas wie (wenn Sie 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'}) });     
      } 
    ); 
} 

Für weitere Informationen nehmen Sie einen Blick auf die AWS-SDK Documentation

+0

Dank, wie kann ich diese Lambda-Funktion ändern, wenn ich senden möchten Das Ergebnis für SES, die komplette Liste? Danke noch einmal. –

+0

Antwort aktualisiert. Um das Ergebnis an ein SNS-Thema zu senden, müssen Sie nur eine Methode hinzufügen, die das Ergebnis veröffentlicht. –

0

Haben Sie die Befehlszeilenschnittstelle ausprobiert?

etwas in der Art von:

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