繁体   English   中英

如何从现有的红移集群参数组工作负载管理设置复制?

[英]How to copy redshift cluster parameter group workload management settings from existing one?

有没有办法从现有的 Redshift 工作负载管理设置中复制?

我的 redshift 参数组中有一个复杂的 WLM 配置,我想将其复制到另一个配置中。 手动执行很容易出错。 有没有办法自动复制它?

这是我从 Redshift 控制台的 WLM 配置页面复制的 WLM 配置 JSON:

[
  {
    "query_group": [
      "defaulton",
      "lab4on"
    ],
    "query_group_wild_card": 0,
    "user_group": [],
    "user_group_wild_card": 0,
    "concurrency_scaling": "off",
    "priority": "normal",
    "queue_type": "auto",
    "auto_wlm": true
  },
  {
    "query_group": [
      "lab1",
      "lab2",
      "lab3normal",
      "lab4off",
      "lab5",
      "lab6reads",
      "defaultoff"
    ],
    "query_group_wild_card": 0,
    "user_group": [],
    "user_group_wild_card": 0,
    "concurrency_scaling": "off",
    "priority": "normal",
    "queue_type": "auto",
    "auto_wlm": true
  },
  {
    "query_group": [
      "lab3highest"
    ],
    "query_group_wild_card": 0,
    "user_group": [],
    "user_group_wild_card": 0,
    "concurrency_scaling": "off",
    "priority": "highest",
    "queue_type": "auto",
    "auto_wlm": true
  },
  {
    "query_group": [
      "lab3lowest"
    ],
    "query_group_wild_card": 0,
    "user_group": [],
    "user_group_wild_card": 0,
    "concurrency_scaling": "off",
    "priority": "lowest",
    "queue_type": "auto",
    "auto_wlm": true
  },
  {
    "query_group": [
      "lab6writes"
    ],
    "query_group_wild_card": 0,
    "user_group": [],
    "user_group_wild_card": 0,
    "concurrency_scaling": "off",
    "priority": "highest",
    "queue_type": "auto",
    "auto_wlm": true
  },
  {
    "query_group": [],
    "query_group_wild_card": 0,
    "user_group": [],
    "user_group_wild_card": 0,
    "priority": "normal",
    "queue_type": "auto",
    "auto_wlm": true
  },
  {
    "short_query_queue": false
  }
]

我可以按照以下步骤将它复制到一个新的参数组,但如果可能的话,我想简化它。

  1. 将上述现有参数组中的 json 复制到 nodepad 编辑器
  2. 从此 json 中删除所有下一行和空格字符
  3. 更换所有双引号( " )用双引号反斜线( \\"
  4. 在我的本地创建下面的 json 文件,例如modify_pg.json
[
    {
        "ParameterName": "wlm_json_configuration",
        "ParameterValue": "<input_formatted_json_here>"
    }
]
  1. 用我的编辑器中的格式化文本替换上面的<input_formatted_json_here> (在上面的第 3 步中创建)
  2. 在 Redshift 中创建一个新的参数组,例如myclusterparametergroup
  3. 在 CLI 命令下运行以使用 json 文件修改此参数组的 WLM
aws redshift modify-cluster-parameter-group --parameter-group-name myclusterparametergroup --parameters file://modify_pg.json

下面是我的最终modify_pg.json文件,我可以在我的新参数组中使用它。 但是有没有办法简化这个?

[
    {
        "ParameterName": "wlm_json_configuration",
        "ParameterValue": "[{\"query_group\":[\"defaulton\",\"lab4on\"],\"query_group_wild_card\":0,\"user_group\":[],\"user_group_wild_card\":0,\"concurrency_scaling\":\"off\",\"priority\":\"normal\",\"queue_type\":\"auto\",\"auto_wlm\":true},{\"query_group\":[\"lab1\",\"lab2\",\"lab3normal\",\"lab4off\",\"lab5\",\"lab6reads\",\"defaultoff\"],\"query_group_wild_card\":0,\"user_group\":[],\"user_group_wild_card\":0,\"concurrency_scaling\":\"off\",\"priority\":\"normal\",\"queue_type\":\"auto\",\"auto_wlm\":true},{\"query_group\":[\"lab3highest\"],\"query_group_wild_card\":0,\"user_group\":[],\"user_group_wild_card\":0,\"concurrency_scaling\":\"off\",\"priority\":\"highest\",\"queue_type\":\"auto\",\"auto_wlm\":true},{\"query_group\":[\"lab3lowest\"],\"query_group_wild_card\":0,\"user_group\":[],\"user_group_wild_card\":0,\"concurrency_scaling\":\"off\",\"priority\":\"lowest\",\"queue_type\":\"auto\",\"auto_wlm\":true},{\"query_group\":[\"lab6writes\"],\"query_group_wild_card\":0,\"user_group\":[],\"user_group_wild_card\":0,\"concurrency_scaling\":\"off\",\"priority\":\"highest\",\"queue_type\":\"auto\",\"auto_wlm\":true},{\"query_group\":[],\"query_group_wild_card\":0,\"user_group\":[],\"user_group_wild_card\":0,\"priority\":\"normal\",\"queue_type\":\"auto\",\"auto_wlm\":true},{\"short_query_queue\":false}]"
    }
]

我已经为客户做过好几次了,你就快到了。 与使用 AWS CLI 修改 PG 的方式相同,您可以使用 AWS CLI 从现有 PG 中提取 JSON。

aws redshift describe-cluster-parameters ...

您将返回一个 JSON,其中包含指定 PG 的参数值。 然后只需将返回值修改为您需要的字符串格式即可。 这需要一些编程或脚本编写 - 我将使用 Linux 脚本编写,因为这是一个流行的选项。 您可能需要的命令行工具:

  • sed
  • tr
  • jq(此工具的标记行是“sed for json”)

您将遵循的过程类似于

  1. 使用 aws cli 提取参数
  2. 使用您想要的参数和您希望每个参数拥有的值创建 shell 变量。 jq 非常适合这个
  3. 如果需要,创建新的 PG
  4. 修改 JSON shell 变量以删除 \\n 和空格 - replacement_text=$(echo $wlm_configuration | sed -e 's/"/\\\\"/g' | tr -d '\\n ') 为 PG 创建顶级 JSON 作为shell 变量(与您的 modify_pg.json 相同)
  5. 运行 aws cli 以修改新的 PG - 通过使用选项在命令行上组合这两个 JSON: --parameters $(echo $modify_pg | tr -d '\\n ' | sed -e "s/<<WLM_CONFIGURATION>> /$replacement_text/g")

现在你可以在 python 中使用 boto3 或在 java 或 ... 这只是一个路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM