기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
S3 이벤트 알림 사용
Amazon S3는 버킷의 활동을 모니터링하는 데 도움이 되도록 특정 이벤트가 발생할 때 알림을 전송할 수 있습니다. Amazon S3 사용 설명서는 버킷이 전송할 수 있는 알림에 대한 정보를 제공합니다.
SDKfor Java를 사용하여 가능한 네 개의 목적지로 이벤트를 전송하도록 버킷을 설정할 수 있습니다.
-
Amazon Simple Notification Service(Amazon SNS) 주제
-
Amazon Simple Queue Service 대기열
-
AWS Lambda 함수
-
아마존 EventBridge
이벤트를 전송할 버킷을 설정하면 동일한 이벤트를 여러 대상으로 팬아웃하도록 EventBridge 규칙을 구성할 수 있습니다. EventBridge 처음 세 대상 중 하나로 직접 전송하도록 버킷을 구성하는 경우 각 이벤트에 대상 유형을 하나만 지정할 수 있습니다.
다음 섹션에서는 SDK for Java를 사용하여 두 가지 방법, 즉 Amazon SQS 대기열에 직접 전송하거나 다음으로 S3 이벤트 알림을 보내도록 버킷을 구성하는 방법을 살펴보겠습니다 EventBridge.
마지막 섹션에서는 S3 이벤트 알림을 API 사용하여 객체 지향 방식으로 알림을 처리하는 방법을 보여줍니다.
대상으로 직접 전송하도록 버킷을 구성합니다.
다음 예제는 버킷에 대해 객체 생성 이벤트 또는 객체 태깅 이벤트가 발생할 때 알림을 보내도록 버킷을 구성합니다.
static void processS3Events(String bucketName, String queueArn) { // Configure the bucket to send Object Created and Object Tagging notifications to an existing SQS queue. s3Client.putBucketNotificationConfiguration(b -> b .notificationConfiguration(ncb -> ncb .queueConfigurations(qcb -> qcb .events(Event.S3_OBJECT_CREATED, Event.S3_OBJECT_TAGGING) .queueArn(queueArn))) .bucket(bucketName) ); }
위에 표시된 코드는 두 가지 유형의 이벤트를 수신하도록 대기열 하나를 설정합니다. 이 queueConfigurations
방법을 사용하면 필요한 경우 대기열 대상을 여러 개 설정할 수 있어 편리합니다. 또한 notificationConfiguration
메서드에서 하나 이상의 Amazon SNS 주제 또는 하나 이상의 Lambda 함수와 같은 추가 대상을 설정할 수 있습니다. 다음 스니펫은 대기열 2개와 대상 유형 3개로 구성된 예를 보여줍니다.
s3Client.putBucketNotificationConfiguration(b -> b .notificationConfiguration(ncb -> ncb .queueConfigurations(qcb -> qcb .events(Event.S3_OBJECT_CREATED, Event.S3_OBJECT_TAGGING) .queueArn(queueArn), qcb2 -> qcb2.
<...>
) .topicConfigurations(tcb -> tcb.<...>
) .lambdaFunctionConfigurations(lfcb -> lfcb.<...>
)) .bucket(bucketName) );
Code Examples GitHub 리포지토리에는 S3 이벤트 알림을 대기열로 직접 전송하는 전체 예제가
전송할 버킷을 구성합니다. EventBridge
다음 예시는 알림을 보낼 버킷을 구성합니다. EventBridge
public static String setBucketNotificationToEventBridge(String bucketName) { // Enable bucket to emit S3 Event notifications to EventBridge. s3Client.putBucketNotificationConfiguration(b -> b .bucket(bucketName) .notificationConfiguration(b1 -> b1 .eventBridgeConfiguration(SdkBuilder::build)) .build());
이벤트를 전송할 버킷을 구성할 때는 이벤트 유형이나 디스패치할 EventBridge 최종 EventBridge 대상이 아니라 목적지를 지정하기만 EventBridge 하면 됩니다. Java SDK EventBridge 클라이언트를 사용하여 최종 대상 및 이벤트 유형을 구성합니다.
다음 코드는 객체 생성 이벤트를 주제 및 대기열로 EventBridge 팬아웃하도록 구성하는 방법을 보여줍니다.
public static String configureEventBridge(String topicArn, String queueArn) { try { // Create an EventBridge rule to route Object Created notifications. PutRuleRequest putRuleRequest = PutRuleRequest.builder() .name(RULE_NAME) .eventPattern(""" { "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": { "name": ["%s"] } } } """.formatted(bucketName)) .build(); // Add the rule to the default event bus. PutRuleResponse putRuleResponse = eventBridgeClient.putRule(putRuleRequest) .whenComplete((r, t) -> { if (t != null) { logger.error("Error creating event bus rule: " + t.getMessage(), t); throw new RuntimeException(t.getCause().getMessage(), t); } logger.info("Event bus rule creation request sent successfully. ARN is: {}", r.ruleArn()); }).join(); // Add the existing SNS topic and SQS queue as targets to the rule. eventBridgeClient.putTargets(b -> b .eventBusName("default") .rule(RULE_NAME) .targets(List.of ( Target.builder() .arn(queueArn) .id("Queue") .build(), Target.builder() .arn(topicArn) .id("Topic") .build()) ) ).join(); return putRuleResponse.ruleArn(); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return null; }
Java EventBridge 코드에서 작업하려면 eventbridge
아티팩트에 대한 종속성을 pom.xml
Maven 파일에 추가하십시오.
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>eventbridge</artifactId> </dependency>
Code Examples GitHub 리포지토리에는 S3 이벤트 알림을 주제 EventBridge 및 대기열로 보낸 다음 해당 주제와 대기열로 전송하는 전체 예제가 들어
S3 이벤트 알림을 API 사용하여 이벤트를 처리합니다.
대상이 S3 알림 이벤트를 수신한 후에는 S3 이벤트 알림을 사용하여 객체 지향 방식으로 이벤트를 처리할 수 있습니다. API S3 이벤트 알림을 API 사용하여 대상에 직접 전달되는 이벤트 알림 (첫 번째 예 참조) 에는 사용할 수 있지만 라우팅된 알림에는 사용할 수 없습니다. EventBridge 버킷에서 전송한 S3 이벤트 알림은 현재 S3 이벤트 알림에서 처리하지 API 않는 다른 구조를 EventBridge 포함합니다.
종속성 추가
S3 이벤트 API 알림은 Java SDK 2.x용 버전 2.25.11과 함께 출시되었습니다.
S3 이벤트 알림을 사용하려면 다음 API 스니펫과 pom.xml
같이 필수 종속성 요소를 Maven에 추가하십시오.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.X.X1
</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3-event-notifications</artifactId>
</dependency>
</dependencies>
S3EventNotification
수업 사용
JSON문자열에서 S3EventNotification
인스턴스 만들기
JSON문자열을 S3EventNotification
객체로 변환하려면 다음 예제와 같이 S3EventNotification
클래스의 정적 메서드를 사용합니다.
import software.amazon.awssdk.eventnotifications.s3.model.S3EventNotification import software.amazon.awssdk.eventnotifications.s3.model.S3EventNotificationRecord import software.amazon.awssdk.services.sqs.model.Message; public class S3EventNotificationExample { ... void receiveMessage(Message message) { // Message received from SQSClient. String sqsEventBody = message.body(); S3EventNotification s3EventNotification = S3EventNotification.fromJson(sqsEventBody); // Use getRecords() to access all the records in the notification. List<S3EventNotificationRecord> records = s3EventNotification.getRecords(); S3EventNotificationRecord record = records.stream().findFirst(); // Use getters on the record to access individual attributes. String awsRegion = record.getAwsRegion(); String eventName = record.getEventName(); String eventSource = record.getEventSource(); } }
이 예제에서 fromJson
메서드는 JSON 문자열을 S3EventNotification
객체로 변환합니다. JSON문자열에 필드가 누락되면 해당 Java 객체 필드에 null
값이 생성되고 의 추가 필드는 JSON 무시됩니다.
이벤트 알림 레코드에 APIs 대한 기타 정보는 의 API 참조에서 찾을 수 S3EventNotificationRecord
있습니다.
S3EventNotification
인스턴스를 JSON 문자열로 변환
다음 예제와 같이 toJson
(ortoJsonPretty
) 메서드를 사용하여 S3EventNotification
객체를 JSON 문자열로 변환합니다.
import software.amazon.awssdk.eventnotifications.s3.model.S3EventNotification public class S3EventNotificationExample { ... void toJsonString(S3EventNotification event) { String json = event.toJson(); String jsonPretty = event.toJsonPretty(); System.out.println("JSON: " + json); System.out.println("Pretty JSON: " + jsonPretty); } }
GlacierEventData
, ReplicationEventData
IntelligentTieringEventData
, 및 LifecycleEventData
의 필드는 있는 JSON 경우 에서 제외됩니다null
. 다른 null
필드는 다음과 같이 직렬화됩니다. null
다음은 S3 객체 태깅 이벤트에 대한 toJsonPretty
메서드 출력 예시를 보여줍니다.
{ "Records" : [ { "eventVersion" : "2.3", "eventSource" : "aws:s3", "awsRegion" : "us-east-1", "eventTime" : "2024-07-19T20:09:18.551Z", "eventName" : "ObjectTagging:Put", "userIdentity" : { "principalId" : "AWS:XXXXXXXXXXX" }, "requestParameters" : { "sourceIPAddress" : "XXX.XX.XX.XX" }, "responseElements" : { "x-amz-request-id" : "XXXXXXXXXXXX", "x-amz-id-2" : "XXXXXXXXXXXXX" }, "s3" : { "s3SchemaVersion" : "1.0", "configurationId" : "XXXXXXXXXXXXX", "bucket" : { "name" : "DOC-EXAMPLE-BUCKET", "ownerIdentity" : { "principalId" : "XXXXXXXXXXX" }, "arn" : "arn:aws:s3:::XXXXXXXXXX" }, "object" : { "key" : "akey", "size" : null, "eTag" : "XXXXXXXXXX", "versionId" : null, "sequencer" : null } } } ] }
를 사용하여 Amazon SQS 대기열에서 수신한 알림을 처리하는 방법을 GitHub 보여주는 전체 예제가