Lambda 함수에서 DynamoDB Streams 문제를 해결하려면 어떻게 해야 하나요?

3분 분량
0

AWS Lambda 함수에서 Amazon DynamoDB Streams를 사용하거나 문제를 해결하고 싶습니다.

해결 방법

다음은 Lambda 함수와 함께 DynamoDB Streams를 사용할 때 자주 묻는 질문입니다.

DynamoDB Streams이 트리거일 때 Lambda 함수가 확장되지 않는 이유는 무엇입니까?

DynamoDB 테이블에서 DynamoDB Streams를 켜면 Amazon DynamoDB는 각 파티션당 하나의 샤드를 연결합니다. 예를 들어 DynamoDB 테이블에 10개의 파티션이 있고 이 테이블에서 DynamoDB Streams를 켜면 샤드가 10개가 됩니다.

테이블의 파티션 수가 증가하면 스트림의 샤드 수도 증가합니다.

DynamoDB 테이블의 각 파티션은 최대 3000개의 읽기 용량 유닛(RCU), 1,000개의 쓰기 용량 유닛(WCU) 및 10GB의 데이터를 처리할 수 있습니다. 이러한 파라미터 중 하나를 초과하면 다음과 같은 결과가 발생합니다.

  • 테이블에 새 파티션 추가
  • DynamoDB Streams에 새 샤드를 생성합니다.

DynamoDB Streams에서 데이터 처리를 제어하려면 어떻게 해야 합니까?

배치 크기 및 배치 창은 스트림에서 데이터 처리를 제어하는 데 도움이 됩니다.

배치 창: 레코드를 호출하기 전에 대기할 시간을 설정합니다. 배치 창은 DynamoDB Streams의 데이터 처리를 제어합니다. 이 동작은 스트림 내 데이터 가용성에 따라 달라진다는 점에 유의하세요.

배치 크기: 배치의 최대 레코드를 설정합니다.

Lambda 함수는 다음 조건이 충족될 때까지 호출되지 않습니다.

  • 페이로드 크기가 6MB(동기 호출 제한)에 도달했습니다.
  • 배치 창이 최대값(이 예에서는 60초)에 도달했습니다.
  • 배치 크기가 최대값에 도달했습니다.

병렬화 인자는 데이터 처리 속도를 높이는 데 어떻게 사용됩니까?

병렬화 인자는 더 많은 동시 실행을 허용하여 대량의 레코드를 빠르게 처리합니다. 병렬화 인자를 설정하면(기본값: 1에서 최대 10개) 처리되는 샤드 수가 늘어납니다. 병렬화 인자를 켤 때는 무작위 또는 고유한 파티션 키를 사용하여 처리량을 극대화해야 합니다.

계산: 병렬화 인자(샤드당 동시 배치 수) * 샤드 = 동시 실행

BisectBatchonFunctionError 설정이란 무엇입니까?

Lambda 함수에 장애가 발생하는 경우 BisectBatchOnFunctionError 옵션이 true로 설정되면 배치가 둘로 분할됩니다. 그런 다음 문제 레코드를 찾을 때까지 분할된 배치를 다시 시도합니다. 재시도는 최대 재시도 및 기록 기간 설정에 따라 처리됩니다.

재시도 옵션0으로 설정된 경우 실패한 레코드에 대해 재시도가 시도되지 않습니다. 이 경우 DynamoDB Streams는 장애가 발생한 레코드를 삭제하거나 DLQ(Dead Letter Queue)로 전송합니다(구성된 경우).

예시 1

다음 예제에서 ‘p’는 문제 레코드를 나타내며 재시도 횟수0으로 설정됩니다.

배치 레코드: [1,2,3p,4,5p]

스플릿 1: [3p,4,5p]

스플릿 2: [3p] [4,5p]을(를) 재시도하면 [3p]이(가) 문제 레코드로 식별되므로 삭제됩니다. 또는 구성된 경우 DLQ로 전송됩니다.

스플릿 3: [4]이(가) 처리됩니다. [5p]은(는) 삭제되거나 구성된 경우 DLQ로 전송됩니다.

예시 2

다음 예제에서 'x'는 문제 레코드를 나타냅니다. 재시도 시도-1로 설정됩니다.

배치 레코드 삽입됨: [1,2,3x,4,5x]

[3x,4,5x]

[3x,4,5x]

[3x,4,5x]

[3x,4,5x]

DynamoDB Streams의 Lambda IteratorAge가 증가하는 이유는 무엇입니까?

Lambda의 IteratorAge 수가 증가하는 일반적인 이유는 다음과 같습니다.

  • DynamoDB Streams에 잘못된 레코드가 있습니다.
  • 스트림에는 대량의 쓰기 작업(PutItemBatchWriteItem으로)이 처리되고 있습니다. Lambda 함수가 높은 쓰기 볼륨 처리를 따라가지 못할 수 있습니다. 이 경우 DynamoDB 테이블 프로비저닝 용량을 늘려 1000WCU당 파티션 수를 늘리십시오. 프로비저닝된 용량을 늘리면 동시 Lambda 실행 수가 증가합니다. 자세한 내용은 이전 섹션 **DynamoDB Streams가 트리거일 때 Lambda 함수가 확장되지 않는 이유는 무엇입니까?**를 참조하십시오.
  • 새 계정이나 새 테이블로 마이그레이션하는 등 DynamoDB 파티션 수가 감소했습니다.
  • Lambda 함수에 제한 또는 함수 오류가 있습니다. AWS Lambda는 전체 배치가 성공적으로 처리되거나 레코드 사용 기간이 만료될 때까지 레코드를 재시도합니다. 또한 DynamoDB Streams 보존 기간은 24시간입니다. 데이터 손실을 방지하려면 DLQ를 설정하는 것이 가장 좋습니다. DLQ가 구성된 경우 AWS Lambda는 사용 중지가 완료되거나 레코드 기간이 만료된 후 실패한 레코드 배치를 DLQ로 전송합니다.
    Lambda 함수 오류를 해결하려면 Amazon CloudWatch Logs에서 오류에 대한 세부 정보를 확인하세요.
  • Lambda 함수 지속 시간이 늘어났습니다.
  • 오류 처리 및 병렬화 인자를 최적화해야 합니다.

자세한 내용은 Lambda IteratorAge 지표가 증가하는 이유는 무엇이며, 이를 줄이려면 어떻게 해야 하나요?를 참조하십시오.

AWS 공식
AWS 공식업데이트됨 일 년 전