Amazon EventBridge 이벤트 아카이브 및 재생 기능 출시
이벤트 기반 아키텍처는 이벤트를 사용하여 하나 이상의 애플리케이션의 구성 요소 간에 정보를 공유합니다. 이벤트는 “무언가 일어났음”, API 요청을 받았음, 파일이 스토리지 플랫폼에 업로드되었음 또는 데이터베이스 레코드가 업데이트되었음을 알려줍니다. 비즈니스 이벤트는 새 고객 계정이 생성되었거나 결제가 성공한 경우와 같이 활동과 관련된 내용을 설명합니다.
자체 애플리케이션, 통합 SaaS(서비스형 소프트웨어) 애플리케이션 및 AWS 서비스의 이벤트를 사용하여 애플리케이션을 서로 연결하려면, 이벤트 소스에서 실시간 데이터 스트림을 전달하는 서버리스 이벤트 버스인 Amazon EventBridge를 사용하여 해당 데이터를 AWS Lambda와 같은 대상으로 라우팅합니다.
이벤트는 정보에 관심이 있는 모든 사람과 공유할 수 있는 사실을 알려줍니다. 새 고객 계정이 생성되면 기존 인터페이스를 변경하지 않고도 추가되는 새 서비스에서 이 정보를 사용할 수 있습니다. 예를 들어, 새로운 사기 탐지 시스템은 보안 검사를 수행하고 잠재적인 사기 활동을 평가하기 위해 신규 계정이 생성될 때 모든 해당 계정을 파악하는 데 관심을 가질 수 있습니다.
때로는 과거 이벤트를 다시 처리해야할 수도 있습니다. 유용한 많은 사용 사례가 있습니다. 예를 들면 다음과 같습니다.
- 버그를 수정한 후 영향을 받는 이벤트를 다시 처리하여 올바른 결과를 얻을 수 있습니다. 이 방법은 애플리케이션이 동일한 이벤트를 여러 번 처리할 수 있다고 가정합니다.
- 새 피쳐를 릴리즈할 때 이전 이벤트를 다시 처리하여 피쳐의 도달 범위를 이전 데이터로 확장할 수 있습니다. 예를 들어 애플리케이션에 추가된 부정 행위 탐지 시스템은 새 계정뿐만 아니라 이전 주 또는 몇 달 동안 생성된 이전 계정에도 액세스할 수 있습니다.
EventBridge가 이제 모든 이벤트를 저장하고 다시 재생할 수 있게 되었습니다.
- 이제 이벤트 버스에 게시된 이벤트의 암호화된 아카이브를 만들 수 있습니다. 모든 이벤트를 아카이빙하거나 EventBridge 규칙에서 사용하는 동일한 패턴 일치 구문을 사용하여 이벤트를 필터링할 수 있습니다. 이벤트를 무기한 저장하거나 보존 기간을 설정하여 아카이브에서 이전 이벤트를 자동으로 제거할 수 있습니다.
- 아카이브에 저장된 이벤트를 재생할 수도 있습니다. 이벤트는 이벤트 버스에 대해 정의된 모든 규칙(다른 AWS 서비스에서 생성한 관리형 규칙에는 적용되지 않음) 또는 지정한 규칙에 재생됩니다. 재생된 이벤트에는 사용자가 이를 인식해야 할 경우를 대비하여 추가
replay-name
필드가 포함되어 있습니다. 재생을 시작할 때 시간 프레임을 정의하면 해당 시간 프레임 내의 이벤트만 재생됩니다. 현재 아카이빙된 이벤트 버스와 동일한 이벤트 버스에 대해서만 이벤트를 재생할 수 있습니다.
아카이브 및 재생은 AWS 플랫폼의 이벤트, SaaS 통합의 이벤트 및 자체 사용자 지정 이벤트를 포함하여 EventBridge에서 처리하는 모든 이벤트 프로세스와 함께 작동합니다.
EventBridge는 재생에 대한 별도의 할당량을 유지하므로 재생하는 동안 현재 이벤트 처리량에 영향을 미치지 않습니다. 초당 게시된 이벤트의 관점에서 재생 속도는 해당 리전의 현재 putEvents
제한과 동일합니다. PutEvents
서비스 할당량을 늘리라고 요청하면 재생이 빨라집니다. 이러한 방식으로 정상적인 작업은 재생의 영향을 받지 않습니다. 그러나 재생을 처리하는 다운스트림 서비스의 성능 및 제한을 확인하여 추가 워크로드를 처리할 수 있는지 확인해야 합니다.
진행 중인 재생을 중지할 수 있습니다. 중지된 재생은 재개할 수 없지만 이전에 중지된 재생의 lastReplayedEvent
타임스탬프로 설정된 시작 시간으로 새로운 재생을 만들 수 있습니다.
아카이브와 재생이 실제로 어떻게 작동하는지 살펴 보겠습니다.
이벤트 아카이브 생성
EventBridge 콘솔에서 애플리케이션에 대한 이벤트 버스를 만듭니다.
그런 다음 간단한 이벤트 일치 패턴을 사용하여 이벤트 버스에 대한 규칙을 만들어 customerCreated
와 동일한 DetailType
을 사용하여 수신하는 모든 이벤트를 이벤트의 고객 데이터를 데이터베이스에 저장하는 Lambda 함수로 전송합니다.
이제 [이벤트 버스(Event bus)]를 선택한 다음 [작업(Actions)] 메뉴에서 [이벤트 아카이빙(Archive events)]을 선택합니다.
아카이브에 이름과 설명을 지정하고 소스가 내 이벤트 버스인지 다시 확인합니다. 보존 기간을 무제한으로 선택했지만 보존할 일 수를 선택할 수 있습니다. 이 기간이 지나면 이벤트가 아카이브에서 자동으로 제거됩니다.
[다음(Next)]을 선택합니다. 규칙을 만들 때 이전에 사용한 것과 비슷한 패턴 일치 구문을 사용하여 아카이빙할 이벤트를 선택적으로 필터링할 수 있습니다. 필터를 추가하지 않고 소스의 모든 이벤트를 아카이빙하기로 결정했습니다.
이제 이 간단한 Python 코드를 사용하여 버스에 이벤트를 넣습니다.
import json
import boto3
EVENT_BUS = 'my-event-bus'
# Create EventBridge client
events = boto3.client('events')
eventDetail = {
'customerId': '123',
'customerName': 'Danilo',
'customerData': 'More info...'
}
# Put an event
response = events.put_events(
Entries=[
{
'EventBusName': EVENT_BUS,
'Detail': json.dumps(eventDetail),
'DetailType': 'customerCreated',
'Source': 'com.mycompany.myapp'
}
]
)
print(response['Entries'])
이전 코드를 여러 번 실행합니다. 몇 분 후에 제가 게시한 이벤트가 아카이빙된 것을 알 수 있습니다.
이벤트 재생
얼마 후, 제 Lambda 함수의 코드에서 버그를 발견합니다… 주소가 예상보다 길면 함수가 일부 데이터를 저장하지 않습니다(예, 이러한 일이 발생합니다
제 애플리케이션이 멱등성이기 때문에 안전하게 이와 같이 작업할 수 있습니다. 즉, 결과를 변경하지 않고 동일한 입력으로 여러 번 실행할 수 있습니다. 이 경우 데이터베이스 항목을 올바른 고객 데이터로 덮어씁니다. 복원력 있는 애플리케이션을 빌드하려면 멱등성 인터페이스를 설계하는 것이 좋습니다. 이 방법으로 이와 같은 오류에서 쉽게 복구할 수 있으며 중복 입력을 안전하게 무시할 수도 있습니다.
EventBridge는 주문 보증을 제공하지 않으며 재생은 멀티 스레드 방식으로 수행되므로 이벤트가 원래 순서와 다른 순서로 전달될 수 있습니다.
아카이브를 선택한 상태에서 [새 재생 시작(Start new replay)]을 클릭하고 이름과 설명을 지정합니다.
재생 소스가 제 아카이브인지 확인합니다. 버그가 수정된 Lambda 함수를 트리거하는 규칙만 재생하도록 선택합니다.
재생의 시작 및 종료 시간(현지 시간 또는 UTC를 사용할 수 있음)을 정의하고 [재생 시작(Start Replay)]을 선택합니다.
글쎄요, 제 아카이브는 그렇게 크지 않습니다. 재생이 시작되면 완료하는 데 몇 초밖에 걸리지 않습니다. 제 데이터베이스를 확인했으며 지금 고객 데이터는 정확합니다. 버그 수정!
정식 출시
이벤트 아카이브 및 재생은 현재 중국 본토와 오사카를 제외한 모든 상용 리전에서 이용할 수 있습니다. 자세한 내용은 AWS 리전 서비스 목록을 참조하십시오. 이 새로운 기능은 콘솔, AWS 명령줄 인터페이스(CLI), AWS SDK 및 AWS CloudFormation과 함께 사용할 수 있습니다.
Amazon EventBridge는 사용한 만큼만 지불하면 됩니다. 아카이브 및 재생의 경우 아카이빙된 이벤트 수, 아카이브에 사용된 스토리지, 재생된 메시지 수를 기준으로 비용을 지불합니다. 비용에 대한 자세한 정보와 예는 EventBridge 요금 페이지를 참조하십시오.
자세히 알아보려면 설명서를 참조하십시오. 앞으로 이 새로운 기능을 어떻게 사용할 것인지 공유해주세요!
— Danilo