You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS SDK迁移MySQL数据至DynamoDB无报错但未上传问题

排查MySQL到DynamoDB无报错但未写入数据的问题

以下是几个关键排查方向和修复建议:

1. 检查批量写入返回的未处理项

batchWriteItem不会因部分写入失败抛出异常,只会在返回结果中包含UnprocessedItems字段。你的代码目前未检查这部分内容,可能存在静默失败的情况。修改代码:

try {
    const data = await dynamoDB.batchWriteItem(batchWriteParams).promise();
    console.log('Success Items deployed to DynamoDB', data);
    // 新增:检查未处理项
    if (Object.keys(data.UnprocessedItems).length > 0) {
        console.error('存在未处理的项,需重试', data.UnprocessedItems);
        // 可在此添加重试逻辑,根据AWS建议最多重试5次
    }
} catch (err) {
    console.error('Error', err);
}

2. 确认MySQL查询是否返回有效数据

在生成DynamoDB写入项之前,先打印MySQL查询结果,确认是否成功获取到数据:

const result = await db.query(query);
console.log('MySQL查询结果', result); // 确认数组内有数据

同时检查你的Database类的query方法是否正确封装为Promise——如果是回调模式,await会拿到undefined,导致dynamoDBItems为空数组,自然不会写入任何数据。

3. 核对DynamoDB主键配置

你的PK写的是固定值AppsAli#ID,需确认是否与目标DynamoDB表的主键定义匹配:

  • 如果表的主键是PK(分区键)+SK(排序键)的组合,需确保PK+SK的组合是唯一的(或符合业务逻辑);
  • 注释提到"PK format: TableNameid",是否应该将PK设置为动态值?比如AppsAli#${row.ID}?需根据表的实际设计调整。

4. 验证AWS SDK区域配置

确保DynamoDB客户端初始化时指定了正确的区域,与你的目标表所在区域一致:

const dynamoDB = new AWS.DynamoDB({ region: 'us-east-1' }); // 替换为你的表所在区域

如果未指定区域,SDK会从环境变量或本地凭证文件读取,可能导致写入到错误区域的表(而你查看的是另一个区域的表)。

5. 检查IAM权限

确认执行代码的IAM实体(用户/角色)拥有dynamodb:BatchWriteItem权限,且资源范围包含目标表的ARN(格式为arn:aws:dynamodb:区域:账号ID:table/xyz)。部分权限不足的场景下,不会抛出明确错误,但会导致写入失败。

6. 确认表名和表存在性

检查tableName变量中的xyz是否是目标表的正确名称,且该表确实存在于指定区域中。

内容的提问来源于stack exchange,提问作者Ali Haydar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:26:41