

신중한 고려 끝에 Amazon Kinesis Data Analytics for SQL 애플리케이션을 중단하기로 결정했습니다.

1. **2025년 9월 1**일부터 Amazon Kinesis Data Analytics for SQL 애플리케이션에 대한 버그 수정은 제공되지 않습니다. 곧 중단될 예정이므로 지원이 제한될 예정이기 때문입니다.

2. **2025년 10월 15**일부터 새 Kinesis Data Analytics for SQL 애플리케이션을 생성할 수 없습니다.

3. **2026년 1월 27**일부터 애플리케이션이 삭제됩니다. Amazon Kinesis Data Analytics for SQL 애플리케이션을 시작하거나 작동할 수 없게 됩니다. 그 시점부터 Amazon Kinesis Data Analytics for SQL에 대한 지원을 더 이상 이용할 수 없습니다. 자세한 내용은 [Amazon Kinesis Data Analytics for SQL 애플리케이션 단종](discontinuation.md) 단원을 참조하십시오.

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

# 애플리케이션 출력 구성
<a name="how-it-works-output"></a>



애플리케이션 코드에서 SQL 문 출력을 하나 이상의 인애플리케이션 스트림에 씁니다. 필요에 따라 애플리케이션에 출력 구성을 추가할 수 있습니다.는 인애플리케이션 스트림에 기록된 모든 내용을 Amazon Kinesis 데이터 스트림, Firehose 전송 스트림 또는 AWS Lambda 함수와 같은 외부 대상으로 유지할 수 있습니다.

애플리케이션 출력을 유지하는 데 사용할 수 있는 외부 대상의 수에는 제한이 있습니다. 자세한 설명은 [한도](limits.md) 섹션을 참조하십시오.

**참고**  
오류를 조사할 수 있도록 하나의 외부 대상을 사용하여 애플리케이션 내 오류 스트림 데이터를 유지하는 것이 좋습니다.



이들 출력 구성 각각에 대해 다음을 제공합니다:
+ **애플리케이션 내 스트림 명칭** – 외부 목적지에 유지하고자 하는 스트림.

  Kinesis Data Analytics는 출력 구성에 지정된 애플리케이션 내 스트림을 탐색합니다. (이 스트림 명칭은 대/소문자를 구분하며 정확히 일치해야 합니다.) 애플리케이션 코드가 이 애플리케이션 내 스트림을 생성하는지 확인하십시오.
+ **외부 대상** – Kinesis 데이터 스트림, Firehose 전송 스트림 또는 Lambda 함수에 데이터를 유지할 수 있습니다. 스트림 또는 함수의 Amazon 리소스 이름(ARN)을 제공합니다. 또한 Kinesis Data Analytics가 귀하를 대신하여 스트림 또는 기능을 가질 수 있도록 수 IAM 역할을 줄 수 있습니다 외부 목적지에 작성할 때 사용할 레코드 형식(JSON, CSV)을 Kinesis Data Analytics에 기술합니다.

Kinesis Data Analytics가 스트리밍 또는 Lambda 목적지에 작성할 수 없을 경우에는 계속하여 무한정 시도합니다. 이로 인해 백 프레셔(back pressure)가 발생하여 애플리케이션이 뒤쳐지게 됩니다. 이 문제가 해결되지 않을 경우 결국 애플리케이션이 신규 데이터 처리를 중단합니다. [Amazon Kinesis Data Analytics 지표](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html)를 모니터링하고 장애에 대한 경보를 설정할 수 있습니다. 지표 및 경보에 대한 자세한 설명은 [Using Amazon CloudWatch 지표 사용](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)과 [Creating Amazon CloudWatch 경보 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)을 참조하십시오.

 AWS Management Console을(를) 사용하여 애플리케이션 출력을 구성할 수 있습니다. 콘솔은 API 호출을 통해 구성을 저장합니다.

## 를 사용하여 출력 생성 AWS CLI
<a name="how-it-works-output-cli"></a>

이 섹션에서는 `CreateApplication` 또는 `AddApplicationOutput` 작업에 대한 요청 본문의 `Outputs` 섹션을 생성하는 방법을 설명합니다.

