我正在使用AWS Javascript SDK通过 AWS API 查询我的云基础设施。
我可以通过在过滤器中指定 key=value 对的标签来查询资源,例如“Environment=Production”。我找不到的是如何查询空值标签或不存在的标签。例如,我想查询所有没有定义特定标签的 EC2 实例,比方说,所有没有“环境”标签的 EC2 实例。
SDK可以做到吗?
我正在使用AWS Javascript SDK通过 AWS API 查询我的云基础设施。
我可以通过在过滤器中指定 key=value 对的标签来查询资源,例如“Environment=Production”。我找不到的是如何查询空值标签或不存在的标签。例如,我想查询所有没有定义特定标签的 EC2 实例,比方说,所有没有“环境”标签的 EC2 实例。
SDK可以做到吗?
做到这一点的许多方法之一是使用describeInstances()
const ec2 = new AWS.EC2({
region: "us-west-2"
});
var clearThese = [];
ec2.describeInstances(function (err, data) {
if (err) return err;
data.Reservations.forEach(function (reservation) {
reservation.Instances.forEach(function (instance) {
//console.log(instance.Tags);
let temp = instance.Tags.filter(function (arr) { return arr.Key === 'Environment' })[0];
if (temp !== "undefined") {
clearThese.push(instance.InstanceId);
}
});
});
console.log(clearThese);
});
因此,您将在数组中拥有实例 ID ,您可以将其传递给stopInstances()函数以停止 VM,或通过terminateInstances()直接终止它们。clearThese
此外,您可以使用区域数组在所有区域中运行此代码。
您可以将 nodejs 子进程与 aws-cli 结合使用,例如:
const { exec } = require('child_process');
exec(`aws ec2 describe-instances --profile dev --query "Reservations[].Instances[].[InstanceId, Tags]" --output text | grep None | awk '{print $1}'`, (error, stdout, stderr) => {
console.log(`stdout: ${stdout}`);
});