

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

# 使用快速重設 API 清空 Amazon Neptune 資料庫叢集
<a name="manage-console-fast-reset"></a>

Neptune 快速重設 REST API 可讓您快速輕鬆地重設 Neptune 圖形，同時刪除其所有資料。

您可以使用 [%db\$1reset](#manage-console-fast-reset-db-reset-magic) 行魔法，在 Neptune 筆記本內執行此操作。
+ 在大部分情況下，快速重設操作會在幾分鐘內完成。持續時間可能會略有不同，取決於啟動操作時叢集上的負載。
+ 快速重設操作不會產生額外的 I/O。
+ 快速重設後，儲存磁碟區大小不會縮小。相反地，會在插入新資料時重複使用儲存體。這表示快速重設操作前後所建立之快照的磁碟區大小將相同。使用快速重設操作前後建立的快照所還原叢集的磁碟區大小也會相同
+ 做為重設操作的一部分，資料庫叢集中的所有執行個體都會重新啟動。
**注意**  
在極少數情況下，這些伺服器重新啟動也可能導致叢集容錯移轉。

**重要**  
使用快速重設可能會中斷 Neptune 資料庫叢集與其他服務的整合。例如：  
快速重設會刪除資料庫中的所有串流資料，並完全重設串流。這表示若沒有新的組態，您的串流消費者可能不再運作。
快速重設會移除有關 Neptune ML 正在使用的 SageMaker AI 資源的所有中繼資料，包括任務和端點。它們會持續存在於 SageMaker AI 中，而且您可以繼續使用現有的 SageMaker AI 端點進行 Neptune ML 推論查詢，但 Neptune ML 管理 APIs 不再使用這些端點。
也會透過快速重設來整合 (例如與 ElasticSearch 的全文檢索搜索整合)，並且必須手動重新建立它們，然後才能再次使用。

**使用 API 刪除 Neptune 資料庫叢集中的所有資料**

1. 首先，您會產生一個記號，然後可以將其用來執行資料庫重設。此步驟旨在協助防止任何人意外重設資料庫。

   您可以透過將 `HTTP POST` 請求傳送至資料庫叢集的寫入器執行個體上的 `/system` 端點，來指定 `initiateDatabaseReset` 動作以執行此操作。

   使用 JSON 內容類型的 `curl` 命令是：

   ```
   curl -X POST \
     -H 'Content-Type: application/json' \
         https://your_writer_instance_endpoint:8182/system \
     -d '{ "action" : "initiateDatabaseReset" }'
   ```

   或者，使用 `x-www-form-urlencoded` 內容類型：

   ```
   curl -X POST \
     -H 'Content-Type: application/x-www-form-urlencoded' \
         https://your_writer_instance_endpoint:8182/system \
     -d 'action=initiateDatabaseReset '
   ```

   `initiateDatabaseReset` 請求會在其 JSON 回應中傳回重設記號，如下所示：

   ```
   {
     "status" : "200 OK",
     "payload" : {
       "token" : "new_token_guid"
     }
   }
   ```

   記號在發出後，有效期為一小時 (60 分鐘)。

   如果您將請求傳送到讀取器執行個體或狀態端點，Neptune 將擲回 `ReadOnlyViolationException`。

   如果您傳送多個 `initiateDatabaseReset` 請求，則只有最新產生的記號對第二個步驟有效，而您實際上在這個步驟中執行重設。

   如果伺服器在您的 `initiateDatabaseReset` 請求之後立即重新啟動，則產生的記號將變成無效，並且您需要傳送新請求以取得新記號。

1. 接下來，您會將 `performDatabaseReset` 請求與您從 `initiateDatabaseReset` 取回的記號一起傳送至資料庫叢集的寫入器執行個體上的 `/system` 端點。這會從資料庫叢集中刪除所有資料。

   使用 JSON 內容類型的 `curl` 命令是：

   ```
   curl -X POST \
     -H 'Content-Type: application/json' \
         https://your_writer_instance_endpoint:8182/system \
     -d '{
           "action" : "performDatabaseReset",
           "token" : "token_guid"
         }'
   ```

   或者，使用 `x-www-form-urlencoded` 內容類型：

   ```
   curl -X POST \
     -H 'Content-Type: application/x-www-form-urlencoded' \
         https://your_writer_instance_endpoint:8182/system \
     -d 'action=performDatabaseReset&token=token_guid'
   ```

   請求會傳回 JSON 回應。如果接受請求，則回應是：

   ```
   {
     "status" : "200 OK"
   }
   ```

   如果您傳送的記號與發出的記號不符，則回應如下所示：

   ```
   {
     "code" : "InvalidParameterException",
     "requestId":"token_guid",
     "detailedMessage" : "System command parameter 'token' : 'token_guid' does not match database reset token"
   }
   ```

   如果接受請求且開始重設，則伺服器會重新啟動並刪除資料。重設時，您無法將任何其他請求傳送至資料庫叢集。

## 使用快速重設 API 搭配 IAM-Auth
<a name="manage-console-fast-reset-iam-auth"></a>

如果您在資料庫叢集上啟用了 IAM 身分驗證，則可以使用 [awscurl](https://github.com/okigan/awscurl)，傳送使用 IAM-Auth 驗證的快速重設命令：

**使用 awscurl 搭配 IAM-Auth 傳送快速重設請求**

1. 正確設定 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 環境變數 (如果您使用的是臨時憑證，也會設定 `AWS_SECURITY_TOKEN`）。

1. `initiateDatabaseReset` 請求看起來像這樣：

   ```
   awscurl -X POST --service neptune-db "$SYSTEM_ENDPOINT" \
     -H 'Content-Type: application/json' --region us-west-2 \
     -d '{ "action" : "initiateDatabaseReset" }'
   ```

1. `performDatabaseReset` 請求看起來像這樣：

   ```
   awscurl -X POST --service neptune-db "$SYSTEM_ENDPOINT" \
     -H 'Content-Type: application/json' --region us-west-2 \
     -d '{ "action" : "performDatabaseReset" }'
   ```

## 使用 Neptune 工作台 `%db_reset` 行魔法重設資料庫叢集
<a name="manage-console-fast-reset-db-reset-magic"></a>

Neptune 工作台支援 `%db_reset` 行魔法，可讓您在 Neptune 筆記本中執行快速資料庫重設。

如果在沒有任何參數的情況下調用魔法，您會看到一個畫面，詢問您是否要刪除叢集中的所有資料，並顯示一個核取方塊，要求您確認在刪除叢集資料後將無法再使用該叢集資料。此時，您可以選擇繼續刪除資料，或取消操作。

更危險的選項是使用 `--yes` 或 `-y` 選項來調用 `%db_reset`，這會導致在沒有進一步提示的情況下執行刪除。

您還可以透過兩個步驟執行重設，就像 REST API 一樣：

```
%db_reset --generate-token
```

回應為：

```
{
  "status" : "200 OK",
  "payload" : {
    "token" : "new_token_guid"
  }
}
```

則執行：

```
%db_reset --token new_token_guid
```

回應為：

```
{
  "status" : "200 OK"
}
```

## 快速重設操作的常見錯誤代碼
<a name="manage-console-fast-reset-common-error-codes"></a>


| Neptune 錯誤代碼 | HTTP 狀態 | 訊息 | 範例 | 
| --- | --- | --- | --- | 
| `InvalidParameterException` | 400 | 系統命令參數 '*action*' 具有不支援的值 '*XXX*' | 參數無效 | 
| `InvalidParameterException` | 400 | 為以下動作提供了太多的值：*action* | 一個快速重設請求，其中具有多個使用標頭 'Content-type:application/x-www-form-urlencoded' 傳送的動作 | 
| `InvalidParameterException` | 400 | 重複欄位 'action' | 一個快速重設請求，其中具有多個使用標頭 'Content-Type: application/json' 傳送的動作 | 
| `MethodNotAllowedException` | 400 | 錯誤的路由：/*bad\$1endpoint* | 傳送至不正確端點的請求 | 
| `MissingParameterException` | 400 | 缺少必要參數：[action] | 快速重設請求未包含必要的 'action' 參數 | 
| `ReadOnlyViolationException` | 400 | 不允許在僅供讀取複本執行個體上進行寫入 | 快速重設請求已傳送至讀取器或狀態端點 | 
| `AccessDeniedException` | 403 | 缺少身分驗證字符 | 快速重設請求會在沒有正確簽章的情況下傳送至已啟用 IAM-Auth 的資料庫端點 | 
| `ServerShutdownException` | 500 | 資料庫重設正在進行中。請在叢集可用之後重試查詢。 | 當快速重設開始時，現有和傳入的 Gremlin/Sparql 查詢會失敗。 | 