通过DAX写入AWS DynamoDB触发DefineAttributeListId权限报错如何解决
报错触发原因
- IAM权限缺失:
DefineAttributeListId是DAX专属的操作权限,仅写入、更新这类需要处理新属性的写操作会调用该接口,读操作(查询、扫描)不需要调用该接口,所以你之前查询数据正常,写入时才触发权限报错。你当前使用的AWS IAM身份(用户/角色)未配置dax:DefineAttributeListId权限。 - 代码存在语法和逻辑错误:
with amazondax.AmazonDaxClient.resource(...) as dax行末尾缺少冒号,且后续获取表时错误调用了未定义的dynamodb.Table,应该用你实例化的dax对象操作表,否则请求无法正常通过DAX客户端发起。
修复方案
- 补全IAM权限
给你的AWS IAM身份(用户/角色)添加如下权限策略,如需最小权限控制,可将Resource字段替换为你的DAX集群ARN、DynamoDB表的对应ARN:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dax:DefineAttributeListId", "dax:PutItem", "dynamodb:PutItem" ], "Resource": "*" } ] }
- 修正代码逻辑和语法
修正后的可运行代码如下:
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)
- 本地环境额外验证:如果你用的是本地DAX仿真环境做测试,可临时关闭仿真服务的权限校验,避免额外的配置限制导致报错。
内容的提问来源于stack exchange,提问作者Python master
相关产品推荐
相关产品推荐