### Kinesis 스트림 출력 생성
<a name="how-it-works-output-cli-streams"></a>

다음 JSON 조각은 Amazon Kinesis 데이터 스트림 목적지를 생성하기 위한 `CreateApplication` 요청 본문의 `Outputs` 섹션을 보여줍니다.

```
"Outputs": [
   {
       "DestinationSchema": {
           "RecordFormatType": "string"
       },
       "KinesisStreamsOutput": {
           "ResourceARN": "string",
           "RoleARN": "string"
       },
       "Name": "string"
   }
 
]
```

### Firehose 전송 스트림 출력 생성
<a name="how-it-works-output-cli-firehose"></a>

다음 JSON 조각은 Amazon Data Firehose 전송 스트림 대상을 생성하기 위한 `CreateApplication` 요청 본문의 `Outputs` 섹션을 보여줍니다.

```
"Outputs": [
   {
       "DestinationSchema": {
           "RecordFormatType": "string"
       },
       "KinesisFirehoseOutput": {
           "ResourceARN": "string",
           "RoleARN": "string"
       },
       "Name": "string"
   }
]
```

### Lambda 함수 출력 생성
<a name="how-it-works-output-cli-lambda"></a>

다음 JSON 조각은 AWS Lambda 함수 대상을 생성하기 위한 `CreateApplication` 요청 본문의 `Outputs` 섹션을 보여줍니다.

```
"Outputs": [
   {
       "DestinationSchema": {
           "RecordFormatType": "string"
       },
       "LambdaOutput": {
           "ResourceARN": "string",
           "RoleARN": "string"
       },
       "Name": "string"
   }
]
```

# Lambda 함수를 출력으로 사용
<a name="how-it-works-output-lambda"></a>

 AWS Lambda 를 대상으로 사용하면 SQL 결과를 최종 대상으로 보내기 전에 사후 처리를 보다 쉽게 수행할 수 있습니다. 일반적인 사후 처리 작업에는 다음이 포함됩니다.
+ 단일 레코드에 여러 행 집계
+ 현재 결과와 과거 결과를 결합하여 늦게 도착하는 데이터 처리
+ 정보의 유형에 따라 서로 다른 대상으로 전송
+ 레코드 형식 변환(예: Protobuf로 변환)
+ 문자열 조작 또는 변환
+ 분석 처리 후 데이터 강화
+ 지리 공간 사용 사례에 대한 맞춤 처리
+ 데이터 암호화

Lambda 함수는 다음을 포함하여 다양한 AWS 서비스 및 기타 대상에 분석 정보를 제공할 수 있습니다.
+ [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)
+ 맞춤 API
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/)
+ [Amazon Aurora](http://aurora.apache.org/)
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/)
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/)
+ [Amazon Simple Queue Service(Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/)
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/)

Lambda 애플리케이션 생성에 대한 자세한 설명은 [AWS Lambda로 시작하기](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) 섹션을 참조하십시오.

