

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

# 使用 執行彈性測試 AWS Fault Injection Service
<a name="kinesis-fis"></a>

AWS Fault Injection Service 是一項全受管服務，可協助您在 AWS 工作負載上執行故障注入實驗。與 Amazon Kinesis Data Streams AWS FIS 整合可讓您針對受控環境中常見的 Amazon Kinesis Data Streams API 錯誤測試應用程式彈性。此功能可讓您在遇到失敗之前驗證錯誤處理、重試邏輯和監控系統。如需詳細資訊，請參閱[什麼是 AWS Fault Injection Service？](https://docs.aws.amazon.com/fis/latest/userguide/what-is.html)。

**動作**
+ API 內部錯誤：這會將內部錯誤注入目標 IAM 角色提出的請求中。特定回應取決於每個服務和 API。動作`aws:fis:inject-api-internal-error`會建立`InternalFailure`錯誤 (HTTP 500)。
+ API 調節錯誤：這會將內部錯誤注入目標 IAM 角色提出的請求中。特定回應取決於每個服務和 API。動作`aws:fis:inject-api-throttle-error`會建立`ThrottlingException`錯誤 (HTTP 400)。
+ API 無法使用錯誤：這會將內部錯誤注入目標 IAM 角色提出的請求中。特定回應取決於每個服務和 API。動作`aws:fis:inject-api-unavailable-error`會建立`ServiceUnavailable`錯誤 (HTTP 503)。
+ API 佈建輸送量例外狀況：這會將內部錯誤注入目標 IAM 角色提出的請求中。特定回應取決於每個服務和 API。動作`aws:kinesis:inject-api-provisioned-throughput-exception`會建立`ProvisionedThroughputExceededException`錯誤 (HTTP 400)。
+ API 過期迭代器例外狀況：這會將內部錯誤注入目標 IAM 角色提出的請求中。特定回應取決於每個服務和 API。動作`aws:kinesis:inject-api-expired-iterator-exception`會建立`ExpiredIteratorException`錯誤 (HTTP 400)。

如需詳細資訊，請參閱 [ Amazon Kinesis Data Streams 動作](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#aws-kinesis-actions)。

**考量事項**
+ 您可以對 Amazon Kinesis Data Streams 的佈建和隨需方案使用上述動作。
+ 一旦實驗完成，您的串流會根據選取的持續時間繼續。您也可以在實驗完成之前停止執行中的實驗。或者，您可以定義停止條件，根據在 Amazon CloudWatch Application Insights 中定義應用程式運作狀態的警示來停止實驗。
+ 您最多可以測試 280 個串流。

如需區域支援的詳細資訊，請參閱[AWS Fault Injection Service 端點和配額](https://docs.aws.amazon.com/general/latest/gr/fis.html)。

# 佈建輸送量例外狀況錯誤
<a name="kinesis-fis-provisioned-throughput"></a>

當 Kinesis 串流的請求速率超過一或多個碎片的輸送量限制時，會發生佈建輸送量超過例外狀況錯誤 (HTTP 400)。每個碎片都有特定的讀取和寫入容量限制，超過這些限制會觸發此例外狀況。導致此例外狀況的情況包括：資料擷取或耗用突然峰值、處理的資料磁碟區碎片容量不足，或分割區索引鍵分佈不均。

**處理例外狀況的建議**
+ 實作指數退避和重試機制。
+ 增加碎片數量以適應更高的輸送量。
+ 確保分割區索引鍵有適當的分佈。
+ 監控串流指標。

此外，使用 Kinesis 隨需容量模式有助於自動調整工作負載，並將此例外狀況的發生降至最低。如需詳細資訊，請參閱[什麼是 AWS Fault Injection Service？](https://docs.aws.amazon.com/fis/latest/userguide/what-is.html)

**注意**  
不當的分佈問題不在自動擴展的隨需模式功能範圍內。

**執行基本實驗**

1. 使用基準指標：在測試之前記錄正常輸送量模式。

1. 建立實驗：使用 `aws:kinesis:inject-api-provisioned-throughput-exception`動作。

1. 設定強度：從 25% 請求限流開始。

1. 監控回應：使用指數退避驗證重試邏輯。

1. 驗證擴展：確認自動擴展會觸發啟用。

1. 檢查警示：確保`CloudWatch`警示如預期般執行。

應用程式應實作適當的退避策略、監控 `WriteProvisionedThroughputExceeded`和 `ReadProvisionedThroughputExceeded`指標，並適時觸發碎片擴展。

**動作詳細資訊**
+ **資源類型**：IAM 角色 ARN
+ **目標操作**：`PutRecord`、`PutRecords`、 `GetRecords`
+ ****錯誤代碼****：`ProvisionedThroughputExceededException`(HTTP 400)
+ ****描述****：模擬請求率超過碎片容量限制、測試應用程式限流和擴展回應的情況。

**Parameters**
+ **IAM 角色 ARN**：您的應用程式用於 Kinesis Data Streams 操作的角色。
+ **操作**：目標操作：`PutRecord`、`PutRecords`、`GetRecords`。
+ **資源清單**：特定的串流名稱或碎片識別符。
+ **持續時間**：實驗持續時間，也就是從一分鐘到 12 小時的持續時間。在 AWS FIS API 中，值是 ISO 8601 格式的字串。例如，PT1M 代表一分鐘。在 AWS FIS 主控台中，您可以輸入秒數、分鐘數或小時數。
+ **強度**：要調節的請求百分比。

**所需的許可**
+ `kinesis:InjectApiError`

範例實驗範本

 下列範例顯示最多 5 個 Kinesis Data 串流具有指定標籤的所有請求的佈建輸送量例外狀況。 會隨機 AWS FIS 選取要影響的串流。5 分鐘後會移除故障。

```
{
    "description": "Kinesis stream experiment",
    "targets": {
        "KinesisStreams-Target-1": {
            "resourceType": "aws:kinesis:stream",
            "resourceTags": {
                   "tag-key": "tag-value"
            },
            "selectionMode": "COUNT(5)"
        }
    },
    "actions": {
         "kinesis": {
              "actionId": "aws:kinesis:stream-provisioned-throughput-exception",
              "description": "my-stream",
              "parameters": {
                   "duration": "PT5M",
                   "percentage": "100",
                   "service": "kinesis"
              },
              "targets": {
                    "KinesisStreams": "KinesisStreams-Target-1"
              }
         }
   },
   "stopConditions": [
         {
              "source": "none"
         }
   ],
   "roleArn": "arn:aws:iam::111122223333:role/role-name",
   "tags": {},
   "experimentOptions": {
       "accountTargeting": "single-account",
       "emptyTargetResolutionMode": "fail"
   }    
}
```

實驗角色許可範例

下列許可可讓您對影響 50% 請求的特定串流執行 `aws:kinesis:stream-provisioned-throughput-exception`和 `aws:kinesis:stream-expired-iterator-exception`動作。

# 迭代器例外錯誤已過期
<a name="kinesis-fis-expired-iterator"></a>

 過期的疊代運算例外錯誤 (HTTP 400) 會在碎片疊代運算過期時發生，而且不再用於在呼叫 時擷取串流記錄`GetRecords`。當讀取操作之間發生延遲，這是由於長時間執行的資料處理任務、網路問題或應用程式停機時間所造成。

**注意**  
碎片疊代運算在發出後 5 分鐘內有效。

**處理例外狀況的建議**
+ 在碎片迭代器過期之前重新整理碎片迭代器。
+ 整合錯誤處理以取得新的迭代器。
+ 使用 Kinesis Kinesis Client Library (KCL) 來自動管理碎片迭代器過期。

如需詳細資訊，請參閱[什麼是 AWS Fault Injection Service？](https://docs.aws.amazon.com/fis/latest/userguide/what-is.html)

**執行基本實驗**

1. 建立實驗範本：使用 AWS FIS 主控台。

1. 選取動作：使用 `aws:kinesis:inject-api-expired-iterator-exception`動作。

1. 設定目標：指定 IAM 角色和 Kinesis Data Streamsoperations。

1. 設定持續時間：從初始測試的 5-10 分鐘開始。

1. 新增停止條件：[停止條件 AWS FIS](https://docs.aws.amazon.com/fis/latest/userguide/stop-conditions.html)。

1. 執行實驗：監控應用程式行為。

**動作詳細資訊**
+ **資源類型**：IAM 角色 ARN
+ **目標操作**： `GetRecords`
+ ****錯誤代碼****：`ExpiredIteratorException`(HTTP 400)
+ ****描述****：提供的迭代器超過允許的最長存留期，模擬記錄處理太慢或檢查點邏輯失敗的案例。

**Parameters**
+ **IAM 角色 ARN**：您的應用程式用於 Kinesis Data Streams 操作的角色。
+ **操作**：目標操作： `GetRecords`
+ **資源清單**：特定的串流名稱或 ARNs。
+ **持續時間**：實驗持續時間。這是可設定的。
+ **強度**：要調節的請求百分比。

**所需的許可**
+ `kinesis:InjectApiError`