2017-11-11 45 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 

は、私はまた、my_profile~/.aws/credentialsファイルに定義されています。

私のnode.jsコードが間違っている可能性がありますか?

またはこれはaws-sdkのバグですか?

+0

6から返された6つのうち*がCLIから返されましたか? (つまり、同じ*インスタンスですか?)フィルタを削除した場合、結果には、少なくとも期待した6つのインスタンスが含まれていますか? –

答えて

3

予約にはインスタンスが含まれています。

複数のインスタンスが1つのコマンドで起動された場合(たとえば、コンソールで2つの同一インスタンスを起動する場合)、両方のインスタンスは単一の予約の一部です。

お客様のコードでは予約数がカウントされていますが、実際にはすべての予約にインスタンス数を含めると予想されます。

ソリューション:予約をループし、各予約のインスタンス数を加算します。

+1

あなたは正しいです。 2つのインスタンスが予約に含まれていることがわかりました。 – Brian

関連する問題