首页 > 解决方案 > AWSSimpleSystemsManagement describeParameters returns only one parameter at a time

问题描述

I am trying to fetch the list of parameters from AWS which start with a certain prefix. I could not figure out how to get all the parameters.

ParametersFilter filter = 
 new ParametersFilter().
 withKey("Name").
 withValues("vyom"); // the key prefix i want

DescribeParametersRequest request = 
  new DescribeParametersRequest().withFilters(filter);

AWSSimpleSystemsManagement client =
  AWSSimpleSystemsManagementClientBuilder.defaultClient();

DescribeParametersResult result = 
  client.
    describeParameters(request);

List<ParameterMetadata> params =    
  result.
  getParameters(); // returns a list of size one

The DescribeParametersResult always has the nextToken set, and calling the client again, with the next token returns the next parameter.

Invoking aws cli from the terminal returns all parameters as i expected. aws ssm describe-parameters --filters "Key=Name,Values=vyom"

标签: javaamazon-web-services

解决方案


我遇到了同样的问题;它似乎按设计工作。从文档

请求结果将尽最大努力返回。如果您在请求中指定 MaxResults,则响应包含不超过指定限制的信息。但是,返回的项目数可以介于零和 MaxResults 的值之间。如果服务在处理结果时达到内部限制,它会停止操作并返回到该点的匹配值和 NextToken。您可以在后续调用中指定 NextToken 以获取下一组结果。

也就是说:过滤是在分页之后应用的。如果我设置MaxResults为 50,那么第一页返回来自控制台 UI 中可见的前 50 个参数的过滤结果,第二页返回来自第二个 50 个参数的结果,依此类推...... CLI 只是完成了迭代的工作给你的页面。

一旦开始对结果进行分页,您将遇到的下一个问题是激进的节流。这里有一些很好的讨论,包括宝石:

显然,最好的解决方案是增加 AWS 速率限制,但他们似乎非常不愿意为 DescribeParameters 这样做(他们坚持认为它只能用于 CLI 上的手动查询)。

神速!


推荐阅读