如何枚举AWS账户中的所有SQS队列

时间:2016-10-31 11:34:15

标签: amazon-web-services aws-sdk amazon-sqs

如何通过API和.Net SDK以编程方式列出AWS账户中的所有SQS队列?

我已经在使用DynamoDb表做了类似的事情,而且相当简单 - 你可以在循环中使用ListTables翻译结果,直到你拥有它们为止。

然而,等效的SQS Api端点ListQueues是不同的,并没有那么有用。它最多返回1000个队列,没有分页选项。

是的,在我的案例中可以有超过1000个队列。我有一个查询返回1000个结果。它全部在1个区域,因此它与this question不同。

1 个答案:

答案 0 :(得分:4)

您可以从支持分页的Cloudwatch检索SQS队列名称。它只会返回被认为是活动的队列。

活动队列为described as

  

CloudWatch认为队列最长可达六小时   队列中的最后一个活动(例如,任何API调用)。

这样的事情应该有效:

var client = new AmazonCloudWatchClient(RegionEndpoint.EUWest1);
string nextToken = null;
var results = Enumerable.Empty<string>();

do
{
    var result = client.ListMetrics(new ListMetricsRequest()
    {
        MetricName = "ApproximateAgeOfOldestMessage",
        NextToken = nextToken
    });

    results = results.Concat(
        result
        .Metrics
        .SelectMany(x => x.Dimensions.Where(d => d.Name == "QueueName")
        .Select(d => d.Value))
    );

    nextToken = result.NextToken;

} while (nextToken != null);