

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# でレジリエンステストを実行する 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 actions](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 endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/fis.html) を参照してください。

# プロビジョンドスループット例外エラー
<a name="kinesis-fis-provisioned-throughput"></a>

Kinesis ストリームに対するリクエストレートが 1 つ以上のシャードのスループット制限を超えた場合、プロビジョンドスループット超過例外エラー (HTTP 400) が発生します。各シャードには読み取りおよび書き込みの容量制限があり、その制限を超えるとこの例外が発生します。この例外が発生する主なシナリオには、データインジェストまたは消費の急増、処理中のデータ量に対して不十分なシャード容量、またはパーティションキーの不均等な分散などがあります。

**例外の処理に関する推奨事項**
+ 指数バックオフと再試行メカニズムを実装します。
+ スループットの増加に対応できるように、シャード数を増やします。
+ パーティションキーが適切に分散されていることを確認します。
+ ストリームメトリクスをモニタリングします。

さらに、Kinesis のオンデマンドキャパシティモードを使用すると、ワークロードが自動的に調整され、この例外の発生を最小限に抑えることができます。詳細については、「[What is 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)
+ ****説明****: リクエストレートがシャードの容量制限を超えるシナリオをシミュレートし、アプリケーションのスロットリングおよびスケーリング応答をテストします。

**パラメータ**
+ **IAM ロール ARN**: アプリケーションが Kinesis Data Streams オペレーションに使用するロール。
+ **オペレーション**: ターゲットオペレーション: `PutRecord`、`PutRecords`、`GetRecords`。
+ **リソースリスト**: 特定のストリーム名またはシャード識別子。
+ **期間**: 実験期間。1 分から 12 時間です。 AWS FIS API では、値は ISO 8601 形式の文字列です。例えば、PT1M は 1 分を表します。 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 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 Streams オペレーションを指定します。

1. 期間を設定する: 初回テストでは 5〜10 分から開始します。

1. 停止条件の追加: [の停止条件 AWS FIS](https://docs.aws.amazon.com/fis/latest/userguide/stop-conditions.html)。

1. 実験を実行する: アプリケーションの動作をモニタリングします。

**アクションの詳細**
+ **リソースタイプ**: IAM ロール ARN
+ **ターゲットオペレーション**: `GetRecords`
+ ****エラーコード****: `ExpiredIteratorException`(HTTP 400)
+ ****説明****: 指定されたイテレーターが許可されている最大の有効期間を超えた場合に発生し、レコード処理が遅すぎる、またはチェックポイント処理ロジックが失敗するシナリオをシミュレートします。

**パラメータ**
+ **IAM ロール ARN**: アプリケーションが Kinesis Data Streams オペレーションに使用するロール。
+ **オペレーション**: ターゲットオペレーション: `GetRecords`
+ **リソースリスト**: 特定のストリーム名または ARN。
+ **期間**: 実験期間。これは設定可能です。
+ **強度: **スロットリングするリクエストの割合。

**必要なアクセス許可**
+ `kinesis:InjectApiError`