

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

# FIFO 주제 구독자를 위한 Amazon SNS 메시지 재생
<a name="message-archiving-and-replay-subscriber"></a>

Amazon SNS 재생 기능을 사용하면 주제 구독자가 주제 데이터 스토어에서 아카이브된 메시지를 검색하고 구독한 엔드포인트에 다시 전송할 수 있습니다.
+ 구독이 생성되는 즉시 메시지를 재생할 수 있습니다.
+ 재생된 메시지는 원본과 동일한 콘텐츠, `MessageId` 및 `Timestamp`를 유지합니다.
+ 메시지에는 재생된 메시지임을 나타내는 `Replayed` 속성이 포함되어 있습니다.
+ 특정 메시지만 재생하려는 경우 구독에 필터 정책을 적용할 수 있습니다.

메시지 필터링에 대한 자세한 내용은 [재생된 메시지 필터링](#message-archiving-and-replay-subscription-filtering) 섹션을 참조하세요.

## 를 사용하여 메시지 재생 정책 생성 AWS Management Console
<a name="message-archiving-and-replay-replaying-console"></a>

 AWS Management Console을 사용하여 새 재생 정책을 생성하려면 이 옵션을 사용합니다.

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 주제 구독을 선택하거나 새 주제 구독을 생성합니다. 구독 생성에 대한 자세한 내용은 [Amazon SNS 주제에서 구독 만들기](sns-create-subscribe-endpoint-to-topic.md) 섹션을 참조하세요.

1. 메시지 재생을 시작하려면 **재생** 드롭다운으로 이동하여 **재생 시작**을 선택합니다.

1. **재생 기간** 모달에서 다음과 같이 선택합니다.

   1. **재생 시작 날짜 및 시간 선택** - 아카이브된 메시지의 재생을 시작할 **날짜**(YYYY/MM/DD 형식)와 **시간**(24시간 hh:mm:ss 형식)을 선택합니다. 시작 시간은 대략적인 아카이브 시간의 시작 시간보다 이후여야 합니다.

   1. **(선택 사항) 재생 종료 날짜 및 시간 선택** - 아카이브된 메시지의 재생을 중지할 **날짜**(YYYY/MM/DD 형식)와 **시간**(24시간 hh:mm:ss 형식)을 선택합니다.

   1. **재생 시작**을 선택합니다.

1. (선택 사항) 메시지 재생을 **중지**하려면 **구독 세부 정보** 페이지로 이동한 다음 **재생** 드롭다운에서 **재생 중지**를 선택합니다.

1. (선택 사항) CloudWatch를 사용하여 이 워크플로 내에서 메시지 재생 지표를 **모니터링**하려면 [Amazon CloudWatch를 사용하여 메시지 재생 지표 모니터링](#message-archiving-and-replay-subscription-cloudwatch) 섹션을 참조하세요.

**메시지 재생 정책을 확인하고 편집하려면**

**구독 세부 정보** 페이지에서 다음 작업을 수행할 수 있습니다.
+ 메시지 재생 상태를 **확인**하려는 경우, **재생 상태** 필드에 다음 값이 표시됩니다.
  + **완료** - 재생 기능이 모든 메시지를 성공적으로 다시 전송했으며 이제 새로 게시된 메시지를 전송하고 있습니다.
  + **진행 중** - 현재 선택한 메시지가 재생 중입니다.
  + **실패** - 재생을 완료할 수 없습니다.
  + **보류 중** - 재생이 시작되는 동안의 기본 상태입니다.
+ (선택 사항) 메시지 재생 정책을 **수정**하려면 **구독 세부 정보** 페이지로 이동한 다음 **재생** 드롭다운에서 **재생 시작**을 선택합니다. 재생을 시작하면 기존 재생이 대체됩니다.

## API를 사용하여 구독에 재생 정책 추가
<a name="message-archiving-and-replay-subscription-api"></a>

아카이브된 메시지를 재생하려면 `ReplayPolicy` 속성을 사용합니다. `ReplayPolicy`는 `Subscribe` 및 `SetSubscriptionAttributes` API 작업과 함께 사용할 수 있습니다. 이 정책에는 다음 값이 포함되어 있습니다.
+ **`StartingPoint`**(필수) - 메시지 재생을 시작할 위치를 나타냅니다.
+ **`EndingPoint`**(선택 사항) - 메시지 재생을 중지할 시기를 나타냅니다. `EndingPoint`를 생략하면 현재 시간에 도달할 때까지 재생이 계속됩니다.
+ **`PointType`**(필수) - 시작점과 종료점의 유형을 설정합니다. 현재 `PointType`에 지원되는 값은 `Timestamp`입니다.

예를 들어 다운스트림 오류를 복구하고 2023년 10월 1일에 2시간 동안 모든 메시지를 다시 보내려면 `SetSubscriptionAttributes` API 작업을 사용하여 다음과 같이 `ReplayPolicy`를 설정합니다.

```
{
  "PointType":"Timestamp", 
  "StartingPoint":"2023-10-01T10:00:00.000Z", 
  "EndingPoint":"2023-10-01T12:00:00.000Z"
}
```

2023년 10월 1일 현재 주제에 전송된 모든 메시지를 재생하고 주제에 새로 게시된 모든 메시지를 계속 수신하려면 `SetSubscriptionAttributes` API 작업을 사용하여 다음과 같이 구독에 `ReplayPolicy`를 설정합니다.

```
{
  "PointType":"Timestamp",
  "StartingPoint":"2023-10-01T00:00:00.000Z"
}
```

메시지가 재생되었는지 확인하기 위해 재생된 각 메시지에 부울 속성 `Replayed`가 추가됩니다.

## SDK를 사용하여 구독에 재생 정책 추가
<a name="message-replay-sdk"></a>

 AWS SDK를 사용하려면 자격 증명으로 구성해야 합니다. 자세한 내용은 SDK [`config` 및 도구 참조 안내서의 공유 및 `credentials` 파일을](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) 참조하세요. * AWS SDKs *

다음 코드 예제는 2023년 10월 1일 2시간 동안 Amazon SNS FIFO 주제 아카이브에서 메시지를 재전송하도록 구독에 `ReplayPolicy`를 설정하는 방법을 보여줍니다.

```
// Specify the ARN of the Amazon SNS subscription to initiate the ReplayPolicy on.
String subscriptionArn =
    "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo:1d2a3e9d-7f2f-447c-88ae-03f1c68294da";

// Set the ReplayPolicy to replay messages from the topic's archive 
// for a 2 hour time period on October 1st 2023 between 10am and 12pm UTC.
String replayPolicy =
    "{\"PointType\":\"Timestamp\",\"StartingPoint\":\"2023-10-01T10:00:00.000Z\",\"EndingPoint\":\"2023-10-01T12:00:00.000Z\"}";

// Set the ArchivePolicy for the Amazon SNS topic
SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest()
    .withSubscriptionArn(subscriptionArn)
    .withAttributeName("ReplayPolicy")
    .withAttributeValue(replayPolicy);
sns.setSubscriptionAttributes(request);
```

## EndingPoint 이해
<a name="message-archiving-and-replay-understanding-endpoint"></a>

Amazon SNS 구독에 `ReplayPolicy`를 적용하는 경우 `EndingPoint` 값은 선택 사항입니다. `EndingPoint` 아무 것도 입력하지 않으면 재생은 지정된 `StartingPoint`에서 시작되어 새로 게시된 메시지 처리를 포함하여 현재 시간까지 계속됩니다. 일단 확인되면 구독은 일반 구독으로 작동하여 새 메시지가 게시될 때 수신됩니다.

`EndingPoint`가 지정되면 서비스는 `StartingPoint`에서 `EndingPoint`까지 메시지를 재생한 다음 중지합니다. **이 작업은 구독을 효과적으로 일시 중지합니다.** 구독이 일시 중지된 동안에는 새로 게시된 메시지가 구독된 엔드포인트로 전달되지 않습니다.

메시지 전송을 재개하려면 `EndingPoint`를 제공하지 않고 새 `ReplayPolicy`를 적용하고 `StartingPoint`가 메시지를 계속 수신할 원하는 시점으로 설정합니다. 예를 들어 이전 재생이 완료된 구독에서 구독을 재개하려면 새 `EndingPoint`를 이전에 제공된 `StartingPoint`로 설정합니다.

## 재생된 메시지 필터링
<a name="message-archiving-and-replay-subscription-filtering"></a>

Amazon SNS 메시지 필터링을 사용하면 Amazon SNS가 구독자 엔드포인트에 재생하는 재생된 메시지를 제어할 수 있습니다. 메시지 필터링과 메시지 보관이 모두 활성화된 경우 Amazon SNS는 먼저 주제의 데이터 스토어에서 메시지를 검색한 다음 구독의 `FilterPolicy`에 대해 메시지를 적용합니다. 일치하는 항목이 있으면 메시지가 구독된 엔드포인트로 전송되고 그렇지 않으면 메시지가 필터링됩니다. 자세한 내용은 [Amazon SNS 구독 필터 정책](sns-subscription-filter-policies.md) 섹션을 참조하세요.

## Amazon CloudWatch를 사용하여 메시지 재생 지표 모니터링
<a name="message-archiving-and-replay-subscription-cloudwatch"></a>

Amazon CloudWatch에서 다음 지표를 사용하여 재생 메시지를 모니터링할 수 있습니다. 워크로드의 이상 현상에 대한 알림을 받고 관련 영향을 방지하기 위해 이러한 지표에 Amazon CloudWatch 경보를 구성할 수 있습니다. 자세한 내용은 [Amazon SNS의 로깅 및 모니터링](sns-logging-monitoring.md) 섹션을 참조하세요.


| 지표 | 설명 | 
| --- | --- | 
|  **NumberOfReplayedNotificationsDelivered**  |  구독자에게 주제 아카이브에서 재생된 총 메시지 수를 1분 단위로 제공합니다.  | 
|  **NumberOfReplayedNotificationsFailed**   |  구독자에게 주제 아카이브에서 전송에 실패한 재생된 총 메시지 수를 1분 단위로 제공합니다.  | 