

# IVS 지연 시간이 짧은 스트리밍과 함께 Amazon EventBridge 사용
<a name="eventbridge"></a>

Amazon EventBridge를 사용하여 Amazon Interactive Video Service(IVS) 스트림을 모니터링할 수 있습니다.

Amazon IVS는 스트림의 상태에 대한 변경 이벤트를 Amazon EventBridge로 전송합니다. 전송되는 모든 이벤트가 유효합니다. 다만 이벤트는 '최선의 노력'을 기준으로 전송됩니다. 즉, 다음을 보장하지 않습니다.
+ 이벤트 전송 - 지정된 이벤트(예: 스트림 시작)가 발생할 수는 있으나, Amazon IVS에서 이에 대응하는 변경 이벤트가 EventBridge로 전송이 되지 않을 수도 있습니다. 이벤트가 전송이 될 때까지 Amazon IVS는 수 시간동안 이벤트 전송을 시도합니다.
+ 전송되는 이벤트는 지정된 기간에 도착합니다. 최대 몇 시간 이전의 이벤트도 수신할 수 있습니다.
+ 순서대로 이벤트 전송 - 특히, 이벤트가 서로 짧은 간격 안에 전송되는 경우 이벤트 순서가 잘못될 수 있습니다. 예를 들어, 스트림 업을 보기 전에 스트림 다운이 나타날 수 있습니다.

이벤트가 누락되거나 늦거나 순서가 맞지 않는 경우는 드물지만 알림 이벤트의 순서나 존재 여부에 종속되는 비즈니스에 중요한 프로그램을 작성하는 경우 이러한 가능성을 염두에 두고 처리해야 합니다.

다음 이벤트 중 하나에 대한 Eventbridge 규칙을 생성할 수 있습니다.


| 이벤트 유형 | 이벤트 | 전송된 시간 | 
| --- | --- | --- | 
| IVS 스트림 상태 변경 | 세션 생성 | 채널 스트림 키를 성공적으로 사용하여 스트림 세션을 생성했습니다. 이 이벤트는 동영상이 처리되거나 뷰어에게 전달되기 전에 스트림을 초기화할 때 발생합니다. 이 이벤트는 스트림이 초기화되었지만 잘못된 구성이나 제한 위반 등으로 인해 라이브 스트리밍에 실패했는지 여부를 판단하는 데 도움이 될 수 있습니다. | 
| IVS 스트림 상태 변경 | 세션 종료 | 인코더의 연결이 끊어지고 Amazon IVS가 더 이상 비디오를 수신하지 않습니다. 이 이벤트는 인코더가 미디어 전송을 중지한 시기를 결정하는 데 도움이 될 수 있습니다. 멀티트랙 스트림의 경우 `code` 필드는 세션이 종료된 이유에 대한 추가 세부 정보를 제공할 수 있습니다. 자세한 내용은 [StreamEvent](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/API_StreamEvent.html) API 객체의 `code` 필드를 참조하세요.<br />참고: 인코더의 연결이 끊어지면 스트림 종료 이벤트 전에 세션 종료 이벤트가 올 수 있습니다. 이는 Amazon IVS가 여전히 비디오를 처리 중일 때 세션 종료 이벤트 후 시간이 약간 걸릴 수 있기 때문입니다. | 
| IVS 스트림 상태 변경 | 스트림 시작 | 스트림이 처리 중이며 시청자가 세그먼트를 볼 수 있습니다. 이 이벤트는 비디오 스트림이 처리되고 있으며 뷰어가 볼 수 있음을 나타냅니다. 이 이벤트는 스트림이 성공적으로 라이브 스트리밍되었는지 여부를 판단하는 데 도움이 될 수 있습니다. | 
| IVS 스트림 상태 변경 | 스트림 종료 | 스트림 처리가 중지되고 더 이상 시청자에 대한 비디오 세그먼트가 생성되지 않습니다. 이 이벤트는 스트림이 종료되고 시청자가 새로운 비디오 세그먼트를 사용할 수 없는 시기를 결정하는 데 도움이 될 수 있습니다. (세션 종료의 참고 사항도 참조하세요.) | 
| IVS 스트림 상태 변경 | 스트림 실패 | 처리 용량이 초과되었기 때문에 스트림이 처리되지 않고 사용할 수 없습니다. | 
| IVS 스트림 상태 변경 | 스트림 인수 | 기존 스트림이 인수되었습니다. | 
| IVS 스트림 상태 변경 | 스트림 인수 실패 | 기존 스트림을 인수하려는 시도가 거부되었습니다. code 필드는 스트림 인수가 실패한 이유에 대한 추가 세부 정보를 제공합니다. 몇 가지 값이 있습니다. 상세한 설명은 IVS 콘솔에서 제공되지만 IVS API 또는 EventBridge를 통해 전달되지는 않습니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/ivs/latest/LowLatencyUserGuide/eventbridge.html)  | 
| IVS 스트림 상태 변경 | 결핍 시작 | 스트림이 스트리머로부터 데이터를 수신하지 않습니다. 이때 스트림을 '결핍' 상태라고 합니다. | 
| IVS 스트림 상태 변경 | 결핍 종료 | 결핍 상태의 스트림이 스트리머로부터 데이터를 수신하기 시작하고 스트림은 다시 정상 상태가 됩니다. | 
| IVS 한도 위반 | 수집 비트 전송률 | 수신 스트림의 비트 전송률이 Amazon IVS 한도를 초과합니다. | 
| IVS 한도 위반 | 수집 해상도 | 수신 스트림의 해상도가 Amazon IVS 한도를 초과합니다. | 
| IVS 한도 위반 | 동시 브로드캐스트 | 동시에 스트리밍되는 총 채널 수가 Amazon IVS 한도를 초과합니다. | 
| IVS 한도 위반 | 동시 시청자 | 동시에 채널을 보는 총 시청자 수가 Amazon IVS 한도를 초과합니다. | 
| IVS 레코딩 상태 변경 | 레코딩 시작 | 스트림이 처리되기 시작하고 레코딩 접두사가 생성되고 검증됩니다. 세그먼트가 채널에 대해 구성된 스토리지 위치에 기록됩니다.<br />라이브 스트림이 시작되고 레코딩 시작 이벤트가 생성된 후 매니페스트 파일과 비디오 세그먼트가 채널에 구성된 S3 버킷에 기록되기까지 약간의 시간이 걸립니다. 레코딩 종료 이벤트가 전송된 후에만 레코딩된 스트림을 재생하거나 처리하는 것이 좋습니다. | 
| IVS 레코딩 상태 변경 | 레코딩 종료 | 이 채널에 대한 스트림이 종료되고 레코딩이 중지됩니다. | 
| IVS 레코딩 상태 변경 | 레코딩 시작 실패 | 스트림이 시작되지만 오류로 인해 레코딩이 시작되지 않습니다(예: S3 버킷이 없거나 올바른 리전에 없는 경우). 이 라이브 스트림은 레코딩되지 않습니다. | 
| IVS 레코딩 상태 변경 | 레코딩 종료 실패 | 레코딩 중에 발생한 오류로 인해 레코딩이 실패하고 종료됩니다(예: 마스터 재생 목록 작성 시도가 실패하는 경우). 일부 객체는 여전히 구성된 스토리지 위치에 기록될 수 있습니다. | 

**스트림 ID에 대한 참고 사항:** 많은 이벤트에서 `stream_id` 필드는 채널이 라이브로 방송될 때마다 지정되는 고유한 스트림 식별자입니다. 지정된 채널에서 각 라이브 스트림에는 새 `stream_id`가 있습니다. 따라서, 각 채널 ARN에는 대응하는 많은 스트림 ID가 있을 수 있습니다. 고객은 스트림 ID를 통해 동일한 채널에서 서로 다른 스트림 세션을 구분할 수 있습니다.

**일부 이벤트의 대기 시간에 대한 참고 사항:** 인코더 구성 설정, 특히 IDR/키프레임 간격은 스트림 시작 타이밍과 관련 이벤트의 지연 시간(스트림 시작 및 레코딩 시작)에 영향을 줍니다. 키프레임 간격이 짧을수록 이 지연 시간이 줄어듭니다. `IDR/Keyframe` 설정에 대한 자세한 내용은 *Amazon IVS 스트리밍 구성*의 ['지연 시간 단축'](streaming-config.md#streaming-config-reducing-latency)을 참조하세요.

## Amazon IVS에 대한 Amazon EventBridge 규칙 생성
<a name="eventbridge-creating-rules"></a>

Amazon IVS에서 생성되는 이벤트에서 트리거되는 규칙을 생성할 수 있습니다. *Amazon EventBridge 사용 설명서*의[Create a rule in Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) 단계를 따르세요. 서비스를 선택할 때 **Interactive Video Service(IVS)**를 선택합니다.

## 예제: 스트림 상태 변경
<a name="eventbridge-examples-stream-state-change"></a>

**세션 생성됨:** 이 이벤트는 채널 스트림 키를 성공적으로 사용하여 스트림 세션을 생성했을 때 전송됩니다.

```
{
   "version": "0",
   "id": "aa5b7a40-36cf-8dc4-5554-32d70e047215",
   "detail-type": "IVS Stream State Change",
   "source": "aws.ivs",
   "account": "535011710559",
   "time": "2024-09-09T16:17:26Z",
   "region": "us-east-1",
   "resources": [
      "arn:aws:ivs:us-west-2:535011710559:channel/UCGaMPGLCbcE"
   ],
   "detail": {
      "event_name": "Session Created",
      "channel_name": "",
      "stream_id": "st-1AuTyMDASvHUTSb8p5PvbsO"
   }
}
```

**세션 종료됨:** 이 이벤트는 인코더 연결이 해제되고 IVS가 더 이상 비디오를 수신하지 않을 때 전송됩니다.

```
{
   "version": "0",
   "id": "6f2723f3-ee31-9e48-b030-ac865e261a8e",
   "detail-type": "IVS Stream State Change",
   "source": "aws.ivs",
   "account": "535011710559",
   "time": "2024-09-09T16:17:26Z",
   "region": "us-east-1",
   "resources": [
      "arn:aws:ivs:us-west-2:535011710559:channel/UCGaMPGLCbcE"
   ],
   "detail": {
      "event_name": "Session Ended",
      "channel_name": "",
      "code": "MultitrackInputNotAllowed",
      "stream_id": "st-1AuTyMDASvHUTSb8p5PvbsO"
   }
}
```

**스트림 시작:** 이 이벤트는 스트림이 처리 중이며 시청자가 세그먼트를 볼 수 있는 경우 전송됩니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Stream State Change",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
     "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
   ],
   "detail": {
     "event_name": "Stream Start",
     "channel_name": "Your Channel",
     "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn"
   }
}
```

**스트림 종료:** 이 이벤트는 스트림 처리가 중지되고 더 이상 시청자에 대한 비디오 세그먼트가 생성되지 않는 경우 전송됩니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Stream State Change",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
     "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
   ],
   "detail": {
     "event_name": "Stream End",
     "channel_name": "Your Channel",
     "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn"
   }
}
```

**스트림 실패:** 이 이벤트는 처리 용량이 초과되었기 때문에 스트림이 처리되지 않고 사용할 수 없는 경우 전송됩니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Stream State Change",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
     "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
   ],
   "detail": {
     "event_name": "Stream Failure",
     "channel_name": "Your Channel",
     "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn",
     "reason": "Transcode capacity exceeded. Please try again."
   }
}
```

**스트림 인수:** 이 이벤트는 기존 스트림이 인수될 때 전송됩니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Stream State Change",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
      
"arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
],
   "detail": {
      "event_name": "Stream Takeover",
      "channel_name": "Your Channel",
      "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn"
   }
}
```

**스트림 인수 실패:** 이 이벤트는 기존 스트림을 인수하려는 시도가 거부될 때 전송됩니다. 이는 일치하지 않는 코덱/해상도/비디오 트랙 유형, 잘못된 우선순위 정수 또는 스트림당 최대 인수 횟수를 초과하기 때문일 수 있습니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Stream State Change",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [ 
       "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
],
   "detail": {
      "event_name": "Stream Takeover Failure",
      "channel_name": "Your Channel",
      "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn",
      "code": "StreamTakeoverInvalidPriority"
   }
}
```

## 예제: 스트림 상태 변경
<a name="eventbridge-examples-stream-health-change"></a>

**결핍 시작:** 이 이벤트는 스트림이 스트리머로부터 데이터를 수신하지 않는 경우 전송됩니다. 이때 스트림을 '결핍' 상태라고 합니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Stream Health Change",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
     "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
   ],
   "detail": {
     "event_name": "Starvation Start",
     "channel_name": "Your Channel",
     "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn"
   }
}
```

**결핍 종료:** 이 이벤트는 결핍 상태의 스트림이 스트리머로부터 데이터를 수신하기 시작하고 스트림은 다시 정상 상태가 되는 경우 전송됩니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Stream Health Change",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
     "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
   ],
   "detail": {
     "event_name": "Starvation End",
     "channel_name": "Your Channel",
     "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn"
   }
}
```

## 예제: 한도 위반
<a name="eventbridge-examples-limit-breach"></a>

모든 한도 위반 이벤트는 위반된 한도 이름, 한도 값 및 한도를 초과한 정도(위반 시 한도에 의해 차감된 값)가 포함됩니다.

**수집 비트 전송률:** 이 이벤트는 수신 스트림의 비트 전송률이 Amazon IVS 한도를 초과하는 경우 전송됩니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Limit Breach",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
     "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
   ],
   "detail": {
     "limit_name": "Ingest Bitrate",
     "limit_value": 1234,
     "exceeded_by": 3,
     "limit_unit": "bits per second",
     "channel_name": "Your Channel",
     "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn"
   }
}
```

**수집 해상도:** 이 이벤트는 수신 스트림의 해상도(총 픽셀 수 또는 엣지당 픽셀 수)가 Amazon IVS 한도를 초과하는 경우 전송됩니다.

최대 총 픽셀 수 초과됨:

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Limit Breach",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
      "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"
   ],
   "detail": {
      "limit_name": "Ingest Resolution",
      "limit_value": 495000,
      "exceeded_by": 426600,
      "limit_unit": "total pixels",
      "channel_name": "Your Channel",
      "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn"
   }
}
```

엣지당 최대 픽셀 수 초과됨:

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Limit Breach",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [
      "arn:aws:ivs:us-east-1:aws_account_id:channel/12345678-1a23-4567-a1bc-1a2b34567890"TBD
   ],
   "detail": {
      "limit_name": "Ingest Resolution",
      "limit_value": 855,
      "exceeded_by": 45,
      "limit_unit": "pixels per edge",
      "channel_name": "Your Channel",
      "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn"
   }
}
```

