

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 处理 Parameter Store 中的参数层次结构
<a name="sysman-paramstore-hierarchies"></a>

以平面列表的形式管理几十个或数百个参数十分耗时且容易出错。而且为任务确定正确参数也很难。这意味着，您可能意外地使用了错误的参数，或者您可能创建多个使用相同配置数据的参数。

您可以使用参数层次结构来帮助组织和管理参数。一个层次结构是一个参数名称，包括您使用正斜杠定义的路径。

**Topics**
+ [通过示例了解参数层次结构](#ps-hierarchy-examples)
+ [查询层次结构中的参数](#ps-hierarchy-queries)
+ [通过 AWS CLI 来使用层次结构管理参数](#sysman-paramstore-walk-hierarchy)

## 通过示例了解参数层次结构
<a name="ps-hierarchy-examples"></a>

下列示例在名称中使用三个层次结构级别来标识以下内容：

`/Environment/Type of computer/Application/Data`

`/Dev/DBServer/MySQL/db-string13`

您可以创建具有最多 15 个级别的层次结构。我们建议您创建反映环境中现有层次结构的层次结构，如以下示例所示：
+ 您的[持续集成](https://aws.amazon.com/devops/continuous-integration/)和[持续交付](https://aws.amazon.com/devops/continuous-delivery/)环境（CI/CD 工作流）

  `/Dev/DBServer/MySQL/db-string`

  `/Staging/DBServer/MySQL/db-string`

  `/Prod/DBServer/MySQL/db-string`
+ 您的使用容器的应用程序

  ```
  /MyApp/.NET/Libraries/my-password
  ```
+ 您的业务组织

  `/Finance/Accountants/UserList`

  `/Finance/Analysts/UserList`

  `/HR/Employees/EU/UserList`

参数层次结构规范了创建参数的方式，而且使得随时间的推移管理参数更为容易。参数层次结构还可帮助您为配置任务确定正确参数。这可帮助您避免使用相同的配置数据创建多个参数。

您可以创建一个层次结构，允许您在不同的环境中共享参数，如以下示例所示，这些示例在开发和暂存环境中使用密码。

`/DevTest/MyApp/database/my-password`

然后您可以为生产环境创建一个唯一密码，如以下示例所示：

`/prod/MyApp/database/my-password`

您无需指定参数层次结构。您可以在第一级创建参数。它们叫做*根*参数。考虑到向后兼容性，在发布层次结构之前在 Parameter Store 中创建的所有参数都是根参数。系统将以下两个参数视为根参数。

`/parameter-name`

`parameter-name`

## 查询层次结构中的参数
<a name="ps-hierarchy-queries"></a>

使用层次结构的另一个好处是，能够通过使用 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html) API 操作查询层次结构中某个级别*下*的所有参数。例如，若从 AWS Command Line Interface（AWS CLI）运行以下命令，系统会返回 `Oncall` 级别下的所有参数：

```
aws ssm get-parameters-by-path --path /Dev/Web/Oncall
```

示例输出：

```
{
    "Parameters": [
        {
            "Name": "/Dev/Web/Oncall/Week1",
            "Type": "String",
            "Value": "John Doe",
            "Version": 1,
            "LastModifiedDate": "2024-11-22T07:18:53.510000-08:00",
            "ARN": "arn:aws:ssm:us-east-2:123456789012:parameter/Dev/Web/Oncall/Week1",
            "DataType": "text"
        },
        {
            "Name": "/Dev/Web/Oncall/Week2",
            "Type": "String",
            "Value": "Mary Major",
            "Version": 1,
            "LastModifiedDate": "2024-11-22T07:21:25.325000-08:00",
            "ARN": "arn:aws:ssm:us-east-2:123456789012:parameter/Dev/Web/Oncall/Week2",
            "DataType": "text"
        }
    ]
}
```

要查看层次结构中解密的 `SecureString` 参数，请指定路径和 `--with-decryption` 参数，如以下示例所示。

```
aws ssm get-parameters-by-path --path /Prod/ERP/SAP --with-decryption
```

## 通过 AWS CLI 来使用层次结构管理参数
<a name="sysman-paramstore-walk-hierarchy"></a>

此过程介绍了如何通过使用 AWS CLI 来使用参数和参数层次结构。

**使用层次结构管理参数**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令创建一个使用 `allowedPattern` 参数和 `String` 参数类型的参数。本示例中的允许模式表示参数的值必须为 1 到 4 个数字。

------
#### [ Linux & macOS ]

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/MaxConnections" \
       --value 100 --allowed-pattern "\d{1,4}" \
       --type String
   ```

------
#### [ Windows ]

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/MaxConnections" ^
       --value 100 --allowed-pattern "\d{1,4}" ^
       --type String
   ```

------

   该命令返回参数的版本号。

1. 执行以下命令*尝试*用新值覆盖您刚刚创建的参数。

------
#### [ Linux & macOS ]

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/MaxConnections" \
       --value 10,000 \
       --type String \
       --overwrite
   ```

------
#### [ Windows ]

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/MaxConnections" ^
       --value 10,000 ^
       --type String ^
       --overwrite
   ```

------

   系统会返回以下错误，因为新值不满足您在上一步骤中指定的允许模式的要求。

   ```
   An error occurred (ParameterPatternMismatchException) when calling the PutParameter operation: Parameter value, cannot be validated against allowedPattern: \d{1,4}
   ```

1. 运行以下命令，创建使用 AWS 托管式密钥的 `SecureString` 参数。本示例中的允许模式表示用户可以指定任意字符，并且值必须在 8 到 20 个字符之间。

------
#### [ Linux & macOS ]

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/my-password" \
       --value "p#sW*rd33" \
       --allowed-pattern ".{8,20}" \
       --type SecureString
   ```

------
#### [ Windows ]

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/my-password" ^
       --value "p#sW*rd33" ^
       --allowed-pattern ".{8,20}" ^
       --type SecureString
   ```

------

1. 运行以下命令创建多个使用上一步骤中的层次结构的参数。

------
#### [ Linux & macOS ]

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/DBname" \
       --value "SQLDevDb" \
       --type String
   ```

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/user" \
       --value "SA" \
       --type String
   ```

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/userType" \
       --value "SQLuser" \
       --type String
   ```

------
#### [ Windows ]

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/DBname" ^
       --value "SQLDevDb" ^
       --type String
   ```

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/user" ^
       --value "SA" ^
       --type String
   ```

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/userType" ^
       --value "SQLuser" ^
       --type String
   ```

------

1. 运行以下命令获取两个参数的值。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-parameters \
       --names "/MyService/Test/user" "/MyService/Test/userType"
   ```

------
#### [ Windows ]

   ```
   aws ssm get-parameters ^
       --names "/MyService/Test/user" "/MyService/Test/userType"
   ```

------

1. 运行以下命令查询单个级别下的所有参数。

------
#### [ Linux & macOS ]

   ```
   aws ssm get-parameters-by-path \
       --path "/MyService/Test"
   ```

------
#### [ Windows ]

   ```
   aws ssm get-parameters-by-path ^
       --path "/MyService/Test"
   ```

------

1. 运行以下命令删除两个参数。

------
#### [ Linux & macOS ]

   ```
   aws ssm delete-parameters \
       --names "/IADRegion/Dev/user" "/IADRegion/Dev/userType"
   ```

------
#### [ Windows ]

   ```
   aws ssm delete-parameters ^
       --names "/IADRegion/Dev/user" "/IADRegion/Dev/userType"
   ```

------