2017-11-11 3 views
1

Ich verwende aws-sdk, um alle laufenden EC2-Instanzen aufzulisten, deren IAM-Rolle The_Name_of_My_IAM_Role ist.aws sdk ec2.describeInstanzen, die nicht alle EC2-Instanzen auflisten

const AWS = require('aws-sdk') 

let credentials = new AWS.SharedIniFileCredentials({ 
    profile: 'my_profile' 
}) 
AWS.config.credentials = credentials 
AWS.config.update({ 
    region: 'ap-northeast-1' 
}) 

const ec2 = new AWS.EC2() 

let params = { 
    Filters: [ 
    { 
     Name: 'iam-instance-profile.arn', 
     Values: [`arn:aws:iam::123456789123:instance-profile/The_Name_of_My_IAM_Role`] 
    }, 
    { 
     Name: 'instance-state-name', 
     Values: ['running'] 
    } 
    ] 
} 
ec2.describeInstances(params, (err, data) => { 
    if (err) { 
    console.log(`describeInstances error: ${err}`) 
    } else { 
    console.log(`data.Reservations.length: ${data.Reservations.length}`) 
    } 
}) 

Ich erwarte, dass der Code 6 EC2-Instanzen zurückgibt. Aber es gibt nur 4 von ihnen zurück.

Das Problem tritt nicht auf, wenn ich aws ec2 describe-instances --filters "Name=iam-instance-profile.arn,Values=arn:aws:iam::123456789123:instance-profile/The_Name_of_IAM_Role" "Name=instance-state-name,Values=running" Befehl in meinem Terminal eingeben.

Ich meine aws ec2 describe-instances ... Befehl gibt alle 6 EC2-Instanzen zurück.

Ich habe die folgenden Umgebungsvariablen vor dem Ausführen von aws ec2 describe-instances ... Befehl festgelegt.

export AWS_DEFAULT_REGION=ap-northeast-1 
export AWS_DEFAULT_PROFILE=my_profile 

Ich habe auch my_profile in ~/.aws/credentials-Datei definiert.

Was könnte mein node.js Code falsch sein?

Oder ist das ein Fehler von aws-sdk?

+0

Werden die 4 * * Teile der 6 von der CLI zurückgegeben? (Sind das die gleichen Instanzen?) Wenn Sie die Filter entfernen, enthalten die Ergebnisse (mindestens) die 6 Instanzen, die Sie erwartet haben? –

Antwort

3

Bitte beachten Sie, dass Reservierungen Instanzen enthalten.

Wenn mehrere Instanzen über einen Befehl gestartet werden (z. B. zwei identische Instanzen in der Konsole starten), sind beide Instanzen Teil einer einzigen Reservierung.

Ihr Code zählt die Anzahl der Reservierungen, aber Sie erwarten tatsächlich, dass die Anzahl die Anzahl der Instanzen in allen Reservierungen enthält.

Lösung: Wiederholen Sie die Reservierungen und addieren Sie die Anzahl der Instanzen in jeder Reservierung.

+1

Sie haben Recht. Ich habe festgestellt, dass 2 Instanzen in einer Reservierung enthalten sind. – Brian

Verwandte Themen