2017-08-25 4 views
1

Existe-t-il un moyen d'obtenir la liste de tous les serveurs ECS exécutés/arrêtés dans plusieurs comptes au sein d'un seul abonnement AWS. Je peux pelotonner dans localhost pour récupérer les données métaRépertorier tous les serveurs AWS ECS (conteneur EC2) pour tous les comptes

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

mais je dois l'exécuter pour chaque serveur, pour aller chercher l'info. , puis répertoriez les serveurs qui ont répondu avec des services de conteneur.

Y a-t-il une meilleure façon de faire cela? toute fonction lambda ou quoi que ce soit.

Toute aide est appréciée.

Merci.

Répondre

1

Vous pouvez implémenter une fonction Lambda faire que si vous voulez.

Ce serait quelque chose comme (si vous choisissez 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'}) });     
      } 
    ); 
} 

Pour plus de détails, jetez un oeil à la AWS-SDK Documentation

+0

merci, comment puis-je modifier cette fonction lambda, si je veux envoyer le résultat à SES, la liste complète ?? Merci encore. –

+0

réponse mise à jour. Pour envoyer le résultat à un sujet sns, il suffit d'ajouter une méthode qui publie le résultat. –

0

avez-vous essayé l'interface de ligne de commande?

quelque chose à l'effet de:

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