如何在没有特定标记的情况下搜索资源

时间:2018-02-09 20:36:13

标签: javascript amazon-web-services amazon-ec2 aws-sdk aws-sdk-js

我正在使用AWS Javascript SDK通过AWS API查询我的云基础架构。

我可以通过在过滤器中指定key = value对的标签来查询资源,例如“Environment = Production”。我找不到的是如何查询空值标签或不存在的标签。例如,我想查询没有定义某个标记的所有EC2实例,比如说,没有“环境”标记的所有EC2实例。

SDK可以实现吗?

2 个答案:

答案 0 :(得分:1)

您可以将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}`);
});

答案 1 :(得分:1)

执行此操作的众多方法之一是使用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);
});

因此,您将在clearThese数组中包含实例ID ,您可以将其传递给stopInstances()功能以停止VM或直接terminateInstances()终止他们。

此外,您可以使用区域数组在所有区域中运行此代码。