Skip to content

Instantly share code, notes, and snippets.

@numberoverzero
Last active September 18, 2017 04:52
Show Gist options
  • Save numberoverzero/0e34c8338a72f8605ac8bf6bbc1488be to your computer and use it in GitHub Desktop.
Save numberoverzero/0e34c8338a72f8605ac8bf6bbc1488be to your computer and use it in GitHub Desktop.
Example of a possible Bloop extension to do cross-region replication with AWS Lambda in 30 lines
from bloop import Engine
from bloop.ext._lambda import unpack
from boto3 import Session
from my_models_script import MyModel
primary = Engine()
session = Session(region_name="us-east-1")
backup = Engine(
dynamodb=session.client("dynamodb"),
dynamodbstreams=session.client("dynamodbstreams"))
primary.bind(MyModel)
backup.bind(MyModel)
def replicate(record):
unpack(engine, record)
change_type = record["meta"]["event"]["type"]
obj = record["key"] or record["new"] or record["old"]
if change_type in {"insert", "modify"}:
backup.save(obj)
elif change_type == "remove":
backup.delete(obj)
else:
raise ValueError(f"Unknown change type '{change_type}'")
def handler(event, context):
for record in event.get("Records", []):
replicate(record)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment