首页 > 编程问答 >具有 ParameterFilter 选项和 Contains 的 AWS ssm describe_parameters 返回结果,但具有选项 BeginsWith 则不返回任何数据

具有 ParameterFilter 选项和 Contains 的 AWS ssm describe_parameters 返回结果,但具有选项 BeginsWith 则不返回任何数据

时间:2024-07-26 08:04:32浏览次数:12  
标签:python amazon-web-services boto3 aws-ssm aws-parameter-store

我在从 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 ,因此过滤器不匹配。

解决方案

可以使用以下任何一种方法来解决此问题:

  1. 使用 Contains 过滤器: 就像发现的那样, Contains 过滤器会查找包含指定字符串的所有参数名称,而不管句点 ( . ) 。

  2. 使用更具体的 BeginsWith 过滤器: 如果想使用 BeginsWith 过滤器,则需要包含句点 ( . ) 和名称的下一部分。 例如:

python response = ssm_client.describe_parameters( ParameterFilters=[ { 'Key': 'Name', 'Option': 'BeginsWith', 'Values': ['my-data.'] } ] )

这将返回以 my-data. 开头的所有参数名称,包括 my-data.api_data

  1. 使用 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

相关文章