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

通过DAX写入AWS DynamoDB触发DefineAttributeListId权限报错如何解决

报错触发原因
  • IAM权限缺失:DefineAttributeListId是DAX专属的操作权限,仅写入、更新这类需要处理新属性的写操作会调用该接口,读操作(查询、扫描)不需要调用该接口,所以你之前查询数据正常,写入时才触发权限报错。你当前使用的AWS IAM身份(用户/角色)未配置dax:DefineAttributeListId权限。
  • 代码存在语法和逻辑错误:with amazondax.AmazonDaxClient.resource(...) as dax行末尾缺少冒号,且后续获取表时错误调用了未定义的dynamodb.Table,应该用你实例化的dax对象操作表,否则请求无法正常通过DAX客户端发起。
修复方案
  1. 补全IAM权限
    给你的AWS IAM身份(用户/角色)添加如下权限策略,如需最小权限控制,可将Resource字段替换为你的DAX集群ARN、DynamoDB表的对应ARN:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dax:DefineAttributeListId",
                "dax:PutItem",
                "dynamodb:PutItem"
            ],
            "Resource": "*"
        }
    ]
}
  1. 修正代码逻辑和语法
    修正后的可运行代码如下:
import amazondax

def put_movie(title, year, plot, rating):
    with amazondax.AmazonDaxClient.resource(endpoint_url="http://localhost:8000") as dax:
        table = dax.Table('Movies')
        response = table.put_item(
           Item={
                'year': year,
                'title': title,
                'info': {
                    'plot': plot,
                    'rating': rating
                }
            }
        )
        return response

if __name__ == '__main__':
    movie_resp = put_movie("The Big New Movie", 2015,
                           "Nothing happens at all.", 0)
  1. 本地环境额外验证:如果你用的是本地DAX仿真环境做测试,可临时关闭仿真服务的权限校验,避免额外的配置限制导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:21:02