Listado de instancias de EC2 -- javascript campo con node.js campo con amazon-web-services camp codereview Relacionados El problema

Listing EC2 instances


2
vote

problema

Español

Tengo este masivo anidado para el bucle con algunas afirmaciones de SI y el otro en los NOdeJs. La salida de todo esto es solo una cadena que se combina de diferentes valores fuera del objeto JSON. Lo que quiero hacer es reescribirlo de manera más eficiente como el complemento JSLInt para sublime se queja de la complejidad de él:

  var instancesList = '';     ec2.describeInstances(params,function(err, data) {         if (err){              console.log(err, err.stack);         } else {                 for (var i in data.Reservations){                     for (var j in data.Reservations[i].Instances[0].Tags){                         if(data.Reservations[i].Instances[0].Tags[j].Key == 'Name'){                             instancesList+= 'Name: ' + data.Reservations[i].Instances[0].Tags[j].Value +                                            '  id: ' +data.Reservations[i].Instances[0].InstanceId +                                            '  Status: ' + data.Reservations[i].Instances[0].State.Name +' ';                            }                         }                 }         } console.log(instancesList);   

Cualquier ayuda, ideas o un enlace sobre cómo lidiar con este tipo de situaciones serían muy apreciadas.

Original en ingles

I've got this massive nested for loop with a few if and else statements in nodeJs. The output of all of this is just string which is combined from different values out of JSon object. What I want to do is rewrite it in more efficient way as JSlint plugin for sublime is complaining about complexity of it:

var instancesList = '';     ec2.describeInstances(params,function(err, data) {         if (err){              console.log(err, err.stack);         } else {                 for (var i in data.Reservations){                     for (var j in data.Reservations[i].Instances[0].Tags){                         if(data.Reservations[i].Instances[0].Tags[j].Key == 'Name'){                             instancesList+= 'Name: ' + data.Reservations[i].Instances[0].Tags[j].Value +                                            '  id: ' +data.Reservations[i].Instances[0].InstanceId +                                            '  Status: ' + data.Reservations[i].Instances[0].State.Name +'\n';                            }                         }                 }         } console.log(instancesList); 

Any help, ideas or a link on how to deal with these kind of situations would be greatly appreciated.

        
   
   

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Honestamente, su bucle no parece ese complejo. Probablemente ignoraría esta advertencia en su caso, al menos hasta que creciera en complejidad o la función circundante creció en tamaño.

En cualquier caso, aquí hay algunas cosas que puede cambiar:

a. Agregue una variable para reemplazar las cinco instancias de int length, n; length = strlen(argv[1]); 3 .

b. Fuera de la parte superior de mi cabeza, estoy bastante seguro de que una instancia de EC2 solo tendrá una etiqueta de "nombre". Puede extraer este bucle en una función separada si se siente cómodo con este supuesto.

c. Si su estilo de pelusa / estilo personal permite múltiples devoluciones, puede reducir la profundidad al regresar del error.

    int length, n;   length = strlen(argv[1]); 4  

Breve a un lado: si este script es solo para enumerar las instancias para usted, es posible que le resulte útil visite el int length, n; length = strlen(argv[1]); 5 y la int length, n; length = strlen(argv[1]); 6 Herramienta:

    int length, n;   length = strlen(argv[1]); 7  

Salida:

    int length, n;   length = strlen(argv[1]); 8  
 

Honestly, your loop doesn't seem that complex. I would probably ignore this warning in your case, at least until it grew in complexity or the surrounding function grew in size.

In any case, here are some things you could change:

a. Add a variable to replace the five instances of data.Reservations[i].Instances[0].

b. Off the top of my head, I'm pretty sure an EC2 instance is only going to have one "Name" tag. You can extract this loop into a separate function if you feel comfortable with this assumption.

c. If your lint rules / personal style allows for multiple returns, you can reduce the depth by returning from the error.

var instancesList = ''; ec2.describeInstances(params,function(err, data) {   if (err) return console.log(err, err.stack);    for (var i in data.Reservations){     var ins = data.Reservations[i].Instances[0]     var name = findInstanceName(ins)     if(name === null) continue;      instancesList+= 'Name: ' + name +                     '  id: ' +ins.InstanceId +                     '  Status: ' + ins.State.Name +'\n';   }   console.log(instancesList); }  function findInstanceName(ins){   for(var j in ins.Tags){     if(ins.Tags[j].Key === 'Name'){       return ins.Tags[j].Value;     }   }   //I'm not sure skipping the instance is the best choice.   //You might instead return "<Unknown>" so you can know you   //have an unnamed instance running.   return null; } 

Brief aside: If this script is only to list the instances for you, you might find it useful to check out the aws-cli and the jq tool:

aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | [(.Tags | from_entries | .Name), .InstanceId, .State.Name] | @tsv' | column -t -s $'\t' 

Output:

hello-world      i-a1a1a1a1  running jenkins          i-b2b2b2b2  running production       i-c3c3c3c3  running qa               i-d4d4d4d4  stopped testing          i-e5e5e5e5  terminated 
 
 

Relacionados problema

3  Creando una URL solicitada  ( Creating a presigned url ) 
He creado software en IR para crear una URL solicitada: package main import ( "fmt" "log" "time" "github.com/minio/minio-go" "github....

4  Correr los comandos de AWS funciona bien, pero el código parece desordenado y no me gusta el tiempo  ( Running aws commands works ok but the code seems messy and i dont like the tim ) 
Esto es lo que he encontrado para una clase que maneja analizando la producción de textrato AWS. Hasta ahora solo obtiene la salida AWS Textract en un archivo...

5  Controlador de rieles para gestionar las instancias de EC2  ( Rails controller to manage ec2 instances ) 
Hice una pequeña solicitud de muestra para una entrevista. Desde que no tuve aceptado, me gustaría su opinión sobre cómo mejorarlo. Los métodos AUX son priv...

3  Ecmascript 6 Amazon Lambda Imagen de imagen  ( Ecmascript 6 amazon lambda image processing ) 
Utilizo este script en Amazon Lambda para el procesamiento de imágenes. El guión debe hacer: Descargar imagen y marca de agua de Amazon S3 Cambiar el tam...

3  Optimización de NOde.js HTTP Get POR AWS LAMBDA  ( Optimizing node js http get for aws lambda ) 
Tengo el siguiente NOde.js (RUNTETE V6.10) Ejecutando en AWS Lambda: exports.handler = (event, context) => { send(event); }; var flota = ['CZWF64', 'D...

4  Firma una URL EC2 / S3  ( Sign an ec2 s3 url ) 
El otro día me encontré tratando de caminar a través de las instrucciones para firmar una URL S3. http://docs.aws.amazon.com/general/ Último / GR / FIRMING...

1  GO PROGRAMA PARA GENERAR S3 PUT PUT ORL  ( Go program to generate s3 presigned put url ) 
Tengo un programa de GO simple para generar una URL de PUT ST3 PUT: cluster_set::cluster_set(std::ifstream & input_file, char delimiter)5 Me gustaría pe...

3  AWS Lambda Function para actualizar los registros de DYNAMODB recién agregados  ( Aws lambda function to update newly added dynamodb records ) 
enfoque Todos los datos se envían en mi DynDoDB desde otro lambda & gt; Integración de API Función Considerando que el preAction3 se inserta como p...

4  AWS EC2 Metadata Fetcher en Python  ( Aws ec2 metadata fetcher in python ) 
Actualización https://docs.aws.amazon .com / AWSEC2 / Último / UserGuide / EC2-instance-metadata.html Este parece ser el esquema para los metadatos de...

6  Seleccione y elimine objetos del contenedor S3  ( Select and delete objects from s3 container ) 
GITLAB guarda archivos con el patrón public class CalculatingUnit { int count = 0, maxMeasuredValues = 20; public double doMeasures(IDev myDevi...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos