

# 이벤트 메시지 구조
<a name="notification-content-structure"></a>

이벤트를 게시하기 위해 Amazon S3이 전송하는 알림 메시지는 JSON 형식입니다.

이벤트 알림 구성에 대한 일반 개요와 지침은 [Amazon S3 이벤트 알림](EventNotifications.md) 섹션을 참조하십시오.

이 예제는 이벤트 알림 JSON 구조의 *버전 2.1*을 보여줍니다. Amazon S3는 이 이벤트 구조의 *버전 2.1*, *2.2* 및 *2.3*을 사용합니다. Amazon S3는 리전 간 복제 이벤트 알림에 버전 2.2를 사용합니다. S3 수명 주기, S3 Intelligent-Tiering, 객체 ACL, 객체 태깅 및 객체 복원 삭제 이벤트에는 버전 2.3을 사용합니다. 이러한 버전에는 작업과 관련된 추가 정보가 포함되어 있습니다. 버전 2.2 및 2.3은 Amazon S3가 현재 다른 모든 이벤트 알림 유형에 사용하는 버전 2.1과 호환됩니다.

```
{  
   "Records":[  
      {  
         "eventVersion":"2.1",
         "eventSource":"aws:s3",
         "awsRegion":"us-west-2",
         "eventTime":"The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z) when Amazon S3 finished processing the request",
         "eventName":"The event type",
         "userIdentity":{  
            "principalId":"The unique ID of the IAM resource that caused the event"
         },
         "requestParameters":{  
            "sourceIPAddress":"The IP address where the request came from"
         },
         "responseElements":{  
            "x-amz-request-id":"The Amazon S3 generated request ID",
            "x-amz-id-2":"The Amazon S3 host that processed the request"
         },
         "s3":{  
            "s3SchemaVersion":"1.0",
            "configurationId":"The ID found in the bucket notification configuration",
            "bucket":{  
               "name":"The name of the bucket, for example, amzn-s3-demo-bucket",
               "ownerIdentity":{  
                  "principalId":"The Amazon retail customer ID of the bucket owner"
               },
               "arn":"The bucket Amazon Resource Name (ARN)"
            },
            "object":{  
               "key":"The object key name",
               "size":"The object size in bytes (as a number)",
               "eTag":"The object entity tag (ETag)",
               "versionId":"The object version if the bucket is versioning-enabled; null or not present if the bucket isn't versioning-enabled",
               "sequencer": "A string representation of a hexadecimal value used to determine event sequence; only used with PUT and DELETE requests"
            }
         },
         "glacierEventData": {
            "restoreEventData": {
               "lifecycleRestorationExpiryTime": "The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z), when the temporary copy of the restored object expires",
               "lifecycleRestoreStorageClass": "The source storage class for restored objects"
            }
         }
      }
   ]
}
```

이벤트 메시지 구조에 대한 다음 사항에 유의하십시오.
+ `eventVersion` 키 값에는 `major`.`minor` 형식의 메이저 및 마이너 버전이 포함됩니다.

  Amazon S3가 이전 버전과 호환되지 않는 이벤트 구조를 변경하는 경우 주 버전이 증가합니다. 여기에는 이미 존재하는 JSON 필드를 제거하거나 필드의 콘텐츠가 표시되는 방식(예: 날짜 형식)을 변경하는 것이 포함됩니다.

  Amazon S3이 이벤트 구조에 새 필드를 추가하는 경우 마이너 버전이 증가합니다. 이는 일부 또는 모든 기존 이벤트에 새 정보가 제공되는 경우 발생할 수 있습니다. 이는 새로 도입된 이벤트 유형에 대해서만 새 정보가 제공되는 경우에도 발생할 수 있습니다. 이벤트 구조의 새로운 마이너 버전과 호환성을 유지하려면 애플리케이션에서 새 필드를 무시하는 것이 좋습니다.

  새로운 이벤트 유형이 도입되었지만 그와 달리 이벤트 구조는 수정되지 않는 경우 이벤트 버전이 변경되지 않습니다.

  애플리케이션이 이벤트 구조의 구문을 올바로 분석할 수 있도록 메이저 버전 번호에 대해 같은 값인지 비교하는 것이 좋습니다. 애플리케이션이 예상하는 필드가 반드시 존재할 수 있도록 마이너 버전에 대해 크거나 같은 값인지 비교하는 것이 좋습니다.
