Amazon Web Services 한국 블로그

새로운 기능 – Amazon EventBridge에서 Amazon S3 이벤트 알림 사용

AWS는 2019년 중반에, 규모 관계없이 강력한 이벤트 중심 애플리케이션을 손쉽게 구축할 수 있는 Amazon EventBridge를 출시했습니다. 출시 이후 스키마 레지스트리, 이벤트 아카이빙 및 재생 기능, 리전 간 이벤트 버스 대상 지원, API 대상 등 모든 HTTP API로 이벤트를 전송할 수 있도록 지원하는 몇 가지 중요한 기능이 추가되었습니다. 매우 많은 대상 목록을 지원하며 이벤트의 패턴 매칭, 필터링 및 라우팅을 수행할 수 있는 기능을 갖춘 EventBridge는 매우 강력하고 유연한 아키텍처 구성 요소입니다.

S3 이벤트 알림
이제 EventBridge를 사용하여 S3 객체의 변경 사항에 효율적으로 빠르게 대응하는 애플리케이션을 더욱 쉽게 구축할 수 있게 되었습니다. 이 모델은 그 어느 때보다 빠르고 안정적이며 개발자에게 익숙한 새로운 ‘직접 연결’ 모델입니다. 더 이상 이벤트를 처리하기 위해 객체의 추가 복사본을 만들거나 특별한 단일 목적 코드를 작성할 필요가 없습니다.

그런데 이미 S3 객체의 변경 사항에 대응할 수 있는 능력은 충분히 있는데, 무엇 때문에 이 같은 기능을 추가하는지 궁금해 하는 분도 계실 것입니다. 2014년에 AWS는 SNS 주제, SQS 대기열 및 Lambda 함수에 대한 S3 이벤트 알림을 출시했습니다. 이 기능은 여전히 매우 강력한 기능이지만 엔터프라이즈 규모로 사용하려면 독립적으로 존재하는 여러 팀 간에 조율하고 동일한 객체 및 이벤트를 사용하는 애플리케이션 간에 조정해야 할 수 있습니다. 또한 이미 EventBridge는 CloudTrail 로그에서 S3 API 호출을 추출하여 패턴 매칭 및 필터링을 수행하는 데 사용할 수 있습니다. 다시 말하지만, 감사 및 로깅에 중점을 둔 많은 종류의 앱에 사용하기에 매우 강력하고 뛰어나지만, 저희는 늘 더욱 개선할 방법을 찾고 있습니다.

실제로 이제 EventBridge에 직접 전달하도록 S3 이벤트 알림을 구성할 수 있습니다. 이 새 모델은 다음과 같은 여러 가지 이점을 제공합니다.

고급 필터링 – 객체 크기, 키 이름 및 시간 범위를 비롯한 여러 가지 추가 메타데이터 필드를 필터링할 수 있습니다. 이는 적절한 작업 과정에 대한 결정을 내리는 데 필요한 추가 메타데이터를 얻기 위해 S3로 다시 호출을 전달해야 하는 Lambda 함수를 사용하는 것보다 더 효율적입니다. S3는 규칙과 일치하는 이벤트만 게시하므로 관심 있는 이벤트에 대해서만 요금을 지불하여 비용을 절감할 수 있습니다.

여러 대상 – API 대상을 통해 Step Functions, Kinesis Firehose, Kinesis Data Streams 및 HTTP 대상을 비롯한 18개의 AWS 서비스 중 선택한 AWS 서비스로 동일한 이벤트 알림을 라우팅할 수 있습니다. 이는 자체 팬아웃 메커니즘을 만드는 것보다 훨씬 쉬우며 독립적인 팀이 자체 이벤트 처리를 수행하려는 엔터프라이즈 규모의 환경을 지원하는 데 유용합니다.

빠르고 신뢰할 수 있는 호출 – 패턴이 빠르게 직접적으로 매칭되고 대상이 호출됩니다. S3는 EventBridge에 이벤트를 최소 한 번 전송하므로 애플리케이션의 신뢰성이 더욱 높아집니다.

또한 이벤트를 아카이빙하고 리플레이하는 기능을 비롯하여 다른 EventBridge 기능을 활용할 수도 있습니다. 이렇게 하면 오류가 발생한 경우나 이벤트 버스에 새 대상을 추가하는 경우 이벤트를 다시 처리할 수 있습니다.

