

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將政策套用至 Amazon MQ for RabbitMQ
<a name="rabbitmq-defaults-applying-policies"></a>

 您可以使用 Amazon MQ 建議的預設值來套用自訂政策和限制。如果您已刪除建議的預設政策和限制，並想要予以重建，或者您已建立其他虛擬主機並想要將預設政策和限制套用至新的虛擬主機，則可使用下列步驟。

**重要**  
 在 Amazon MQ for RabbitMQ 引擎 3.13 版及更新版本上，目前的預設運算子政策為：  

```
vhost name pattern apply-to definition priority/ default_operator_policy_AWS_managed .* classic_queues {"ha-mode":"all","ha-sync-mode":"automatic","queue-version":2} 0
```
 在 4.0 版及更高版本上，預設運算子政策已變更為：  

```
vhost name pattern apply-to definition priority/ default_operator_policy_AWS_managed .* classic_queues {"queue-version":2} 0
```
 由於 RabbitMQ 4 不支援傳統佇列鏡像和 HA 政策設定，因此需要此變更。  
 您無法建立同時套用至傳統鏡像佇列和規定人數佇列的政策。如果您希望政策僅適用於規定人數佇列，則必須將 `--apply-to`設定為 `quorum_queues`。如果您使用傳統鏡像佇列和規定人數佇列，則必須使用 建立單獨的政策`--apply-to:classic_queues`以及規定人數佇列政策。

**重要**  
 若要執行下列步驟，您必須擁有具管理員許可的 Amazon MQ for RabbitMQ 代理程式使用者。您可以使用第一次建立代理程式時建立的管理員使用者，或您之後可能建立的其他使用者。下表提供必要的管理員使用者標籤和許可作為規則表達式 (regexp) 模式。  


