Skip to content

配置

运行前确认:

  • 源表已开启 DynamoDB Streams,视图类型为 NEW_IMAGENEW_AND_OLD_IMAGES
  • 目标表已创建,分区键和排序键(如有)的名称及类型与源表一致。

这项要求只涉及键属性。DynamoDB 的非键属性无须在建表时定义,ddb-migrate 会保留这些属性的类型和值。

配置文件

ddb-migrate.toml

toml
# ddb-migrate 先全量扫描 AWS DynamoDB 源表,再持续读取 DynamoDB Streams。

[source]
access_key_id = ""                        # AK/SK 都为空时使用 AWS 默认凭证链
secret_access_key = ""
region = "us-east-1"                     # 必填,不读取 AWS_REGION
table = "source_table"
checkpoint_enabled = true                 # 启用断点续传
checkpoint_file_path = "checkpoint.json"
scan_segments = 4                         # 全量 Scan 并行分段数

[target]
access_key_id = "username:password"        # Tair 使用“账号:密码”格式
secret_access_key = "dummy"               # 固定占位值
region = "us-east-1"                     # 自定义 endpoint 可省略,默认 us-east-1
endpoint_url = "http://your-endpoint:80"  # 自定义 endpoint 默认跳过 TLS 验证
table = "target_table"
workers = 4                                # 目标端并发写入 worker 数

示例列出全部字段。字符串字段写成空字符串与省略该字段的效果相同;布尔和整数项直接省略。具体结果见下表。[source][target] 的凭证相互独立。

source

迁移源端固定访问 AWS 官方 DynamoDB 和 DynamoDB Streams,不提供 endpoint_url

配置项作用省略条件与结果
access_key_idsecret_access_key源端 AWS 凭证使用 AWS 默认凭证链时,两项同时省略或同时留空。使用固定 AK/SK 时两项都要填写;只填写一项会导致启动失败。
region源表所在的 AWS Region不能省略。即使运行环境设置了 AWS_REGION,仍需在 TOML 中填写。
table源表名称不能省略。
checkpoint_enabled是否持久化全量和增量进度可以省略,默认 false。关闭后中断不能续传,重启会重新执行全量 Scan。
checkpoint_file_pathcheckpoint 文件路径可以省略,默认 checkpoint.jsoncheckpoint_enabled = false 时不使用该文件。
scan_segments全量 Scan 的并行分段数可以省略,默认 4;小于或等于 0 时也使用 4。修改分段数后,未完成的旧 Scan checkpoint 不能继续使用,程序会重新扫描源表。

target

配置项作用省略条件与结果
access_key_idsecret_access_key目标端凭证AWS 目标端使用默认凭证链时,两项可以同时省略。Tair 目标端两项都要填写:access_key_id 使用“账号:密码”,secret_access_key 固定为 dummy。只填写一项会导致启动失败。
regionAWS 官方端点所在 Region,或自定义端点的签名 Regionendpoint_url 留空时不能省略。endpoint_url 非空时可以省略,默认使用 us-east-1。迁移到 Tair 时可以省略。
endpoint_url目标端 DynamoDB API 地址AWS 官方 DynamoDB 目标端可以省略,程序根据 region 选择官方端点。迁移到 Tair 时不能省略。
table目标表名称不能省略。
workers目标端并发写入 worker 数可以省略,默认 4;小于或等于 0 时也使用 4

迁移到 Tair 时,目标端最少需要填写 access_key_idsecret_access_keyendpoint_urltableregionworkers 可以省略。

AWS 凭证来源

配置文件中的 AK/SK 都非空时,程序只使用这组固定凭证。两项同时省略或留空时,程序使用 AWS SDK for Go v2 默认凭证链。

运行环境TOML 中的 AK/SK运行环境配置
环境变量两项同时省略或留空设置 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY;临时凭证同时设置 AWS_SESSION_TOKEN
Web Identity两项同时省略或留空由运行环境提供 Web Identity 配置,例如 EKS Pod 使用的 IAM 角色。
AWS Profile 或 IAM Identity Center两项同时省略或留空使用 ~/.aws/credentials~/.aws/config;通过 AWS_PROFILE 选择非默认 profile,并按所用方式完成登录。
ECS 任务角色两项同时省略或留空为 ECS Task 配置 IAM 角色。
EC2 实例角色两项同时省略或留空为 EC2 实例配置 IAM 角色,SDK 通过实例元数据服务取得临时凭证。

默认凭证链依次检查环境变量、Web Identity、AWS shared credentials/config、ECS 任务角色和 EC2 实例角色,并使用首先取得的凭证。因此,在已绑定实例角色的 EC2 上设置 AK/SK 环境变量后,环境变量会覆盖实例角色;设置 AWS_PROFILE 的同时存在 AK/SK 环境变量时,环境变量会覆盖 profile。

例如,在已绑定 IAM 角色的 EC2 上运行时,可以删除 [source] 中的 access_key_idsecret_access_key,保留 regiontable。如果目标端是 Tair,[target] 中的 Tair 账号密码和 dummy 仍需填写。

使用命名 profile 的示例:

shell
AWS_PROFILE=production ./ddb-migrate ddb-migrate.toml

如果默认凭证链没有找到凭证,程序会在首次访问 AWS API 时失败。完整加载顺序见 Configure the SDK - AWS SDK for Go v2

启动

shell
./ddb-migrate ddb-migrate.toml

Released under the MIT License.