2017-11-11 96 views
1

我正在使用aws-sdk來列出其IAM角色爲The_Name_of_My_IAM_Role的所有正在運行的EC2實例。aws sdk ec2.describeInstances未列出所有EC2實例

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}`) 
    } 
}) 

我希望代碼返回6個EC2實例。但它只返回其中的4個。

如果我在終端中鍵入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"命令,則不會發生此問題。

我的意思是aws ec2 describe-instances ...命令返回所有6個EC2實例。

我在運行aws ec2 describe-instances ...命令之前設置了下列環境變量。

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

我也有~/.aws/credentials文件中定義my_profile

我的node.js代碼可能有什麼問題?

或者這是一個缺陷aws-sdk

+0

*是否返回從CLI返回的6的一部分? (也就是說,它們是*相同*實例嗎?)如果刪除過濾器,那麼結果是否包含(至少)您期望的6個實例? –

回答

3

請注意預訂包含實例。

當通過一個命令啓動多個實例(例如,在控制檯中啓動兩個相同的實例)時,那麼這兩個實例都是單個預留的一部分。

您的代碼正在計算預訂的數量,但您實際上希望計數包括所有預訂中的實例數量。

解決方案:循環遍歷保留並將每個保留中的實例數加起來。

+1

你說得對。我發現預訂中包含2個實例。 – Brian