

# DynamoDB Streams 및 AWS Lambda 트리거
<a name="Streams.Lambda"></a>

Amazon DynamoDB는 DynamoDB Streams의 이벤트에 자동으로 응답하는 코드 조각인 *트리거*를 만들 수 있도록 AWS Lambda와 통합되어 있습니다. 트리거를 사용하면 DynamoDB 테이블의 데이터 수정에 응답하는 애플리케이션을 빌드할 수 있습니다.

**Topics**
+ [자습서 \$11: 필터를 사용하여 AWS CLI로 AWS Lambda 및 Amazon DynamoDB에서 모든 이벤트 처리](Streams.Lambda.Tutorial.md)
+ [자습서 \$12: 필터를 사용하여 DynamoDB 및 Lambda에서 일부 이벤트 처리](Streams.Lambda.Tutorial2.md)
+ [DynamoDB Streams를 Lambda와 함께 사용하는 모범 사례](Streams.Lambda.BestPracticesWithDynamoDB.md)

테이블에서 DynamoDB Streams를 활성화할 경우 스트림 Amazon 리소스 이름(ARN)을 사용자가 작성하는 AWS Lambda 함수에 연결할 수 있습니다. 그러면 해당 DynamoDB 테이블에 대한 모든 변형 작업을 스트림의 항목으로 캡처할 수 있습니다. 예를 들어, 테이블의 항목이 수정될 때 새 레코드가 해당 테이블의 스트림에 즉시 나타나도록 트리거를 설정할 수 있습니다.

**참고**  
하나의 DynamoDB 스트림에 3개 이상의 Lambda 함수를 구독하는 경우 읽기 제한이 발생할 수 있습니다.

[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html) 서비스는 초당 4번 새 레코드에 대한 스트림을 폴링합니다. 새 스트림 레코드를 사용할 수 있게 되면 Lambda 함수가 동기식으로 호출됩니다. 동일한 DynamoDB 스트림에 최대 2개의 Lambda 함수를 구독할 수 있습니다. 동일한 DynamoDB 스트림에 3개 이상의 Lambda 함수를 구독하는 경우 읽기 제한이 발생할 수 있습니다.

Lambda 함수는 알림을 보내거나 워크플로를 시작하거나 사용자가 지정하는 기타 여러 작업을 수행할 수 있습니다. 각 스트림 레코드를 Amazon S3 File Gateway(Amazon S3)와 같은 영구 스토리지에 간단하게 복사하는 Lambda 함수를 작성하여 테이블의 쓰기 작업에 대한 영구 감사 추적을 만들 수 있습니다. `GameScores` 테이블에 쓰는 모바일 게임 앱이 있다고 가정해 보겠습니다. `TopScore` 테이블의 `GameScores` 속성이 업데이트될 때마다 해당하는 스트림 레코드가 테이블 스트림에 기록됩니다. 그런 다음 이 이벤트는 소셜 미디어 네트워크에 축하 메시지를 게시하는 Lambda 함수를 트리거합니다. 이 함수는 `GameScores`에 업데이트되지 않거나 `TopScore` 속성을 수정하지 않는 모든 스트림 레코드를 무시하도록 작성할 수도 있습니다.

함수가 오류를 반환하면 Lambda는 성공적으로 처리되거나 데이터가 만료될 때까지 배치(batch)를 재시도합니다. 또한 더 작은 배치로 재시도하고, 재시도 횟수를 제한하고, 너무 오래된 레코드를 폐기하고, 기타 옵션을 사용하도록 Lambda를 구성할 수 있습니다.

성능 모범 사례에 따라 Lambda 함수는 수명이 짧아야 합니다. 불필요한 처리 지연을 방지하기 위해 복잡한 로직도 실행하지 않아야 합니다. 특히 고속 스트림의 경우 장기 실행 중인 동기식 Lambda보다 비동기식 사후 처리 단계 함수 워크플로를 트리거하는 것이 좋습니다.

 DynamoDB 스트림에 리소스 기반 정책을 구성하여 Lambda 함수에 대한 교차 계정 읽기 액세스 권한을 부여함으로써 여러 AWS 계정에서 Lambda 트리거를 사용할 수 있습니다. 교차 계정 액세스를 허용하도록 스트림을 구성하는 방법을 자세히 알아보려면 DynamoDB 개발자 가이드의 [교차 계정 AWS Lambda 함수를 통한 액세스 공유](rbac-cross-account-access.md#shared-access-cross-acount-lambda)를 참조하세요.

AWS Lambda에 대한 자세한 내용은 [AWS Lambda개발자 안내서](https://docs.aws.amazon.com/lambda/latest/dg/) 단원을 참조하세요.