AWS Lambda 함수에 대한 DynamoDB 이벤트 필터링
AWS Lambda 함수에 대한 DynamoDB 이벤트 필터링
AWS Lambda는 이제 콘텐츠 필터링 옵션 DynamoDB를 이벤트 소스로 제공합니다. 이를 통해 원하는 데이터만 포함하도록 이벤트를 필터링할 수 있습니다. 이를 통해 고객의 Lambda 기능에 대한 트래픽을 줄이고 코드를 간소화하며 전체 비용을 절감할 수 있습니다.
그러나 AWS CDK는 아직 이를 지원할 수 없습니다. AWS CDK Lambda event filtering에서 이 기능의 진행 상황을 추적할 수 있습니다.
CDK에서 AWS Lambda 함수에 대한 DynamoDB 이벤트를 필터링하는 방법
CDK에서 AWS Lambda 함수에 대한 DynamoDB 이벤트를 필터링하는 방법의 예를 살펴보겠습니다.
// 1. Create a DynamoDB table
const dynamoTable = new dynamodb.Table(this, 'DynamoTable', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
removalPolicy: RemovalPolicy.DESTROY,
stream: dynamodb.StreamViewType.NEW_AND_OLD_IMAGES,
})
// 2. Create a Lambda function that will be triggered by the DynamoDB stream
// you can see how to create lambda functions in typescript in the following link:
// https://www.codewithyou.com/blog/writing-typescript-lambda-in-aws-cdk
const fn = new NodejsFunction(this, 'Handler', {
entry: './lambda/index.ts',
handler: 'main',
runtime: lambda.Runtime.NODEJS_14_X,
architecture: lambda.Architecture.ARM_64,
bundling: {
externalModules: ['aws_sdk'],
minify: true,
},
})
// 3. currently, aws cdk is not yet support filtering event sources
// https://github.com/aws/aws-cdk/issues/17874
// So, we need create a source mapping to map the DynamoDB table to the Lambda function
const sourceMapping = new lambda.EventSourceMapping(this, 'SourceMapping', {
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
batchSize: 1, // only process one record at a time
target: fn, // the lambda function to trigger
eventSourceArn: dynamoTable.tableStreamArn, // the DynamoDB stream to read from
bisectBatchOnError: true, // if the Lambda function fails, split the batch into two
retryAttempts: 3, // retry 3 times if the Lambda function fails
})
// grant the function stream access to the DynamoDB table
dynamoTable.grantStreamRead(fn)
// filter the event source mapping to only process records with the specified event type (in this case, "INSERT")
const cfnSourceMapping = sourceMapping.node.defaultChild as lambda.CfnEventSourceMapping // get the underlying CloudFormation resource
cfnSourceMapping.addPropertyOverride('FilterCriteria', {
Filters: [
{
Pattern: JSON.stringify({
eventName: ['INSERT'], // only process INSERT events
}),
},
],
})
위의 코드를 살펴보겠습니다.
https://www.codewithyou.com/blog/writing-typescript-lambda-in-aws-cdk
cfnSourceMapping.addPropertyOverride('FilterCriteria', {
Filters: [
{
Pattern: JSON.stringify({
eventName: ['INSERT'], // only process INSERT events
}),
},
],
})
이 코드 조각은 소스 매핑에 필터를 추가합니다. 필터는 이벤트 유형이 "INSERT"인 레코드만 처리합니다. 필터는 속성 재정의로 소스 매핑에 추가됩니다.
The code for this article is available on GitHub
전체 스택을 AWS에 배포합니다.
yarn deploy
스택이 배포된 후 DynamoDB 테이블에 항목을 추가하여 DynamoDB 스트림에 의해 Lambda 함수가 트리거되는 것을 볼 수 있습니다.
청소
스택을 삭제하는 것을 잊지 마십시오. 다음 명령을 실행하여 이를 수행할 수 있습니다.
npx cdk destroy
이 기사를 읽어 주셔서 감사합니다. 질문이 있으시면 댓글을 남겨주세요. 가능한 한 빨리 귀하의 질문에 답변하도록 노력하겠습니다.
Reference
이 문제에 관하여(AWS Lambda 함수에 대한 DynamoDB 이벤트 필터링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/binhbv/filtering-dynamodb-event-for-aws-lambda-functions-b93텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)