| Tags (標籤) | 讀取 regexp | 設定 regexp | 寫入 regexp | 
| --- | --- | --- | --- | 
| administrator | .\* | .\* | .\* | 
如需建立 RabbitMQ 使用者及管理使用者標籤和許可的詳細資訊，請參閱 [Amazon MQ for RabbitMQ 代理程式使用者](rabbitmq-simple-auth-broker-users.md#rabbitmq-basic-elements-user)。

**使用 RabbitMQ Web 主控台套用預設政策和虛擬主機限制**

1. 登入 [Amazon MQ 主控台](https://console.aws.amazon.com/amazon-mq/)。

1. 在左側導覽窗格中選擇 **Brokers (代理程式)**。

1. 從代理程式清單中，選擇您要套用新政策的代理程式名稱。

1. 在代理程式詳細資訊頁面的 **Connections (連線)** 區段中，選擇 **RabbitMQ web console (RabbitMQ Web 主控台)** URL。RabbitMQ Web 主控台會在新的瀏覽器索引標籤或視窗中開啟。

1. 使用您的代理程式管理員使用者名稱和密碼登入 RabbitMQ Web 主控台。

1. 在 RabbitMQ Web 主控台的頁面頂端，選擇 **Admin (管理員)**。

1. 在 **Admin (管理員)** 頁面的右側導覽窗格中，選擇 **Policies (政策)**。

1. 在 **Policies (政策)** 頁面上，您可看到代理程式目前的 **User policies (使用者政策)** 清單。在 **User policies (使用者政策)** 下方，展開 **Add / update a policy (新增/更新政策)**。

1. 若要建立新的代理程式政策，請在 **Add / update a policy (新增/更新政策)** 之下，執行下列操作：

   1. 針對 **Virtual host (虛擬主機)**，從下拉式清單中選擇您要附加政策的虛擬主機名稱。若要選擇預設虛擬主機，請選擇 **/**。
**注意**  
如果您尚未建立其他虛擬主機，**Virtual host (虛擬主機)** 選項不會顯示在 RabbitMQ 主控台中，而且政策只會套用至預設虛擬主機。

   1. 針對 **Name (名稱)**，輸入您的政策名稱，例如 **policy-defaults**。

   1. 針對 **Pattern (模式)**，輸入 regexp 模式 **.\***，以便政策符合代理程式上的所有佇列。

   1. 針對 **Apply to (套用至)**，從下拉式清單中選擇 **Exchanges and queues (交換和佇列}**。

   1. 對於 **Priority** (優先順序)，輸入大於套用至虛擬主機的所有其他策略的整數。您可以在任何指定的時間將一組政策定義套用至 RabbitMQ 佇列和交換。RabbitMQ 會選擇具有最高優先順序值的相符政策。如需政策優先順序及如何合併政策的詳細資訊，請參閱 RabbitMQ 伺服器文件中的[政策](https://www.rabbitmq.com/parameters.html#policies)。

   1. 針對 **Definition (定義)**，新增下列鍵值組：
      + **queue-mode**=**lazy**。從下拉式清單中選擇 **String (字串)**
      + **overflow**=**reject-publish**。從下拉式清單中選擇 **String (字串)**
**注意**  
不適用於單一執行個體的代理程式。
      + **max-length**=**{{number-of-messages}}**。根據代理程式的執行個體大小和部署模式，例如 **8000000** 適用於 `mq.m7g.large` 叢集，使用 [Amazon MQ 建議的值](rabbitmq-defaults.md#rabbitmq-defaults-values)取代 {{number-of-messages}}。從下拉式清單中選擇 **Number (數字)**。
**注意**  
不適用於單一執行個體的代理程式。

   1. 選擇 **Add / update policy (新增 / 更新政策)**。

1. 確認新政策出現在 **User policies (使用者政策)** 清單中。
**注意**  
對於叢集代理程式，Amazon MQ 會自動套用 `ha-mode: all` 和 `ha-sync-mode: automatic` 政策定義。

1. 從右側導覽窗格中，選擇 **Limits (限制)**。

1. 在 **Limits (限制)** 頁面上，您可看到代理程式目前的 **Virtual host limits (虛擬主機限制)** 清單。在 **Virtual host limits (虛擬主機限制)** 下方，展開 **Set / update a virtual host limit (設定 / 更新虛擬主機限制)**。

1. 若要建立新的虛擬主機限制，請在 **Set / update a virtual host limit (設定 / 更新虛擬主機限制)** 之下，請執行下列動作：

   1. 針對 **Virtual host (虛擬主機)**，從下拉式清單中選擇您要附加政策的虛擬主機名稱。若要選擇預設虛擬主機，請選擇 **/**。

   1. 針對 **Limit (限制)**，從下拉式選項中選擇 **max-connections**。

   1. 針對 **Value (值)**，根據代理程式的執行個體大小和部署模式，例如 **15000** 適用於 `mq.m5.large` 叢集，輸入 [Amazon MQ 建議的值](rabbitmq-defaults.md#rabbitmq-defaults-values)。

   1. 選擇 **Set / update limit (設定/更新限制)**。

   1. 重複上述步驟，並針對 **Limit (限制)**，從下拉式選項中選擇 **max-queues**。

1. 確認新的限制會出現在 **Virtual host limits (虛擬主機限制)** 清單中。

**使用 RabbitMQ 管理 API 套用預設政策和虛擬主機限制**

1. 登入 [Amazon MQ 主控台](https://console.aws.amazon.com/amazon-mq/)。

1. 在左側導覽窗格中選擇 **Brokers (代理程式)**。

1. 從代理程式清單中，選擇您要套用新政策的代理程式名稱。

1. 在代理程式頁面的 **Connections (連線)** 區段中，記下 **RabbitMQ web console (RabbitMQ Web 主控台)** URL。這是您在 HTTP 請求中使用的代理程式端點。

1. 開啟新的終端機或您所選的命令列視窗。

1. 若要建立新的代理程式政策，請輸入下列 `curl` 命令。此命令會假設預設 `/` 虛擬主機上的佇列，其編碼為 `%2F`。若要將策略套用至其他虛擬主機，請將 `%2F` 替換為虛擬主機的名稱。
**注意**  
以您的管理員登入憑證取代{{使用者名稱}}和{{密碼}}。根據代理程式的執行個體大小和部署模式，使用 [Amazon MQ 建議的值](rabbitmq-defaults.md#rabbitmq-defaults-values)取代 {{number-of-messages}}。以您的政策名稱取代 {{policy-name}}。以您先前記下的 URL 取代 {{broker-endpoint}}。

   ```
   curl -i -u {{username}}:{{password}} -H "content-type:application/json" -XPUT \
   -d '{"pattern":".*", "priority":1, "definition":{"queue-mode":lazy, "overflow":"reject-publish", "max-length":"{{number-of-messages}}"}}' \
   {{broker-endpoint}}/api/policies/%2F/{{policy-name}}
   ```

1. 若要確認新政策已新增至代理程式的使用者政策，請輸入下列 `curl` 命令以列出所有代理程式政策。

   ```
   curl -i -u {{username}}:{{password}} {{broker-endpoint}}/api/policies
   ```

1. 若要建立新的 `max-connections` 虛擬主機限制，請輸入下列 `curl` 命令。此命令會假設預設 `/` 虛擬主機上的佇列，其編碼為 `%2F`。若要將策略套用至其他虛擬主機，請將 `%2F` 替換為虛擬主機的名稱。
**注意**  
以您的管理員登入憑證取代{{使用者名稱}}和{{密碼}}。根據代理程式的執行個體大小和部署模式，使用 [Amazon MQ 建議的值](rabbitmq-defaults.md#rabbitmq-defaults-values)取代 {{max-connections}}。以您先前記下的 URL 取代代理程式端點。

   ```
   curl -i -u {{username}}:{{password}} -H "content-type:application/json" -XPUT \
   -d '{"value":"{{number-of-connections}}"}' \
   {{broker-endpoint}}/api/vhost-limits/%2F/max-connections
   ```

1. 若要建立新的 `max-queues` 虛擬主機限制，請重複前一步，但如以下所示修改 curl 命令。

   ```
   curl -i -u {{username}}:{{password}} -H "content-type:application/json" -XPUT \
   -d '{"value":"{{number-of-queues}}"}' \
   {{broker-endpoint}}/api/vhost-limits/%2F/max-queues
   ```

1. 若要確認新限制已新增至代理程式的虛擬主機限制，請輸入以下 `curl` 命令來列出所有代理程式虛擬主機限制。

   ```
   curl -i -u {{username}}:{{password}} {{broker-endpoint}}/api/vhost-limits
   ```