我使用aws-sdk列出IAM角色为The_Name_of_My_IAM_Role
的所有正在运行的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 :(得分:3)
请注意,预订包含实例。
当通过一个命令启动多个实例时(例如,在控制台中启动两个相同的实例),则两个实例都是单个预留的一部分。
您的代码正在计算预订数量,但实际上您希望计数包含所有预订中的实例数。
解决方案:循环预订并添加每个预订中的实例数。
答案 1 :(得分:0)
这是一个shell脚本(使用 aws-cli )循环遍历所有区域并显示表中的所有ec2实例:
for region in $(aws ec2 describe-regions --query 'Regions[*].RegionName' --output text); do
echo "Region: $region"
aws ec2 describe-instances --region $region --query "Reservations[*].Instances[*].{name: Tags[?Key=='Name'] | [0].Value, instance_id: InstanceId, ip_address: PrivateIpAddress, state: State.Name}" --output table
done
node.js应该有相同的方法