+ `eventName` 키 값은 [이벤트 알림 유형](https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html) 목록을 참조하지만 `s3:` 접두사는 포함하지 않습니다.
+ `userIdentity` 키 값은 이벤트를 발생시킨 AWS Identity and Access Management(IAM) 리소스(사용자, 역할, 그룹 등)의 고유 ID를 참조합니다. 각 IAM 식별 접두사(예: AIDA, AROA, AGPA)의 정의 및 고유 식별자를 얻는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [고유 식별자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html##identifiers-unique-ids) 섹션을 참조하세요.
+ `responseElements`의 도움을 받아 요청을 추적하려는 경우 AWS Support 키 값을 유용하게 사용할 수 있습니다. `x-amz-request-id` 및 `x-amz-id-2` 모두 Amazon S3이 개별 요청을 추적하는 데 도움이 됩니다. 이러한 값은 이벤트를 시작한 요청에 대한 응답에서 Amazon S3가 반환하는 값과 동일합니다. 따라서 이러한 값을 사용하여 이벤트를 요청과 일치시킬 수 있습니다.
+ `s3` 키 값은 이벤트와 연관된 버킷 및 객체에 대한 정보를 제공합니다. 객체의 키 이름 값은 URL로 인코딩되어 있습니다. 예를 들어, `red flower.jpg`는 `red+flower.jpg`가 됩니다. (Amazon S3는 응답의 콘텐츠 유형으로 "`application/x-www-form-urlencoded`"를 반환합니다.)

  `ownerIdentity` 키 값은 버킷 소유자의 Amazon 소매(Amazon.com) 고객 ID에 해당합니다. 이 ID 값은 더 이상 사용되지 않으며 이전 버전과의 호환성을 위해서만 유지됩니다.
+ `sequencer` 키 값은 이벤트 시퀀스를 정의하는 방법을 제공합니다. 이벤트 알림은 이벤트가 발생한 순서대로 도착하지 않을 수 있습니다. 단, 객체를 생성(`PUT` 요청)하고 객체를 삭제하는 이벤트의 알림에는 `sequencer`가 포함됩니다. 이 값을 사용하여 주어진 객체 키에 대한 이벤트 순서를 결정할 수 있습니다.

  `sequencer` 문자열을 동일한 객체 키의 두 가지 이벤트 알림과 비교할 경우 `sequencer` 16진수 값이 더 큰 이벤트 알림이 나중에 발생한 이벤트입니다. 이벤트 알림을 사용하여 별도의 데이터베이스 또는 Amazon S3 객체의 인덱스를 관리할 경우 각 이벤트 알림을 처리할 때 `sequencer` 값을 비교하고 저장하는 것이 좋습니다.

  다음 사항에 유의하세요.
  + `sequencer` 키 값을 사용하여 서로 다른 객체 키의 이벤트 순서를 결정할 수는 없습니다.
  + `sequencer` 문자열의 길이는 다를 수 있습니다. 따라서 이러한 값을 비교하려면 먼저 더 짧은 값을 0으로 왼쪽 채움한 뒤 사전순 비교를 수행합니다.
+ `glacierEventData` 키 값은 `s3:ObjectRestore:Completed` 이벤트에 대해서만 표시됩니다.
+ `restoreEventData` 키 값에는 복원 요청과 관련된 속성이 포함되어 있습니다.
+ `replicationEventData` 키 값은 복제 이벤트에 대해서만 표시됩니다.
+ `intelligentTieringEventData` 키 값은 S3 Intelligent-Tiering 이벤트에만 표시됩니다.
+ `lifecycleEventData` 키 값은 S3 수명 주기 전환 이벤트에만 표시됩니다.

## 예제 메시지
<a name="notification-content-structure-examples"></a>

다음은 Amazon S3 이벤트 알림 메시지의 예입니다.

**Amazon S3 테스트 메시지**  
버킷에 이벤트 알림을 구성한 후 Amazon S3가 다음과 같은 테스트 메시지를 전송합니다.

```
1. {  
2.    "Service":"Amazon S3",
3.    "Event":"s3:TestEvent",
4.    "Time":"2014-10-13T15:57:02.089Z",
5.    "Bucket":"amzn-s3-demo-bucket",
6.    "RequestId":"5582815E1AEA5ADF",
7.    "HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE"
8. }
```

**참고**  
`s3:TestEvent` 메시지는 일반 S3 이벤트 알림과 다른 형식을 사용합니다. 앞에 표시된 `Records` 배열 구조를 사용하는 다른 이벤트 알림과 달리 테스트 이벤트는 직접 필드가 있는 단순화된 형식을 사용합니다. 이벤트 처리를 구현할 때 코드가 두 메시지 형식을 구분하고 올바르게 처리할 수 있는지 확인합니다.

**`PUT` 요청을 사용하여 객체를 생성할 때의 예제 메시지**  
다음은 Amazon S3에서 `s3:ObjectCreated:Put` 이벤트를 게시하기 위해 전송하는 메시지의 예입니다.

```
 1. {  
 2.    "Records":[  
 3.       {  
 4.          "eventVersion":"2.1",
 5.          "eventSource":"aws:s3",
 6.          "awsRegion":"us-west-2",
 7.          "eventTime":"1970-01-01T00:00:00.000Z",
 8.          "eventName":"ObjectCreated:Put",
 9.          "userIdentity":{  
10.             "principalId":"AIDAJDPLRKLG7UEXAMPLE"
11.          },
12.          "requestParameters":{  
13.             "sourceIPAddress":"172.16.0.1"
14.          },
15.          "responseElements":{  
16.             "x-amz-request-id":"C3D13FE58DE4C810",
17.             "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
18.          },
19.          "s3":{  
20.             "s3SchemaVersion":"1.0",
21.             "configurationId":"testConfigRule",
22.             "bucket":{  
23.                "name":"amzn-s3-demo-bucket",
24.                "ownerIdentity":{  
25.                   "principalId":"A3NL1KOZZKExample"
26.                },
27.                "arn":"arn:aws:s3:::amzn-s3-demo-bucket"
28.             },
29.             "object":{  
30.                "key":"HappyFace.jpg",
31.                "size":1024,
32.                "eTag":"d41d8cd98f00b204e9800998ecf8427e",
33.                "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
34.                "sequencer":"0055AED6DCD90281E5"
35.             }
36.          }
37.       }
38.    ]
39. }
```