시작하기
몇 분 안에 바로 시작할 수 있습니다. 먼저 S3 버킷(이 예에서는 jbarr-public) 중 하나에서 EventBridge 알림을 사용하도록 설정합니다. S3 콘솔을 열고 내 버킷을 찾은 다음 속성(Properties) 탭을 열고 아래로 스크롤하여 이벤트 알림(Event notifications)으로 이동한 후 편집(Edit)을 클릭합니다.

켜기(On)를 선택하고 변경 사항 저장(Save changes)을 클릭하면 준비가 다 된 것입니다.

이제 EventBridge 콘솔을 사용하여 규칙을 만듭니다. 늘 그렇듯 이름과 설명을 입력하여 시작합니다.

그런 다음 버킷과 원하는 이벤트와 일치하는 패턴을 정의합니다.

각각의 패턴은 하나 이상의 버킷 및 하나 이상의 이벤트를 매칭할 수 있습니다. 지원되는 이벤트는 다음과 같습니다.

  • 객체 생성됨
  • 객체 삭제됨
  • 객체 복원 시작됨
  • 객체 복원 완료됨
  • 객체 복원 만료됨
  • 객체 태그 추가됨
  • 객체 태그 삭제됨
  • 객체 ACL 업데이트됨
  • 객체 스토리지 클래스 변경됨
  • 객체 액세스 계층 변경됨

그런 다음 기본 이벤트 버스를 선택하고 그 대상을 내 Amazon 이메일 주소에 메시지를 게시하는 SNS 주제(BucketAction)로 설정합니다.

생성(Create)을 클릭하면 모든 설정이 완료됩니다. 테스트하려면 버킷에 파일을 업로드하고 메시지를 기다리기만 하면 됩니다.

일부 따옴표를 제거하고 서식을 지정하면, 이 메시지에는 이벤트에 대한 흥미롭고 연관성이 높은 모든 정보가 포함되어 있으며 다음과 같이 표시됩니다.

{
    "version": "0",
    "id": "2d4eba74-fd51-3966-4bfa-b013c9da8ff1",
    "detail-type": "Object Created",
    "source": "aws.s3",
    "account": "348414629041",
    "time": "2021-11-13T00:00:59Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:s3:::jbarr-public"
    ],
    "detail": {
        "version": "0",
        "bucket": {
            "name": "jbarr-public"
        },
        "object": {
            "key": "eb_create_rule_mid_1.png",
            "size": 99797,
            "etag": "7a72374e1238761aca7778318b363232",
            "version-id": "a7diKodKIlW3mHIvhGvVphz5N_ZcL3RG",
            "sequencer": "00618F003B7286F496"
        },
        "request-id": "4Z2S00BKW2P1AQK8",
        "requester": "348414629041",
        "source-ip-address": "72.21.198.68",
        "reason": "PutObject"
    }

초기 이벤트 패턴은 매우 단순했고 버킷 이름만 매칭했습니다. 콘텐츠 기반 필터링을 사용하여 더 복잡하고 흥미로운 패턴을 작성할 수 있습니다. 예를 들어 숫자 매칭을 사용하여 1MB보다 작은 객체의 이벤트를 매칭하는 패턴을 설정할 수 있습니다.

{
    "source": [
        "aws.s3"
    ],
    "detail-type": [
        "Object Created",
        "Object Deleted",
        "Object Tags Added",
        "Object Tags Deleted"
    ],

    "detail": {
        "bucket": {
            "name": [
                "jbarr-public"
            ]
        },
        "object" : {
            "size": [{"numeric" :["<=", 1048576 ] }]
        }
    }
}

또는 접두사 매칭을 사용하여 버킷의 ‘하위 폴더’(실제로는 존재하지 않음)에 업로드된 객체를 찾는 패턴을 설정할 수 있습니다.

"object": {
  "key" : [{"prefix" : "uploads/"}]
  }]
}

이 모든 기능을 아카이브/리플레이를 포함한 모든 기존 EventBridge 기능과 함께 사용할 수 있습니다. 각 규칙에 대한 CloudWatch 지표에 액세스할 수도 있습니다.

정식 출시
이 기능은 지금 이용 가능하며 오늘부터 모든 상용 AWS 리전에서 사용을 시작할 수 있습니다. 규칙과 일치하는 이벤트 1백만 개당 1 USD를 지불하면 됩니다. 자세한 내용은 EventBridge 요금 페이지를 참조하세요.

Jeff