

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 를 사용하여 복원력 테스트 수행 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>

프로비저닝된 처리량 초과 예외 오류(HTTP 400)는 Kinesis 스트림의 요청 속도가 샤드 하나 이상의 처리량 제한을 초과할 때 발생합니다. 각 샤드에는 특정 읽기 및 쓰기 용량 제한이 있으며 이러한 제한을 초과하면 이 예외가 발생합니다. 이 예외가 발생하는 시나리오에는 데이터 수집 또는 소비의 급증, 처리 중인 데이터 볼륨에 대한 샤드 용량 부족 또는 파티션 키의 고르지 않은 배포가 포함됩니다.

**예외 처리에 대한 권장 사항**
+ 지수 백오프 및 재시도 메커니즘을 구현합니다.
+ 더 높은 처리량을 수용할 수 있도록 샤드 수를 늘립니다.
+ 파티션 키가 적절하게 배포되었는지 확인합니다.
+ 스트림 지표를 모니터링합니다.

또한 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)
+ ****설명****: 요청 속도가 샤드 용량 제한을 초과하는 시나리오를 시뮬레이션하고 애플리케이션의 스로틀링 및 조정 응답을 테스트합니다.

**파라미터**
+ **IAM 역할 ARN**: 애플리케이션이 Kinesis Data Streams 작업에 사용하는 역할입니다.
+ **작업**: 대상 작업: `PutRecord`, `PutRecords`, `GetRecords`.
+ **리소스 목록**: 특정 스트림 이름 또는 샤드 식별자입니다.
+ **기간**: 실험 기간(1분\$112시간)입니다. 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 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\$110분으로 시작합니다.

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`