【问题标题】:How to enumerate all SQS queues in an AWS account如何枚举 AWS 账户中的所有 SQS 队列
【发布时间】:2016-11-02 01:32:48
【问题描述】:

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

我已经对 DynamoDb 表进行了类似的操作,这相当简单 - 您可以在循环中使用 ListTables 对结果进行分页,直到获得所有结果。

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

是的,就我而言,可能有超过 1000 个队列。我有一个查询正好返回 1000 个结果。都在 1 个区域,所以它和 this question 不一样。

【问题讨论】:

  • 您可以使用QueueNamePrefix 参数来模拟名称的分页,特别是如果您知道队列名称的一般格式。不是一个完美的解决方案,但可能会满足您的需求。
  • 是的,我们知道队列名称都以相同的前缀开头。这不是一种易于通用且高效的方法,并非没有一些相当复杂的文本分析。

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


【解决方案1】:

您可以从支持分页的 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 2020-09-23
    • 2023-02-02
    • 2021-02-01
    • 2020-05-31
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    相关资源
    最近更新 更多