DynamoDB와 Amazon EventBridge 통합 - Amazon DynamoDB

DynamoDB와 Amazon EventBridge 통합

Amazon DynamoDB는 변경 데이터 캡처를 위한 DynamoDB Streams를 제공하므로, DynamoDB 테이블의 항목 수준 변경 사항을 캡처할 수 있습니다. DynamoDB Streams는 Lambda 함수를 간접 호출하여 변경 사항을 처리할 수 있어 다른 서비스 및 애플리케이션과의 이벤트 기반 통합이 가능합니다. DynamoDB Streams는 필터링도 지원하므로, 대상을 정한 효율적인 이벤트 처리가 가능합니다.

DynamoDB Streams는 샤드당 최대 2명의 동시 소비자를 지원하고 Lambda 이벤트 필터링을 통한 필터링을 지원하여 특정 기준과 일치하는 항목만 처리합니다. 2명 이상의 소비자를 지원해야 하는 요구 사항이 있는 고객도 있습니다. 변경 이벤트가 처리되기 전에 변경 이벤트를 보강하거나 고급 필터링 및 라우팅을 사용해야 하는 경우도 있습니다.

DynamoDB를 EventBridge와 통합하면 이러한 요구 사항을 지원할 수 있습니다.

Amazon EventBridge는 이벤트를 사용하여 애플리케이션 구성 요소를 서로 연결하는 서버리스 서비스로, 확장 가능한 이벤트 기반 애플리케이션을 더 쉽게 구축할 수 있습니다. EventBridge는 EventBridge 파이프를 통해 Amazon DynamoDB와 기본적으로 통합되어 DynamoDB에서 EventBridge 버스로 데이터가 원활하게 흐릅니다. 그러면 해당 버스는 일련의 규칙과 대상을 통해 여러 애플리케이션 및 서비스로 팬아웃할 수 있습니다.

작동 방식

DynamoDB와 EventBridge 파이프를 통합하면 DynamoDB Streams를 사용하여 DynamoDB 테이블에서 시간 순서에 따라 항목 수준 변경 사항을 캡처합니다. 이러한 방식으로 캡처된 각 레코드에는 테이블에서 수정된 데이터가 포함됩니다.

DynamoDB Streams가 Amazon EventBridge 버스와 어떻게 통합되는지 보여주는 이미지.

EventBridge 파이프는 DynamoDB Streams의 이벤트를 소비하여 EventBridge 버스와 같은 대상으로 라우팅합니다. 이벤트 버스는 이벤트를 수신하여 표적(대상이라고도 함)에 전달하는 라우터입니다. 전송은 이벤트 내용과 일치하는 규칙을 기반으로 합니다. 파이프에는 필요에 따라 특정 이벤트를 필터링하고 이벤트 데이터가 대상으로 전송되기 전에 이벤트 데이터를 보강하는 기능도 포함되어 있습니다.

EventBridge는 여러 대상 유형을 지원하지만, 팬아웃 설계를 구현할 때 일반적으로 Lambda 함수를 대상으로 사용합니다. 다음 예제에서는 Lambda 함수 대상과의 통합을 보여줍니다.

콘솔을 통한 통합 생성

