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

이벤트 메시지 구조

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

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

이 예에서는 이벤트 알림 JSON 구조의 버전 2.2를 보여줍니다. Amazon S3는 이 이벤트 구조의 버전 2.1, 2.22.3을 사용합니다. Amazon S3는 리전 간 복제 이벤트 알림에 버전 2.2를 사용합니다. S3 수명 주기, S3 Intelligent-Tiering, 객체 ACL, 객체 태깅 및 객체 복원 삭제 이벤트에는 버전 2.3을 사용합니다. 이러한 버전에는 작업과 관련된 추가 정보가 포함되어 있습니다. 버전 2.2 및 2.3은 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: 접두사는 포함하지 않습니다.

  • 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 키에는 복원 요청과 관련된 속성이 포함되어 있습니다.

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

  • intelligentTieringEventData 키는 S3 Intelligent-Tiering 이벤트에만 표시됩니다.

  • lifecycleEventData 키는 S3 수명 주기 전환 이벤트에만 표시됩니다.

예제 메시지

다음은 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 식별자를 참조하십시오.