我在从 aws 参数存储获取数据时遇到一个奇怪的问题。我正在调用描述参数来获取有关参数的信息。下面是相同的 Python 代码。
参数存储:my-data.api_data
import boto3
ssm_client = boto3.client('ssm')
response = ssm_client.describe_parameters(
ParameterFilters=[
{
'Key': 'Name',
'Option': 'BeginsWith',
'Values': ['my-data']
}
]
)
response = [] 返回的响应是空列表。 但如果我将选项更改为包含,那么我会得到数据。
import boto3
ssm_client = boto3.client('ssm')
response = ssm_client.describe_parameters(
ParameterFilters=[
{
'Key': 'Name',
'Option': 'Contains',
'Values': ['my-data']
}
]
)
返回与 my-data.api_data 相关的信息
我无法了解可能出现的问题。 请帮忙。
问题出在的参数名
my-data.api_data
中的句点 (
.
) 。
BeginsWith
过滤器将句点 (
.
) 视为分隔符,而不是字符串的一部分。
这意味着
BeginsWith
过滤器会查找以
my-data
开头且后面紧跟着句点 (
.
) 的参数名称,而不是查找以
my-data
开头的所有参数名称。 由于的参数名称是
my-data.api_data
,因此过滤器不匹配。
解决方案
可以使用以下任何一种方法来解决此问题:
-
使用
Contains
过滤器: 就像发现的那样,Contains
过滤器会查找包含指定字符串的所有参数名称,而不管句点 (.
) 。 -
使用更具体的
BeginsWith
过滤器: 如果想使用BeginsWith
过滤器,则需要包含句点 (.
) 和名称的下一部分。 例如:
python
response = ssm_client.describe_parameters(
ParameterFilters=[
{
'Key': 'Name',
'Option': 'BeginsWith',
'Values': ['my-data.']
}
]
)
这将返回以
my-data.
开头的所有参数名称,包括
my-data.api_data
。
-
使用
Path
作为过滤器键: 可以使用Path
作为ParameterFilters
中的Key
来过滤参数。 这将搜索与指定路径匹配的参数,包括子路径。 例如:python response = ssm_client.describe_parameters( ParameterFilters=[ { 'Key': 'Path', 'Option': 'Recursive', 'Values': ['/my-data'] } ] )
这将返回路径
/my-data
及其子路径下的所有参数。
请记住,选择最佳方法取决于的具体需求和参数的命名约定。
标签:python,amazon-web-services,boto3,aws-ssm,aws-parameter-store From: 76557020