簡體   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