아래 단계에 따라 AWS Management Console을 통해 통합을 생성합니다.

  1. DynamoDB 개발자 안내서의 스트림 활성화 섹션에 있는 단계를 따라 소스 테이블에서 DynamoDB Streams를 활성화합니다. 소스 테이블에서 DynamoDB Streams가 이미 활성화되어 있는 경우, 현재 소비자가 2명 미만인지 확인하세요. 소비 대상은 Lambda 함수, DynamoDB 전역 테이블, Amazon OpenSearch Service와의 Amazon DynamoDB 제로 ETL 통합 또는 DynamoDB Streams Kinesis 어댑터 등을 통해 스트림에서 직접 읽는 애플리케이션 등일 수 있습니다.

  2. EventBridge 사용 설명서의 Amazon EventBridge 이벤트 버스 만들기 섹션에 있는 단계에 따라 EventBridge 이벤트 버스를 생성합니다.

    1. 이벤트 버스를 생성할 때 스키마 검색을 활성화합니다.

  3. EventBridge 사용 설명서의 Amazon EventBridge 파이프 만들기 섹션에 있는 단계에 따라 EventBridge 파이프를 생성합니다.

    1. 소스를 구성할 때 소스 필드에서 DynamoDB를 선택하고 DynamoDB Streams 필드에서 소스 테이블 스트림의 이름을 선택합니다.

    2. 대상을 구성할 때 대상 서비스 필드에서 EventBridge 이벤트 버스를 선택하고 이벤트 버스를 대상으로 설정 필드에서 2단계에서 생성된 이벤트 버스를 선택합니다.

  4. 소스 DynamoDB 테이블에 예제 항목을 작성하여 이벤트를 트리거합니다. 이렇게 하면 EventBridge가 예제 항목에서 스키마를 유추할 수 있습니다. 이 스키마를 사용하여 라우팅 이벤트에 대한 규칙을 생성할 수 있습니다. 예를 들어, 속성 오버로드가 포함된 설계 패턴을 구현하는 경우 정렬 키 값에 따라 다른 규칙을 트리거해야 할 수 있습니다. DynamoDB에 항목을 쓰는 방법에 대한 자세한 내용은 DynamoDB 개발자 안내서의 항목 및 속성 작업 섹션에서 확인할 수 있습니다.

  5. Lambda 개발자 안내서의 Python을 사용하여 Lambda 함수 빌드 섹션에 있는 단계에 따라 대상으로 사용할 예제 Python Lambda 함수를 생성합니다. 함수를 생성할 때 아래 예제 코드를 사용하여 통합을 시연할 수 있습니다. 간접 호출되면 CloudWatch Logs에서 볼 수 있는 이벤트와 함께 수신된 NewImageOldImage가 출력됩니다.

    import json def lambda_handler(event, context): dynamodb = event.get('detail', {}).get('dynamodb', {}) new_image = dynamodb.get('NewImage') old_image = dynamodb.get('OldImage') if new_image: print("NewImage:", json.dumps(new_image, indent=2)) if old_image: print("OldImage:", json.dumps(old_image, indent=2)) return {'statusCode': 200, 'body': json.dumps(event)}
  6. Create a rule 섹션의 단계에 따라 이벤트에 반응하는 새 Lambda 함수로 이벤트를 라우팅하는 EventBridge 규칙을 생성합니다.

    1. 규칙 세부 정보를 정의할 때는 2단계에서 생성한 이벤트 버스의 이름을 이벤트 버스로 선택하세요.

    2. 이벤트 패턴을 만들 때는 기존 스키마의 가이드를 따르세요. 여기에서 이벤트의 검색된 스키마 레지스트리와 검색된 스키마를 선택할 수 있습니다. 이를 통해 특정 속성과 일치하는 메시지만 라우팅하도록 사용 사례에 맞는 이벤트 패턴을 구성할 수 있습니다. 예를 들어, SK가 “user#”로 시작하는 DynamoDB 항목에서만 일치시키려면 다음과 같은 구성을 사용합니다.

      정렬 키가 'user#'로 시작하는 DynamoDB 항목만 표시되는 EventBridge 규칙을 보여주는 이미지.
    3. 스키마에 대한 패턴 설계를 완료한 후 JSON에서 이벤트 패턴 생성을 클릭합니다. 대신 DynamoDB Streams에 나타나는 모든 이벤트를 일치시키려면 이벤트 패턴에 다음 JSON을 사용하세요.

      { "source": ["aws.dynamodb"] }
    4. 대상을 선택할 때는 AWS 서비스 가이드를 따르세요. 대상 선택 필드에서 'Lambda 함수'를 선택합니다. 함수 필드에서 5단계에서 생성한 Lambda 함수를 선택합니다.

  7. 이제 EventBridge 사용 설명서의 이벤트 버스에서 스키마 검색 시작 또는 중지 섹션에 있는 단계에 따라 이벤트 버스에서 스키마 검색을 중지할 수 있습니다.

  8. 두 번째 예제 항목을 소스 DynamoDB 테이블에 작성하여 이벤트를 트리거합니다. 각 단계에서 이벤트가 성공적으로 처리되었는지 검증하세요.

    1. EventBridge 사용 설명서의 Monitoring Amazon EventBridge 섹션에 따라 이벤트 버스의 CloudWatch 지표 PutEventsApproximateSuccessCount를 확인합니다.

    2. Lambda 개발자 안내서의 Lambda 함수 모니터링 및 문제 해결 섹션에 따라 Lambda 함수의 함수 로그를 확인합니다. Lambda 함수가 제공된 예제 코드를 사용하는 경우 CloudWatch Logs 로그 그룹에 출력된 DynamoDB Streams의 NewImageOldImage를 확인해야 합니다.

    3. Lambda 개발자 안내서의 Lambda 함수 모니터링 및 문제 해결 섹션을 따라 Lambda 함수에 대한 오류 수 및 성공률(%) 지표를 확인합니다.

다음 단계

이 예제는 단일 Lambda 함수를 대상으로 하는 기본 통합을 제공합니다. 여러 규칙 생성, 여러 대상 생성, 다른 서비스와의 통합, 이벤트 보강과 같은 더 복잡한 구성을 효과적으로 이해하려면 전체 EventBridge 사용 안내서: Getting started with EventBridge를 참조하세요.

참고

애플리케이션과 관련이 있을 수 있는 EventBridge 할당량을 숙지하세요. DynamoDB Streams의 용량은 테이블에 따라 규모가 조정되지만, EventBridge 할당량은 별개입니다. 대규모 애플리케이션에서 주의해야 할 일반적인 할당량은 초당 트랜잭션의 간접 호출 제한 한도초당 트랜잭션의 PutEvents 제한 한도입니다. 이러한 할당량은 대상으로 전송할 수 있는 간접 호출 수와 버스에 보낼 수 있는 초당 이벤트 수를 지정합니다.