이벤트 메시지 구조 - Amazon Simple Storage Service

이벤트 메시지 구조

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

이벤트 알림 구성에 대한 일반 정보는 Amazon S3 이벤트 알림 섹션을 참조하세요.

이 예에서는 이벤트 알림 JSON 구조의 버전 2.2를 보여줍니다. Amazon S3는 이 이벤트 구조의 버전 2.12.2를 사용합니다. Amazon S3는 이러한 작업과 관련된 추가 정보가 포함된 교차 리전 복제 이벤트 알림에 버전 2.2를 사용합니다. 버전 2.2는 Amazon S3가 현재 다른 작업 유형에 사용하는 버전 2.1과 호환됩니다.

{ "Records":[ { "eventVersion":"2.2", "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 in bytes", "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" } } } ] }

이전 예제에 대해 다음을 참고하세요.

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

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

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

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

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

  • eventName이벤트 알림 유형 목록을 참조하지만 s3: 접두사는 포함하지 않습니다.

  • responseElements의 도움을 받아 요청을 추적하려는 경우 AWS Support 키 값을 유용하게 사용할 수 있습니다. 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 키에는 복원 요청과 관련된 속성이 포함되어 있습니다.

  • replicationEventData 키는 복제 이벤트에 대해서만 표시됩니다.

다음 예제는 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 이벤트 알림 메시지의 예입니다.

Amazon S3 테스트 메시지

버킷에 이벤트 알림을 구성하면 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" } } } ] }

각 IAM 식별 접두사(AIDA, AROA, AGPA 등)에 대한 자세한 내용은 IAM 사용 설명서에서 IAM 식별자를 참조하세요.