我正在关注 AWS 文档,了解如何将 DDB 表从一个账户转移到另一个账户。有两个步骤:
我能够迈出第一步。不幸的是,说明没有说明如何执行第二步。我已经使用过 Glue 几次,但是控制台 UI 对用户非常不友好,我不知道如何实现它。
有人可以解释一下如何将数据从S3导入到DDB吗?
您可以使用 Glue studio 生成脚本。
登录AWS
转到胶水
前往胶水工作室
设置源,基本上指向S3 然后使用类似下面的内容,这是一个 dynamo 数据库,其中 pk 和 sk 作为复合主键
这只是映射到 Dataframe 并将其写入 DynamoDB
ApplyMapping_node2 = ApplyMapping.apply(
frame=S3bucket_node1,
mappings=[
("Item.pk.S", "string", "Item.pk.S", "string"),
("Item.sk.S", "string", "Item.sk.S", "string")
],
transformation_ctx="ApplyMapping_node2"
)
S3bucket_node3 = glueContext.write_dynamic_frame.from_options(
frame=ApplyMapping_node2,
connection_type="dynamodb",
connection_options={"dynamodb.output.tableName": "my-target-table"}
}
我刚刚使用 AWS Glue 来实现此目的。您需要为 Glue 服务创建一个新的 IAM 角色,它应该有权访问 S3 和 DynamoDB。
def MyTransform(glueContext, dfc) -> DynamicFrameCollection:
S3bucket_node = dfc["AmazonS3_node123456789"]
ApplyMapping_node2 = ApplyMapping.apply(
frame=S3bucket_node,
mappings=[
("Item.digest.S", "string", "digest", "string"),
("Item.locale.S", "string", "locale", "string"),
("Item.value.S", "string", "value", "string"),
("Item.translation.S", "string", "translation", "string"),
("Item.created_at.S", "string", "created_at", "string"),
],
transformation_ctx="ApplyMapping_node2"
)
S3bucket_node3 = glueContext.write_dynamic_frame.from_options(
frame=ApplyMapping_node2,
connection_type="dynamodb",
connection_options={"dynamodb.output.tableName": "<destination-dynamo-tablename>"}
)
return DynamicFrameCollection({"S3bucket_node3": S3bucket_node3}, glueContext)
将“AmazonS3_node123456789”替换为您的 S3 节点 ID(您可以在脚本中找到您的 ID)并将映射列表替换为您的表字段。另外,不要忘记将“destination-dynamo-tablename”替换为您的 dynamo 表名称。