**Topics**
+ [출력 권한으로서 Lambda](#how-it-works-output-lambda-perms)
+ [출력 지표로서의 Lambda](#how-it-works-output-lambda-metrics)
+ [출력 이벤트 입력 데이터 모델 및 레코드 응답 모델로서 Lambda](#how-it-works-output-lambda-model)
+ [Lambda 출력 호출 빈도](#how-it-works-output-lambda-frequency)
+ [출력으로 사용할 Lambda 함수 추가](#how-it-works-output-lambda-procedure)
+ [일반적인 Lambda 출력 실패](#how-it-works-output-lambda-troubleshooting)
+ [애플리케이션 목적지용 Lambda 함수 생성](how-it-works-output-lambda-functions.md)

## 출력 권한으로서 Lambda
<a name="how-it-works-output-lambda-perms"></a>

Lambda를 출력으로 사용하려면 애플리케이션의 Lambda 출력 IAM 역할에 다음과 같은 권한 정책이 필요합니다:

```
{
   "Sid": "UseLambdaFunction",
   "Effect": "Allow",
   "Action": [
       "lambda:InvokeFunction",
       "lambda:GetFunctionConfiguration"
   ],
   "Resource": "FunctionARN"
}
```

## 출력 지표로서의 Lambda
<a name="how-it-works-output-lambda-metrics"></a>

Amazon CloudWatch를 사용하여 전송된 바이트 수, 성공 및 실패 등을 모니터링 할 수 있습니다. Kinesis Data Analytics에서 Lambda를 출력으로 사용하여 방출되는 CloudWatch 지표에 대한 자세한 설명은 [Amazon Kinesis Analytics 지표](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html)를 참조하십시오.

## 출력 이벤트 입력 데이터 모델 및 레코드 응답 모델로서 Lambda
<a name="how-it-works-output-lambda-model"></a>

Kinesis Data Analytics 출력 레코드를 전송하려면 Lambda 함수가 필수 이벤트 입력 데이터 및 레코드 응답 모델을 준수해야 합니다.

### 이벤트 입력 데이터 모델
<a name="how-it-works-output-lambda-model-request"></a>

Kinesis Data Analytics는 다음 요청 모델을 사용하여 애플리케이션의 출력 레코드를 출력 함수인 Lambda로 계속 전송합니다. 함수 내에서 목록을 반복하고 비즈니스 로직을 적용하여 출력 요구 사항(예: 최종 대상으로 전송하기 전에 데이터 변환)을 충족합니다.


| 필드 | 설명 | 
| --- | --- | 
| 필드 | 설명 | 
| --- | --- | 
| 필드 | 설명 | 
| --- | --- | 
| invocationId | Lambda 간접 호출 ID(임의의 GUID) | 
| applicationArn | Kinesis Data Analytics 애플리케이션 Amazon 리소스 이름(ARN). | 
| 레코드 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 
| recordId | 레코드 ID(임의 GUID) | 
| lambdaDeliveryRecordMetadata |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 
| 데이터 | Base64 인코딩된 출력 레코드 페이로드 | 
| retryHint | 전송 재시도 횟수 | 

**참고**  
`retryHint`는 전송이 실패할 때마다 증가하는 값입니다. 이 값은 영구적으로 유지되지 않으며 애플리케이션이 중단되면 재설정됩니다.

### 레코드 응답 모델
<a name="how-it-works-output-lambda-model-response"></a>

출력 함수인 Lambda로 전송된 각 레코드(레코드 ID 포함)는 `Ok` 또는 `DeliveryFailed`로 승인되어야 하며 다음 파라미터를 포함해야 합니다. 그렇지 않으면 Kinesis Data Analytics가 이를 전송 실패로 처리합니다.


| 필드 | 설명 | 
| --- | --- | 
| 레코드 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 
| recordId | 레코드 ID는 간접 호출 중에 Kinesis Data Analytics에서 Lambda로 전달됩니다. 원래 레코드의 ID와 승인된 레코드의 ID 간 불일치는 전송 실패로 처리됩니다. | 
| result | 레코드의 전송 상태입니다. 유효한 값은 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/how-it-works-output-lambda.html)  | 

## Lambda 출력 호출 빈도
<a name="how-it-works-output-lambda-frequency"></a>

Kinesis Data Analytics 애플리케이션은 출력 레코드를 버퍼링하고 AWS Lambda 목적지 함수를 빈번하게 간접 호출합니다.
+ 레코드가 데이터 분석 애플리케이션 내의 대상 인애플리케이션 스트림으로 텀블링 윈도우로 내보내지면 텀블링 윈도우 트리거당 AWS Lambda 대상 함수가 호출됩니다. 예를 들어 60초 텀블링 윈도우가 레코드를 목적지 애플리케이션 내 스트림으로 방출하는 데 사용되면 Lambda 함수가 60초에 한 번씩 간접 호출됩니다.
+ 레코드가 애플리케이션에서 연속 쿼리 또는 슬라이딩 윈도우로서 대상 애플리케이션 내 스트림으로 방출된 경우 약 1초에 한 번씩 Lambda 목적지 함수가 간접 호출됩니다.

**참고**  
[Lambda 함수 당 간접 호출 요청 페이로드 크기 한도](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)가 적용됩니다. 이러한 제한을 초과하면 출력 레코드가 분할되어 여러 Lambda 함수 호출로 전송됩니다.

## 출력으로 사용할 Lambda 함수 추가
<a name="how-it-works-output-lambda-procedure"></a>

다음 절차는 Lambda 함수를 Kinesis Data Analytics 애플리케이션의 출력으로 추가하는 방법을 보여 줍니다.

1. 에 로그인 AWS Management Console 하고 [ https://console.aws.amazon.com/kinesisanalytics](https://console.aws.amazon.com/kinesisanalytics) Managed Service for Apache Flink 콘솔을 엽니다.

1. 목록에서 애플리케이션을 선택한 다음 [**Application details**]를 선택합니다.

1. [**Destination**] 섹션에서 [**Connect new destination**]을 선택합니다.

1. [**Destination**] 항목에서 [**AWS Lambda function**]을 선택합니다.

1. **레코드를 AWS Lambda에 전송** 섹션에서 기존 Lambda 함수 및 버전을 선택하거나, 또는 **새로 만들기**를 선택합니다.

1. Lambda 함수를 새로 생성하는 경우에는 다음을 수행합니다:

   1. 제공된 템플릿 중 하나를 선택합니다. 자세한 설명은 [애플리케이션 목적지용 Lambda 함수 생성](how-it-works-output-lambda-functions.md) 섹션을 참조하십시오.

   1. 새 브라우저 탭에서 **함수 생성** 페이지가 열립니다. **명칭** 상자에서 함수에 의미 있는 명칭(예: **myLambdaFunction**)을 지정합니다.

   1. 애플리케이션의 사후 처리 기능으로 템플릿을 업데이트합니다. Lambda 함수 생성에 대한 자세한 설명은 *AWS Lambda 개발자 가이드*의 [시작하기](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)를 참조하십시오.

   1. Kinesis Data Analytics 콘솔의 **Lambda 함수** 목록에서, 방금 생성한 Lambda 함수를 선택합니다. Lambda 함수 버전의 경우 **\$1LATEST**를 선택합니다.

1. [**In-application stream**] 섹션에서 [**Choose an existing in-application stream**]을 선택합니다. [**In-application stream name**]에서 애플리케이션의 출력 스트림을 선택합니다. 선택한 출력 스트림의 결과는 Lambda 출력 함수로 전송됩니다.

1. 양식의 나머지 부분은 기본값으로 두고 [**Save and continue**]를 선택합니다.

이제 애플리케이션에서 애플리케이션 내 스트림의 레코드를 Lambda 함수로 전송합니다. Amazon CloudWatch 콘솔에서 기본 템플릿의 결과를 볼 수 있습니다. Lambda 함수에 전송되는 레코드 수를 보려면 `AWS/KinesisAnalytics/LambdaDelivery.OkRecords` 지표를 모니터링하십시오.

## 일반적인 Lambda 출력 실패
<a name="how-it-works-output-lambda-troubleshooting"></a>

다음은 Lambda 함수로 전송할 수 없는 일반적인 이유입니다.
+ Lambda 함수에 전송되는 배치 내의 일부 레코드(레코드 ID 포함)가 Kinesis Data Analytics 서비스에 반환 되지는 않습니다.
+ 응답에 레코드 ID 또는 상태 필드가 없습니다.
+ Lambda 함수 제한 시간이 Lambda 함수 내의 비즈니스 로직을 수행하는 데 충분하지 않습니다.
+ Lambda 함수 내의 비즈니스 로직은 모든 오류를 잡아내지 못하므로 처리되지 않은 예외로 인해 시간 초과 및 백 프레셔(back pressure)가 발생합니다. 이를 "독약" 메시지라고 하기도 합니다.

데이터 전송에 실패한 경우 Kinesis Data Analytics는 동일한 레코드 세트에 대해 Lambda 간접 호출을 성공할 때까지 계속 재시도합니다. 다음 CloudWatch 지표를 모니터링하여 실패의 원인을 알 수 있습니다: 
+ CloudWatch 출력 지표로서의 Kinesis Data Analytics 애플리케이션 Lambda: 다른 통계 중에서 성공 횟수와 실패 횟수를 나타냅니다. 자세한 설명은 [Amazon Kinesis Analytics 지표](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html)를 참조하십시오.
+ AWS Lambda 함수 CloudWatch 지표 및 로그.

# 애플리케이션 목적지용 Lambda 함수 생성
<a name="how-it-works-output-lambda-functions"></a>

Kinesis Data Analytics 애플리케이션은 AWS Lambda 함수를 출력으로 사용할 수 있습니다. Kinesis Data Analytics는 애플리케이션의 대상으로 사용할 Lambda 함수를 생성하기 위한 템플릿을 제공합니다. 이러한 템플릿은 애플리케이션에서 사후 처리 출력을 위한 시작점으로 사용합니다.

**Topics**
+ [Node.js에서 Lambda 함수 목적지 생성](#how-it-works-lambda-dest-nodejs)
+ [Python에서 Lambda 함수 목적지 생성](#how-it-works-lambda-dest-python)
+ [Java에서 Lambda 함수 목적지 생성](#how-it-works-lambda-dest-java)
+ [.NET에서 Lambda 함수 목적지 생성](#how-it-works-lambda-net)

## Node.js에서 Lambda 함수 목적지 생성
<a name="how-it-works-lambda-dest-nodejs"></a>

Node.js에서 Lambda 함수를 생성하는 다음 템플릿은 콘솔에서 사용할 수 있습니다:


| 출력 청사진으로서의 Lambda | 언어 및 버전 | 설명 | 
| --- | --- | --- | 
| kinesis-analytics-output | Node.js 12.x | Kinesis Data Analytics 애플리케이션의 출력 레코드를 맞춤 목적지로 전송합니다. | 

## Python에서 Lambda 함수 목적지 생성
<a name="how-it-works-lambda-dest-python"></a>

Python에서 목적지 Lambda 함수를 생성할 때 다음 템플릿은 콘솔에서 사용할 수 있습니다:


| 출력 청사진으로서의 Lambda | 언어 및 버전 | 설명 | 
| --- | --- | --- | 
| kinesis-analytics-output-sns | Python 2.7 | Kinesis Data Analytics 애플리케이션의 출력 기록을 Amazon SNS로 전송하십시오. | 
| kinesis-analytics-output-ddb | Python 2.7 | Kinesis Data Analytics 애플리케이션의 출력 기록을 Amazon DynamoDB로 전송하십시오. | 

## Java에서 Lambda 함수 목적지 생성
<a name="how-it-works-lambda-dest-java"></a>

Java에서 목적지 Lambda 함수를 생성하려면 [Java 이벤트](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events) 클래스를 사용합니다.

다음 코드는 Java를 사용한 목적지 Lambda 함수 예입니다:

```
public class LambdaFunctionHandler
        implements RequestHandler<KinesisAnalyticsOutputDeliveryEvent, KinesisAnalyticsOutputDeliveryResponse> {

    @Override
    public KinesisAnalyticsOutputDeliveryResponse handleRequest(KinesisAnalyticsOutputDeliveryEvent event,
            Context context) {
        context.getLogger().log("InvocatonId is : " + event.invocationId);
        context.getLogger().log("ApplicationArn is : " + event.applicationArn);

        List<KinesisAnalyticsOutputDeliveryResponse.Record> records = new ArrayList<KinesisAnalyticsOutputDeliveryResponse.Record>();
        KinesisAnalyticsOutputDeliveryResponse response = new KinesisAnalyticsOutputDeliveryResponse(records);

        event.records.stream().forEach(record -> {
            context.getLogger().log("recordId is : " + record.recordId);
            context.getLogger().log("record retryHint is :" + record.lambdaDeliveryRecordMetadata.retryHint);
            // Add logic here to transform and send the record to final destination of your choice.
            response.records.add(new Record(record.recordId, KinesisAnalyticsOutputDeliveryResponse.Result.Ok));
        });
        return response;
    }

}
```

## .NET에서 Lambda 함수 목적지 생성
<a name="how-it-works-lambda-net"></a>

.NET에서 목적지 Lambda 함수를 생성하려면 [.NET 이벤트](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents) 클래스를 사용합니다.

다음 코드는 C\$1을 사용한 목적지 Lambda 함수 예입니다:

```
public class Function
    {
        public KinesisAnalyticsOutputDeliveryResponse FunctionHandler(KinesisAnalyticsOutputDeliveryEvent evnt, ILambdaContext context)
        {
            context.Logger.LogLine($"InvocationId: {evnt.InvocationId}");
            context.Logger.LogLine($"ApplicationArn: {evnt.ApplicationArn}");

            var response = new KinesisAnalyticsOutputDeliveryResponse
            {
                Records = new List<KinesisAnalyticsOutputDeliveryResponse.Record>()
            };

            foreach (var record in evnt.Records)
            {
                context.Logger.LogLine($"\tRecordId: {record.RecordId}");
                context.Logger.LogLine($"\tRetryHint: {record.RecordMetadata.RetryHint}");
                context.Logger.LogLine($"\tData: {record.DecodeData()}");

                // Add logic here to send to the record to final destination of your choice.

                var deliveredRecord = new KinesisAnalyticsOutputDeliveryResponse.Record
                {
                    RecordId = record.RecordId,
                    Result = KinesisAnalyticsOutputDeliveryResponse.OK
                };
                response.Records.Add(deliveredRecord);
            }
            return response;
        }
    }
```

.NET에서 사전 처리 및 목적지 Lambda 함수 생성에 대한 자세한 설명은 [https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents)을 참조하십시오.

# 애플리케이션 출력을 외부 대상에 유지하기 위한 전송 모델
<a name="failover-checkpoint"></a>

Amazon Kinesis Data Analytics에서는 구성할 애플리케이션 출력에 대해 "최소 1회" 전송 모델을 적용합니다. 애플리케이션을 실행 중일 때 Kinesis Data Analytics에서는 내부 체크포인트를 사용합니다. 이러한 체크포인트는 출력 레코드가 데이터 손실 없이 대상으로 전송된 시점입니다. Kinesis Analytics에서는 필요에 따라 체크포인트를 사용하여 애플리케이션 출력이 구성된 대상으로 최소한 한번은 전달되도록 합니다.

정상적인 상황에서 애플리케이션은 들어오는 데이터를 지속적으로 처리합니다. Kinesis Data Analytics는 Kinesis 데이터 스트림 또는 Firehose 전송 스트림 같은 구성된 대상에 출력을 작성합니다. 하지만 애플리케이션은 경우에 따라 중단될 수 있습니다. 예:
+ 애플리케이션을 중단하고 나중에 재시작하도록 선택하는 경우.
+ Kinesis Data Analytics이 애플리케이션 출력을 구성된 목적지에 작성할 필요가 있는 IAM 역할을 삭제하는 경우. IAM 역할이 없다면 Kinesis Data Analytics는 귀하를 대신하여 외부 대상에 작성할 수 있는 권한이 없습니다.
+ 네트워크 중단 또는 기타 내부 서비스 결함으로 인해 애플리케이션의 실행이 일시적으로 중지됩니다.

애플리케이션이 다시 시작될 경우 Kinesis Data Analytics는 실패가 발생할 때 또는 그 이전 시점부터 출력을 계속 처리 및 기록합니다. 따라서 애플리케이션 출력이 구성된 대상으로 확실하게 전송됩니다.

동일한 애플리케이션 내 스트림에서 여러 대상을 구성했다고 가정해 보겠습니다. 애플리케이션이 실패에서 복구되면 Kinesis Data Analytics는 가장 느린 목적지로 전송된 마지막 레코드부터 구성된 목적지로 출력을 계속 유지합니다. 이렇게 할 경우 동일한 출력 레코드가 다른 목적지로 두 번 이상 전송될 수 있습니다. 이 경우 대상에서의 잠재적 중복을 외부적으로 처리해야 합니다.