我有以下Python代码可连接到AWS中的DynamoDB表:
# import requests
from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr
# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return str(o)
return super(DecimalEncoder, self).default(o)
def run():
dynamodb = boto3.resource('dynamodb', region_name='ap-southeast-2')
table = dynamodb.Table('work-gtfsr-tripupdates-dev-sydt')
response = table.query(
# ProjectionExpression="#yr, title, info.genres, info.actors[0]", #THIS IS A SELECT STATEMENT
# ExpressionAttributeNames={"#yr": "year"}, # Expression Attribute Names for Projection Expression only. #SELECT STATEMENT RENAME
KeyConditionExpression=Key('pingEpochTime').eq(1554016605) & Key('entityIndex').between(0, 500)
)
for i in response[u'Items']:
print(json.dumps(i, cls=DecimalEncoder))
run()
当我连接到我的个人AWS账户(通过AWS CLI进行身份验证)时,确认以下代码可以工作,但是当我通过AWS-ADFS进行身份验证时,以下代码在防火墙后不起作用。当我运行代码以连接到公司AWS实例时,出现错误:
botocore.exceptions.ClientError: An error occurred (UnrecognizedClientException) when calling the Query operation: The security token included in the request is invalid.
当我运行'aws-adfs login
'脚本(确认可以运行)时,它似乎正确地填充了我的主驱动器中的.aws文件夹,并且在过去部署Lambda函数时也可以使用。我应该在代码中做一些事情来容纳aws-adfs会话令牌吗?
答案 0 :(得分:0)
在另一个Stack Overflow页面上发现,Boto库显然需要〜/ .aws / credentials文件中的“ [default]
”条目。
我通过使用名为“默认”的配置文件进行身份验证来测试了aws-adfs登录脚本,现在一切正常。
答案 1 :(得分:0)
使用boto3,您需要为您的资源设置会话。
session = boto3.session.Session(profile_name="other_name")
dynamodb = session.resource('dynamodb', region_name='ap-southeast-2')
"other_name"
是经过身份验证的个人资料的名称。