处理 Parameter Store 中的参数层次结构 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon Systems Manager Change Manager 不再向新客户开放。现有客户可以继续正常使用该服务。有关更多信息,请参阅 Amazon Systems Manager Change Manager 可用性变更

处理 Parameter Store 中的参数层次结构

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

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

通过示例了解参数层次结构

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

/Environment/Type of computer/Application/Data

/Dev/DBServer/MySQL/db-string13

您可以创建具有最多 15 个级别的层次结构。我们建议您创建反映环境中现有层次结构的层次结构,如以下示例所示:

  • 您的持续集成持续交付环境(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

查询层次结构中的参数

使用层次结构的另一个好处是,能够通过使用 GetParametersByPath API 操作查询层次结构中某个级别的所有参数。例如,若从 Amazon Command Line Interface(Amazon 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

通过 Amazon CLI 来使用层次结构管理参数

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

使用层次结构管理参数
  1. 安装并配置 Amazon Command Line Interface(Amazon CLI)(如果尚未执行该操作)。

    有关更多信息,请参阅安装或更新 Amazon CLI 的最新版本

  2. 运行以下命令创建一个使用 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

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

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

    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}
  4. 运行以下命令,创建使用 Amazon 托管式密钥的 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
  5. 运行以下命令创建多个使用上一步骤中的层次结构的参数。

    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
  6. 运行以下命令获取两个参数的值。

    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"
  7. 运行以下命令查询单个级别下的所有参数。

    Linux & macOS
    aws ssm get-parameters-by-path \ --path "/MyService/Test"
    Windows
    aws ssm get-parameters-by-path ^ --path "/MyService/Test"
  8. 运行以下命令删除两个参数。

    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"