replication to meili
This commit is contained in:
@@ -21,7 +21,7 @@ def lambda_handler(event: DynamoDBStreamEvent, context: LambdaContext):
|
||||
with Op(meili_client) as op:
|
||||
for record in event.records:
|
||||
pk = record.dynamodb.keys['id'] # type: ignore
|
||||
new_image = sanitize(record.dynamodb.new_image) # type: ignore
|
||||
new_image = record.dynamodb.new_image # type: ignore
|
||||
index = table_from_arn(record.event_source_arn) # type: ignore
|
||||
|
||||
op.append(
|
||||
@@ -29,13 +29,3 @@ def lambda_handler(event: DynamoDBStreamEvent, context: LambdaContext):
|
||||
op=record.event_name, # type: ignore
|
||||
data=new_image or pk,
|
||||
)
|
||||
|
||||
|
||||
# Post-migration: remove the following function
|
||||
def sanitize(obj):
|
||||
if isinstance(obj, dict):
|
||||
return {k.replace(':', '__'): sanitize(v) for k, v in obj.items()}
|
||||
elif isinstance(obj, list):
|
||||
return [sanitize(item) for item in obj]
|
||||
else:
|
||||
return obj
|
||||
|
||||
33
streams-events/app/events/replicate_into_meili.py
Normal file
33
streams-events/app/events/replicate_into_meili.py
Normal file
@@ -0,0 +1,33 @@
|
||||
from aws_lambda_powertools import Logger, Tracer
|
||||
from aws_lambda_powertools.utilities.data_classes import (
|
||||
DynamoDBStreamEvent,
|
||||
event_source,
|
||||
)
|
||||
from aws_lambda_powertools.utilities.typing import LambdaContext
|
||||
from config import MEILISEARCH_API_KEY, MEILISEARCH_HOST
|
||||
from layercake.strutils import md5_hash
|
||||
from meili import Op
|
||||
from meilisearch import Client as Meilisearch
|
||||
from utils import table_from_arn
|
||||
|
||||
logger = Logger(__name__)
|
||||
tracer = Tracer()
|
||||
meili_client = Meilisearch(MEILISEARCH_HOST, MEILISEARCH_API_KEY)
|
||||
|
||||
|
||||
@event_source(data_class=DynamoDBStreamEvent)
|
||||
@logger.inject_lambda_context
|
||||
@tracer.capture_lambda_handler
|
||||
def lambda_handler(event: DynamoDBStreamEvent, context: LambdaContext):
|
||||
with Op(meili_client) as op:
|
||||
for record in event.records:
|
||||
new_image = record.dynamodb.new_image # type: ignore
|
||||
index = table_from_arn(record.event_source_arn) # type: ignore
|
||||
keys = record.dynamodb.keys # type: ignore
|
||||
_id = md5_hash(str(keys))
|
||||
|
||||
op.append(
|
||||
f'_{index}_replication',
|
||||
op=record.event_name, # type: ignore
|
||||
data=({'_id': _id} | new_image) or _id,
|
||||
)
|
||||
Reference in New Issue
Block a user