AWS Systems Manager `GetParametersByPath` API返回过时的结果。

问题描述 投票:2回答:1

我正试图利用SSM的 GetParametersByPath API,我得到了过时的结果,这看起来像一个约3秒的缓存由 Path 参数。

我正在测试以下场景。

  1. 通过路径递归获取参数
  2. 在测试路径下加一个参数
  3. 再次使用与(1)相同的参数通过路径获取参数。

无论步骤(2)如何改变,我在步骤(3)中得到的响应与步骤(1)相同。

我认为这与缓存有关,因为以下2个场景的工作符合预期。

正确行为方案1:

  1. 通过路径递归获取参数
  2. 在测试路径下加一个参数
  3. 睡眠3秒
  4. 再次使用与(1)相同的参数通过路径获取参数。

正确的行为方案2:

  1. 在测试路径下加一个参数
  2. 递归地通过路径获取参数

这个行为在我尝试过的不同SDK中是一致的:.Net、Python(boto3)和CLI,所以这不是SKD的问题。

下面是一个代码片段 蟒蛇boto3 复制不正确的行为。

import boto3

client = boto3.client('ssm')

first = client.get_parameters_by_path(
    Path='/param-store-test/1',
    Recursive=True,
    WithDecryption=True,
    MaxResults=10)

print(first['Parameters'][0]['Version'] if first['Parameters'] else None)

put_response = client.put_parameter(
    Name='/param-store-test/1/2',
    Value='test',
    Type='SecureString',
    KeyId='alias/aws/ssm',
    Overwrite=True,
    Tier='Standard')

print("v{}".format(put_response['Version']))

second = client.get_parameters_by_path(
    Path='/param-store-test/1',
    Recursive=True,
    WithDecryption=True,
    MaxResults=10)

print(second['Parameters'][0]['Version'] if second['Parameters'] else None)

当第一次运行时,这段代码给我的输出是:

None
v1
None

而当第二次运行时 And when run for the second time:

1
v2
1

你可以看到这个模式 -- 第一个请求被缓存了。

根据API文档。Request results are returned on a best-effort basis.那么这种行为被认为是正确的吗? 这是否意味着我没有任何方法可以可靠地通过路径获取所有参数?

amazon-web-services aws-sdk boto3 aws-ssm aws-parameter-store
1个回答
0
投票

我注意到get_parameters_by_path()并没有像我预期的那样工作。

你可能认为(简化代码)。

put_parameter('/abc/def', "123")
get_parameters_by_path('/abc/def')

会返回 "123",而它似乎什么也没返回。

然而。

get_parameter('/abc/def')

正确地返回 "123"。

另外:

get_parameters_by_path('/abc')

将返回'abcdef' => "123"

因此,它似乎是有效的,但不尽如人意。

© www.soinside.com 2019 - 2024. All rights reserved.