Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

이벤트 메시지 구조

이벤트를 게시하기 위해 Amazon S3가 전송하는 알림 메시지는 JSON 형식입니다. 다음 예제는 JSON 메시지의 구조를 보여 줍니다.

이 예에 대해 다음을 참조하십시오.

  • eventVersion 키 값에는 <major>.<minor> 형식의 메이저 및 마이너 버전이 포함됩니다.

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

    Amazon S3가 이벤트 구조에 새 필드를 추가하는 경우 마이너 버전이 증가합니다. 일부 또는 모든 기존 이벤트에 새로운 정보가 공급되거나 완전히 새롭게 도입된 이벤트 유형에 새로운 정보가 공급되는 경우 이러한 경우가 발생할 수 있습니다. 애플리케이션은 새로운 필드를 무시하여 이벤트 구조의 새로운 마이너 버전의 이후 버전과 호환성을 유지해야 합니다.

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

    애플리케이션이 이벤트 구조의 구문을 올바로 분석할 수 있도록 메이저 버전 번호에 대해 같은 값인지 비교하는 것이 좋습니다. 애플리케이션이 예상하는 필드가 반드시 존재할 수 있도록 마이너 버전에 대해 크거나 같은 값인지 비교하는 것이 좋습니다.

     

  • AWS Support의 도움을 받아 요청을 추적하려는 경우 responseElements 키 값을 유용하게 사용할 수 있습니다. x-amz-request-idx-amz-id-2 모두 Amazon S3가 개별 요청을 추적하는 데 도움이 됩니다. 이러한 값은 이벤트를 시작한 요청에 대한 응답에서 Amazon S3가 반환하는 값과 동일하므로 이벤트를 요청과 일치시키는 데 사용할 수 있습니다.

     

  • s3 키는 이벤트와 연관된 버킷 및 객체에 대한 정보를 제공합니다. 객체의 키 이름 값은 URL로 인코딩되어 있습니다. 예를 들어 "red flower.jpg"는 "red+flower.jpg"가 됩니다(Amazon S3는 응답의 콘텐츠 유형으로 "application/x-www-form-urlencoded"를 반환함).

     

  • sequencer 키는 이벤트 시퀀스를 정의하는 방법을 제공합니다. 이벤트 알림은 반드시 이벤트가 발생한 순서로 도착하지는 않습니다. 하지만 객체를 생성하고(PUT) 객체를 삭제하는 이벤트에는 sequencer가 포함되며, 이는 특정 객체 키에 대한 이벤트의 순서를 정의하는 데 사용할 수 있습니다.

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

    다음을 참조하십시오.

    • sequencer는 다른 객체 키의 이벤트에 대한 순서를 정의하는 데 사용할 수 없습니다.

    • 시퀀서는 길이가 서로 다를 수 있습니다. 따라서 이러한 값을 비교하려면 먼저 좌측 패드를 통해 짧은 값을 0으로 채운 후 사전식 순서 비교를 수행합니다.

     

  • glacierEventData 키는 s3:ObjectRestore:Completed 이벤트에 대해서만 표시됩니다.

     

  • restoreEventData 키에는 복원 요청과 관련된 속성이 포함되어 있습니다.

다음 예제는 2.1 버전의 이벤트 메시지 JSON 구조(현재 Amazon S3에서 사용 중인 버전)를 보여 줍니다.

{ "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":"event-type", "userIdentity":{ "principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event" }, "requestParameters":{ "sourceIPAddress":"ip-address-where-request-came-from" }, "responseElements":{ "x-amz-request-id":"Amazon S3 generated request ID", "x-amz-id-2":"Amazon S3 host that processed the request" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"ID found in the bucket notification configuration", "bucket":{ "name":"bucket-name", "ownerIdentity":{ "principalId":"Amazon-customer-ID-of-the-bucket-owner" }, "arn":"bucket-ARN" }, "object":{ "key":"object-key", "size":object-size, "eTag":"object eTag", "versionId":"object version if bucket is versioning-enabled, otherwise null", "sequencer": "a string representation of a hexadecimal value used to determine event sequence, only used with PUTs and DELETEs" } }, "glacierEventData": { "restoreEventData": { "lifecycleRestorationExpiryTime": "The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z, of Restore Expiry", "lifecycleRestoreStorageClass": "Source storage class for restore" } } } ] }

다음 예제는 2.0 버전의 이벤트 메시지 구조(더 이상 Amazon S3에서 사용하지 않는 버전)를 보여 줍니다.

{ "Records":[ { "eventVersion":"2.0", "eventSource":"aws:s3", "awsRegion":"us-west-2", "eventTime":The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z, when S3 finished processing the request, "eventName":"event-type", "userIdentity":{ "principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event" }, "requestParameters":{ "sourceIPAddress":"ip-address-where-request-came-from" }, "responseElements":{ "x-amz-request-id":"Amazon S3 generated request ID", "x-amz-id-2":"Amazon S3 host that processed the request" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"ID found in the bucket notification configuration", "bucket":{ "name":"bucket-name", "ownerIdentity":{ "principalId":"Amazon-customer-ID-of-the-bucket-owner" }, "arn":"bucket-ARN" }, "object":{ "key":"object-key", "size":object-size, "eTag":"object eTag", "versionId":"object version if bucket is versioning-enabled, otherwise null", "sequencer": "a string representation of a hexadecimal value used to determine event sequence, only used with PUTs and DELETEs" } } } ] }

다음은 예제 메시지입니다.

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

    { "Service":"Amazon S3", "Event":"s3:TestEvent", "Time":"2014-10-13T15:57:02.089Z", "Bucket":"bucketname", "RequestId":"5582815E1AEA5ADF", "HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE" }
  • PUT 요청으로 생성된 객체에 대한 예제 메시지의 다음 메시지는 Amazon S3가 s3:ObjectCreated:Put 이벤트를 게시하기 위해 전송하는 메시지 예제입니다.

    { "Records":[ { "eventVersion":"2.1", "eventSource":"aws:s3", "awsRegion":"us-west-2", "eventTime":"1970-01-01T00:00:00.000Z", "eventName":"ObjectCreated:Put", "userIdentity":{ "principalId":"AIDAJDPLRKLG7UEXAMPLE" }, "requestParameters":{ "sourceIPAddress":"127.0.0.1" }, "responseElements":{ "x-amz-request-id":"C3D13FE58DE4C810", "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"testConfigRule", "bucket":{ "name":"mybucket", "ownerIdentity":{ "principalId":"A3NL1KOZZKExample" }, "arn":"arn:aws:s3:::mybucket" }, "object":{ "key":"HappyFace.jpg", "size":1024, "eTag":"d41d8cd98f00b204e9800998ecf8427e", "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko", "sequencer":"0055AED6DCD90281E5" } } } ] }