我正在尝试使用 SSM 的GetParametersByPath API,但我得到了过时的结果,看起来像是按Path
参数缓存约 3 秒。
我正在测试以下场景:
- 通过路径递归获取参数
- 在测试路径下放一个参数
- 使用与 (1) 中相同的参数再次通过路径获取参数
无论步骤 (2) 中的变化如何,我在步骤 (3) 中都得到与步骤 (1) 相同的响应。
我认为这与缓存有关,因为以下两种情况按预期工作。
正确行为场景一:
- 通过路径递归获取参数
- 在测试路径下放一个参数
- 睡眠 3 秒
- 使用与(1)中相同的参数再次通过路径获取参数
正确行为场景二:
- 在测试路径下放一个参数
- 通过路径递归获取参数
这种行为在我尝试过的不同 SDK 中是一致的:.Net、Python (boto3) 和 CLI,所以这不是 SKD 问题。
这是Python中的一段代码片段,它使用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
第二次运行时:
1
v2
1
您可以看到模式 - 第一个请求正在被缓存。
根据 API 文档:Request results are returned on a best-effort basis.
那么这种行为是否被认为是正确的?这是否意味着我无法以可靠的方式通过路径获取所有参数?