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

DynamoDB batch_writer未向表中写入数据问题排查

排查与修复方案

1. 修正变量名错误

你的函数参数是invocations_table,但代码中使用了未定义的table变量调用batch_writer()——这是最可能导致无数据写入的原因。如果table不是指向目标表的全局变量,这段代码要么抛出NameError,要么写入到错误的表中。

修复后的代码:

def write_invocations_to_dynamodb(self, invocations_table):
    with invocations_table.batch_writer() as batch:
        for invocation in self.invocations:
            item = {
                "conversationId": invocation.conversation_ulid,
                "invocationId": invocation.invocation_ulid,
                "modelId": invocation.model_id,
                "modelVersionId": invocation.model_version_id,
                "systemPrompt": invocation.system_prompt,
                "isContextTrimmed": invocation.is_context_trimmed,
                "userInput": invocation.user_input,
                "modelOutput": invocation.model_output
            }
            logger.info(f"Inserting item:{item}")
            batch.put_item(Item=item)

2. 检查数据源是否为空

查看CloudWatch日志中是否有Inserting item:的输出。如果没有,说明self.invocations是空列表,没有数据可写入。需要确认调用该函数前,self.invocations已正确填充调用记录。

3. 验证表主键匹配

确保你的item包含目标DynamoDB表定义的分区键(及排序键,若有)。如果缺失主键字段,DynamoDB会抛出ValidationException,但如果代码未捕获并打印异常,可能看不到错误。可以添加异常捕获排查:

def write_invocations_to_dynamodb(self, invocations_table):
    try:
        with invocations_table.batch_writer() as batch:
            for invocation in self.invocations:
                item = {
                    "conversationId": invocation.conversation_ulid,
                    "invocationId": invocation.invocation_ulid,
                    "modelId": invocation.model_id,
                    "modelVersionId": invocation.model_version_id,
                    "systemPrompt": invocation.system_prompt,
                    "isContextTrimmed": invocation.is_context_trimmed,
                    "userInput": invocation.user_input,
                    "modelOutput": invocation.model_output
                }
                logger.info(f"Inserting item:{item}")
                batch.put_item(Item=item)
    except Exception as e:
        logger.error(f"Error writing to DynamoDB: {str(e)}")
        raise

4. 确认IAM权限配置

确保执行该函数的IAM角色拥有dynamodb:BatchWriteItem权限,且资源ARN正确指向目标表。权限策略示例:

{
    "Effect": "Allow",
    "Action": "dynamodb:BatchWriteItem",
    "Resource": "arn:aws:dynamodb:你的区域:你的账号ID:table/你的目标表名"
}

5. 检查目标表是否正确

如果table是全局变量,确认它指向的是你正在检查的DynamoDB表,而非测试环境或其他无关表。

内容的提问来源于stack exchange,提问作者debobrata poddar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:15:11