**동시 브로드캐스트:** 이 이벤트는 동시에 스트리밍되는 총 채널 수가 Amazon IVS 한도를 초과하는 경우 전송됩니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Limit Breach",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [],
   "detail": {
     "limit_name": "Concurrent Broadcasts",
     "limit_value": 2, 
     "exceeded_by": 3,
     "limit_unit": "active streams"
   }
}
```

**동시 시청자:** 이 이벤트는 동시에 채널을 보는 총 시청자 수가 Amazon IVS 한도를 초과하는 경우 전송됩니다.

```
{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "IVS Limit Breach",
   "source": "aws.ivs",
   "account": "aws_account_id",
   "time": "2017-06-12T10:23:43Z",
   "region": "us-east-1",
   "resources": [],
   "detail": {
     "limit_name": "Concurrent Viewers",
     "limit_value": 10,
     "exceeded_by": 11,
     "limit_unit": "viewers"
   }
}
```

## 예제: 레코딩 상태 변경
<a name="eventbridge-examples-recording-state-change"></a>

모든 레코딩 상태 변경 이벤트에 대해 이 라이브 스트림의 모든 객체가 저장되는 최상위 경로는 `recording_s3_key_prefix`입니다. 실패하는 경우 실패의 원인은 `recording_status_reason`입니다. `recording_duration_ms` 필드는 레코딩 지속 시간(밀리초)입니다.

**레코딩 시작:** 이 이벤트는 스트림이 처리되기 시작하고 세그먼트가 채널에 대해 구성된 스토리지 위치에 기록될 때 전송됩니다.

```
{
    "version": "0",
    "id": "12345678-1a23-4567-a1bc-1a2b34567890",
    "detail-type": "IVS Recording State Change",
    "source": "aws.ivs",
    "account": "123456789012",
    "time": "2020-06-23T20:12:36Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ivs:us-west-2:123456789012:channel/AbCdef1G2hij"
    ],
    "detail": {
        "channel_name": "Your Channel",
        "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn",
        "recording_status": "Recording Start",
        "recording_status_reason": "",
        "recording_s3_bucket_name": "r2s3-dev-channel-1-recordings",
        "recording_s3_key_prefix": "ivs/v1/123456789012/AbCdef1G2hij/2020/6/23/20/12/j8Z9O91ndcVs",
        "recording_duration_ms": 0,
        "recording_session_id": "a6RfV23ES97iyfoQ"
    }
}
```

**레코딩 종료:** 이 이벤트는 이 채널에 대한 스트림이 종료되고 레코딩이 중지되는 경우 전송됩니다.

```
{
    "version": "0",
    "id": "12345678-1a23-4567-a1bc-1a2b34567890",
    "detail-type": "IVS Recording State Change",
    "source": "aws.ivs",
    "account": "123456789012",
    "time": "2020-06-24T07:51:32Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ivs:us-west-2:123456789012:channel/AbCdef1G2hij"
    ],
    "detail": {
        "channel_name": "Your Channel",
        "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn",
        "recording_status": "Recording End",
        "recording_status_reason": "",
        "recording_s3_bucket_name": "r2s3-dev-channel-1-recordings",
        "recording_s3_key_prefix": "ivs/v1/123456789012/AbCdef1G2hij/2020/6/23/20/12/j8Z9O91ndcVs",
        "recording_duration_ms": 99370264,
        "recording_session_id": "a6RfV23ES97iyfoQ",
        "recording_session_stream_ids": ["st-254sopYUvi6F78ghpO9vn0A", "st-1A2b3c4D5e6F78ghij9Klmn"]
    }
}
```

**레코딩 시작 실패:** 이 이벤트는 스트림이 시작되지만 오류로 인해 레코딩이 시작되지 않는 경우(예: S3 버킷이 없거나 올바른 리전에 없는 경우) 전송됩니다. 이 라이브 스트림은 레코딩되지 않습니다.

```
{
    "version": "0",
    "id": "12345678-1a23-4567-a1bc-1a2b34567890",
    "detail-type": "IVS Recording State Change",
    "source": "aws.ivs",
    "account": "123456789012",
    "time": "2020-06-23T20:12:36Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ivs:us-west-2:123456789012:channel/AbCdef1G2hij"
    ],
    "detail": {
        "channel_name": "Your Channel",
        "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn",
        "recording_status": "Recording Start Failure",
        "recording_status_reason": "ValidationException",
        "recording_s3_bucket_name": "r2s3-dev-channel-1-recordings",
        "recording_s3_key_prefix": "",
        "recording_duration_ms": 0,
        "recording_session_id": "a6RfV23ES97iyfoQ"
    }
}
```

**레코딩 종료 실패:** 이 이벤트는 레코딩 중에 발생한 오류로 인해 레코딩이 실패하고 종료되는 경우 전송됩니다. 일부 객체는 여전히 구성된 스토리지 위치에 기록될 수 있습니다.

```
{
    "version": "0",
    "id": "12345678-1a23-4567-a1bc-1a2b34567890",
    "detail-type": "IVS Recording State Change",
    "source": "aws.ivs",
    "account": "123456789012",
    "time": "2020-06-24T07:51:32Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ivs:us-west-2:123456a7-ab1c-2d34-e5f6-1a2b3c4d5678"
    ],
    "detail": {
        "channel_name": "Your Channel",
        "stream_id": "st-1A2b3c4D5e6F78ghij9Klmn",
        "recording_status": "Recording End Failure",
        "recording_status_reason": "InternalServerException",
        "recording_s3_bucket_name": "r2s3-dev-channel-1-recordings",
        "recording_s3_key_prefix": "ivs/v1/123456789012/AbCdef1G2hij/2020/6/23/20/12/j8Z9O91ndcVs",
        "recording_duration_ms": 0,
        "recording_session_id": "a6RfV23ES97iyfoQ"
    }
}
```