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

DynamoDB与MobileHub异常:按官方文档配置后存数据报错

解决DynamoDB保存时的AWSCognitoIdentityErrorDomain Code=0错误

这个错误通常和Cognito身份认证、权限配置或者SDK初始化流程有关,我帮你梳理几个最常见的排查和解决方向:

1. 检查Cognito身份池的IAM权限

这是最常见的原因——你的身份池关联的未认证/认证角色没有足够的DynamoDB操作权限。

  • 登录AWS控制台,进入IAM -> 角色,找到你身份池对应的未认证角色(名字通常是Cognito_你的身份池名Unauth_Role)
  • 编辑该角色的权限策略,确保包含DynamoDB的写入权限(比如PutItem),示例策略如下:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:GetItem",
                "dynamodb:Scan"
            ],
            "Resource": "arn:aws:dynamodb:你的资源区域:你的AWS账户ID:table/你的表名"
        }
    ]
}
  • 如果你的应用允许用户登录,还要检查认证角色的权限是否配置正确。

2. 确认身份池ID与区域配置正确

  • 检查项目中的awsconfiguration.json文件,确保IdentityManager.Default.CognitoIdentityPoolId和AWS控制台里的身份池ID完全一致,区域也要和你的DynamoDB表、身份池所在区域匹配。
  • 如果是手动初始化SDK,确保代码中指定的区域和资源区域一致,比如iOS中:
let configuration = AWSServiceConfiguration(region: .usEast1, credentialsProvider: AWSMobileClient.default())
AWSDynamoDB.register(with: configuration!, forKey: "default")

3. 确保SDK初始化完成后再操作DynamoDB

很多时候错误是因为DynamoDB操作在SDK初始化完成前就执行了。比如iOS中,要在AWSMobileClient的初始化回调里再执行保存操作:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    AWSMobileClient.default().initialize { userState, error in
        guard error == nil else {
            print("SDK初始化失败: \(error!.localizedDescription)")
            return
        }
        // 初始化完成后再调用保存方法
        self.saveTestItem()
    }
    return true
}

func saveTestItem() {
    let testItem = TestModel()
    testItem.partitionKey = "user123"
    testItem.content = "Hello DynamoDB"
    
    let mapper = AWSDynamoDBObjectMapper.default()
    mapper.save(testItem) { error in
        if let error = error {
            print("保存失败: \(error)")
        } else {
            print("数据保存成功!")
        }
    }
}

4. 验证数据模型与表结构匹配

  • 确保你的数据模型类(比如iOS中继承自AWSDynamoDBObjectModel的类)的主键字段和DynamoDB表的分区键、排序键完全对应,数据类型也要一致(比如表的分区键是字符串,模型里不能用数字类型)。
  • 检查模型类的@objcMembers、dynamoDBTableName、primaryKey等注解是否正确配置。

如果以上步骤都排查过还是有问题,可以打开AWS SDK的日志功能,查看更详细的错误信息,方便定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:34:46