为什么这个 dynamodb 查询失败 'Requested resource not found'?
Why this dynamodb query failed with 'Requested resource not found'?
我已经仔细检查过该项目是否存在于 dynamodb table 中。 id
是默认哈希键。
我想在这段代码中使用 main
函数来检索内容:
import boto.dynamodb2
from boto.dynamodb2 import table
table='doc'
region='us-west-2'
aws_access_key_id='YYY'
aws_secret_access_key='XXX'
def get_db_conn():
return boto.dynamodb2.connect_to_region(
region,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key)
def get_table():
return table.Table(table, get_db_conn())
def main():
tbl = get_table()
doc = tbl.get_item(id='4d7a73b6-2121-46c8-8fc2-54cd4ceb2a30')
print doc.keys()
但是我却得到了这个异常:
File "scripts/support/find_doc.py", line 31, in <module>
main()
File "scripts/support/find_doc.py", line 33, in main
doc = tbl.get_item(id='4d7a73b6-2121-46c8-8fc2-54cd4ceb2a30')
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/dynamodb2/table.py", line 504, in get_item
consistent_read=consistent
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1065, in get_item
body=json.dumps(params))
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 2731, in make_request
retry_handler=self._retry_handler)
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/connection.py", line 953, in _mexe
status = retry_handler(response, i, next_sleep)
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 2774, in _retry_handler
data)
boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
{u'message': u'Requested resource not found', u'__type': u'com.amazonaws.dynamodb.v20120810#ResourceNotFoundException'}
为什么我会收到此错误消息?
我正在使用 boto
版本 2.34
问题出在这段代码中:
def get_table():
return table.Table(table, get_db_conn())
应该是
def get_table():
return table.Table(table, connection=get_db_conn())
注意 connection
命名参数
如果您有范围键,则必须在 get_item 中指定,如下所示:
get_item(timestamp=Decimal('1444232509'), id='HASH_SHA1')
在我的 table 包中,我有一个索引 (id) 和一个范围键(时间戳)。
我收到此错误是因为我连接到错误的区域。
要检查您的 table 区域,请转到 table 的概览选项卡并向下滚动到亚马逊资源名称 (ARN) 字段。
我的 ARN 以 arn:aws:dynamodb:us-east-2: 开头。这里'us-east-2'是我启动boto3客户端需要经过的区域
我已经仔细检查过该项目是否存在于 dynamodb table 中。 id
是默认哈希键。
我想在这段代码中使用 main
函数来检索内容:
import boto.dynamodb2
from boto.dynamodb2 import table
table='doc'
region='us-west-2'
aws_access_key_id='YYY'
aws_secret_access_key='XXX'
def get_db_conn():
return boto.dynamodb2.connect_to_region(
region,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key)
def get_table():
return table.Table(table, get_db_conn())
def main():
tbl = get_table()
doc = tbl.get_item(id='4d7a73b6-2121-46c8-8fc2-54cd4ceb2a30')
print doc.keys()
但是我却得到了这个异常:
File "scripts/support/find_doc.py", line 31, in <module>
main()
File "scripts/support/find_doc.py", line 33, in main
doc = tbl.get_item(id='4d7a73b6-2121-46c8-8fc2-54cd4ceb2a30')
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/dynamodb2/table.py", line 504, in get_item
consistent_read=consistent
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1065, in get_item
body=json.dumps(params))
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 2731, in make_request
retry_handler=self._retry_handler)
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/connection.py", line 953, in _mexe
status = retry_handler(response, i, next_sleep)
File "/Users/antkong/project-ve/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 2774, in _retry_handler
data)
boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
{u'message': u'Requested resource not found', u'__type': u'com.amazonaws.dynamodb.v20120810#ResourceNotFoundException'}
为什么我会收到此错误消息?
我正在使用 boto
版本 2.34
问题出在这段代码中:
def get_table():
return table.Table(table, get_db_conn())
应该是
def get_table():
return table.Table(table, connection=get_db_conn())
注意 connection
命名参数
如果您有范围键,则必须在 get_item 中指定,如下所示:
get_item(timestamp=Decimal('1444232509'), id='HASH_SHA1')
在我的 table 包中,我有一个索引 (id) 和一个范围键(时间戳)。
我收到此错误是因为我连接到错误的区域。
要检查您的 table 区域,请转到 table 的概览选项卡并向下滚动到亚马逊资源名称 (ARN) 字段。
我的 ARN 以 arn:aws:dynamodb:us-east-2: 开头。这里'us-east-2'是我启动boto3客户端需要经过的区域