跨账户实时复制DynamoDB table数据
Copy DynamoDB table data cross account real time
将数据从一个帐户中的 DDB table 复制到另一个帐户的最简单方法是什么(最简单意味着服务维护开销较少。如果可能,更喜欢无服务器方法),最好是以无服务器方式(因此没有使用数据管道的计划作业)。
我正在探索使用 DynamoDB 流的可能性,但是这个旧的 提到这是不可能的。但是,我找不到最新的文档 confirming/disproving 这个。现在还是这样吗?
我正在考虑的另一个选项:更新 Firehose 转换 lambda,该 lambda 操作然后将数据插入 DynamoDB table 以将其发布到启用跨账户交付的 Kinesis 流,触发将进一步处理数据的 Lambda根据需要。
我们使用 DynamoDB 流和 Lambda 为黑客马拉松任务创建了跨账户复制系统。
不过,由于 Lambdas coldstart 问题,您可能会在记录中看到一些延迟。
有很多方法可以解决这个问题,这也取决于您要让 Lambda 保持多忙,这里是 link.
我们实际上创建了一个 cloudformation 和一个 jar,我们组织内部的任何人都可以使用它在任何 table 上开始复制。出于安全考虑,将无法共享。
请查看此 link 了解更多详情。
这应该是可能的
- 在启用流的源帐户中配置 DynamoDB table
- 在同一账户(源账户)中创建 Lambda 函数并将其与 DDB Stream 集成
- 创建跨账户角色,即在目标账户中
DynamoDBCrossAccountRole
有权对目标 DDB table 执行必要的操作(此角色和目标 DDB table 在同一个帐户)
- 除了 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 进行操作
将数据从一个帐户中的 DDB table 复制到另一个帐户的最简单方法是什么(最简单意味着服务维护开销较少。如果可能,更喜欢无服务器方法),最好是以无服务器方式(因此没有使用数据管道的计划作业)。
我正在探索使用 DynamoDB 流的可能性,但是这个旧的
我正在考虑的另一个选项:更新 Firehose 转换 lambda,该 lambda 操作然后将数据插入 DynamoDB table 以将其发布到启用跨账户交付的 Kinesis 流,触发将进一步处理数据的 Lambda根据需要。
我们使用 DynamoDB 流和 Lambda 为黑客马拉松任务创建了跨账户复制系统。
不过,由于 Lambdas coldstart 问题,您可能会在记录中看到一些延迟。
有很多方法可以解决这个问题,这也取决于您要让 Lambda 保持多忙,这里是 link.
我们实际上创建了一个 cloudformation 和一个 jar,我们组织内部的任何人都可以使用它在任何 table 上开始复制。出于安全考虑,将无法共享。
请查看此 link 了解更多详情。
这应该是可能的
- 在启用流的源帐户中配置 DynamoDB table
- 在同一账户(源账户)中创建 Lambda 函数并将其与 DDB Stream 集成
- 创建跨账户角色,即在目标账户中
DynamoDBCrossAccountRole
有权对目标 DDB table 执行必要的操作(此角色和目标 DDB table 在同一个帐户) - 除了 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 进行操作