【问题标题】:Copy DynamoDB table data cross account real time跨账户实时复制DynamoDB表数据
【发布时间】:2019-12-18 15:59:10
【问题描述】:

将数据从一个帐户中的 DDB 表复制到另一个帐户的最简单方法是什么(最简单意味着服务维护开销较少。如果可能,希望使用少服务器的方法),最好以少服务器的方式(因此没有计划的作业使用数据管道)。

我正在探索使用 DynamoDB 流的可能性,但是这个旧的 answer 提到这是不可能的。但是,我找不到最新的文档来证实/反驳这一点。还是这样吗?

我正在考虑的另一个选项:更新 Firehose 转换 lambda,该 lambda 操作然后将数据插入 DynamoDB 表,以将其发布到启用跨账户交付的 Kinesis 流,触发 Lambda,该 Lambda 将根据需要进一步处理数据。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb amazon-kinesis amazon-dynamodb-streams


    【解决方案1】:

    我们使用 DynamoDB 流和 Lambda 为黑客马拉松任务创建了跨账户复制系统。
    但是,由于 Lambdas coldstart 问题,您可能会在记录中看到一些延迟。 有办法解决这个问题也取决于你要保持 Lambda 有多忙,这里是link

    我们实际上创建了一个 cloudformation 和一个 jar,我们组织内部的任何人都可以使用它来开始在任何表上进行复制。出于安全考虑,无法分享。

    请查看此link 了解更多详情。

    【讨论】:

    • We kind of created replication system for cross account using DyanmoDB streams and Lambda --> 您能否提供对此的见解? DDB 流是一个账户的一部分,而 Lambda 是另一个账户的一部分吗?两者是否属于同一账户,Lambda 有权写入另一个账户中的 DynamoDB 表?
    • AWS 提供了一个类似的案例研究:aws.amazon.com/blogs/compute/… 您应该收听 DynamoDB 流,而不是 kinesis 流。
    【解决方案2】:

    这应该是可能的

    • 在源账户中配置 DynamoDB 表并启用 Stream
    • 在同一账户(源账户)中创建 Lambda 函数并将其与 DDB Stream 集成
    • 创建跨账户角色,即目标账户DynamoDBCrossAccountRole,具有对目标DDB表进行必要操作的权限(此角色和目标DDB表在同一个账户中)
    • 除了 CloudWatch 的 logs 权限之外,还向您的 Lambda 函数的执行角色添加 sts:AssumeRole 权限,以便它可以代入跨账户角色
    • 从您的 lambda 函数中调用 sts:AssumeRole 并使用这些权限配置 DynamoDB 客户端,例如:
    client = boto3.client('sts')
    sts_response = client.assume_role(RoleArn='arn:aws:iam::<999999999999>:role/DynamoDBCrossAccountRole',                              
                                          RoleSessionName='AssumePocRole', DurationSeconds=900)
    
    dynamodb = boto3.resource(service_name='dynamodb', region_name=<region>,
                                  aws_access_key_id = sts_response['Credentials']['AccessKeyId'],
                                  aws_secret_access_key = sts_response['Credentials']['SecretAccessKey',
                                  aws_session_token = sts_response['Credentials']['SessionToken']) 
    
    • 现在您的 lambda 函数应该能够从源账户在目标账户中的 DynamoDB 上运行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 2022-01-06
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 2020-03-11
      相关资源
      最近更新 更多