标签: boto3

模拟boto3 S3客户端方法Python

我正在尝试从boto3 s3客户端对象模拟一个单一方法来抛出异常.但我需要这个类的所有其他方法正常工作.

这样我可以在执行upload_part_copy时测试单个异常测试并发生错误

第一次尝试

import boto3
from mock import patch

with patch('botocore.client.S3.upload_part_copy', side_effect=Exception('Error Uploading')) as mock:
    client = boto3.client('s3')
    # Should return actual result
    o = client.get_object(Bucket='my-bucket', Key='my-key')
    # Should return mocked exception
    e = client.upload_part_copy()
Run Code Online (Sandbox Code Playgroud)

但是,这会产生以下错误:

ImportError: No module named S3
Run Code Online (Sandbox Code Playgroud)

第二次尝试

在查看了botocore.client.py源代码后,我发现它正在做一些聪明的事情并且该方法upload_part_copy不存在.我发现它似乎在调用,BaseClient._make_api_call所以我试图嘲笑它

import boto3
from mock import patch

with patch('botocore.client.BaseClient._make_api_call', side_effect=Exception('Error Uploading')) as mock:
    client = boto3.client('s3')
    # Should return actual result
    o = client.get_object(Bucket='my-bucket', Key='my-key')
    # Should return mocked exception
    e …
Run Code Online (Sandbox Code Playgroud)

python mocking boto botocore boto3

51
推荐指数
5
解决办法
4万
查看次数

使用boto3完全扫描dynamoDb

我的桌子大约是220mb,里面有25万条记录.我正在尝试将所有这些数据都放到python中.我意识到这需要一个分块的批处理过程并循环,但我不知道如何设置批次从前一个停止的地方开始.

有没有办法过滤我的扫描?从我读到的,加载后发生过滤,加载停止在1mb,所以我实际上无法扫描新对象.

任何援助将不胜感激.

import boto3
dynamodb = boto3.resource('dynamodb',
    aws_session_token = aws_session_token,
    aws_access_key_id = aws_access_key_id,
    aws_secret_access_key = aws_secret_access_key,
    region_name = region
    )

table = dynamodb.Table('widgetsTableName')

data = table.scan()
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services amazon-dynamodb boto3

48
推荐指数
8
解决办法
4万
查看次数

Boto3资源和客户端是否相同?什么时候使用?

Boto3 Mavens,

客户端和资源之间的功能差异(如果有)是什么?

它们在功能上是否相同?

在什么条件下你会选择调用Boto3资源与客户端(反之亦然)?

虽然我已经努力通过RTM来回答这个问题......但遗憾的是,理解两者之间的功能差异使我望而却步.

你的意见?

许多人,许多的感谢!

飞机Wryter

python amazon-web-services boto3

48
推荐指数
1
解决办法
5284
查看次数

如何使用boto3将文件上传到S3并公开?

我可以使用以下方式上传图像文件:

s3 = session.resource('s3')
bucket = s3.Bucket(S3_BUCKET)
bucket.upload_file(file, key)
Run Code Online (Sandbox Code Playgroud)

但是,我也希望公开这个文件.我尝试查找一些函数来为文件设置ACL,但似乎boto3已更改其API并删除了一些函数.有没有办法在最新版本的boto3中做到这一点?

python amazon-s3 boto boto3

43
推荐指数
3
解决办法
2万
查看次数

无法安装boto3

我在虚拟环境中安装boto3时遇到问题.

我已经完成了文件所说的内容.首先我激活了虚拟环境.然后我做了一个:

Sudo pip install boto3
Run Code Online (Sandbox Code Playgroud)

现在我进入python

>> import boto3
ImportError: No module named boto3
Run Code Online (Sandbox Code Playgroud)

但是如果我导入boto,它就可以了

>> import boto
>> boto.Version
'2.38.0'
Run Code Online (Sandbox Code Playgroud)

为什么安装boto3时会安装boto 2.38.我试着关闭终端并重新打开它.我应该重启Ubuntu机器吗?

python virtualenv boto3

38
推荐指数
6
解决办法
10万
查看次数

使用boto3从S3存储桶中读取文件内容

我这样读了我的S3桶中的文件名

objs = boto3.client.list_objects(Bucket='my_bucket')
    while 'Contents' in objs.keys():
        objs_contents = objs['Contents']
        for i in range(len(objs_contents)):
            filename = objs_contents[i]['Key']
Run Code Online (Sandbox Code Playgroud)

现在,我需要获取文件的实际内容,类似于open(filename).readlines().什么是最好的方法?

python amazon-s3 amazon-web-services boto3

35
推荐指数
5
解决办法
8万
查看次数

如何轻松确定Boto 3 S3存储桶资源是否存在?

例如,我有这个代码:

import boto3

s3 = boto3.resource('s3')

bucket = s3.Bucket('my-bucket-name')

# Does it exist???
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services boto3

32
推荐指数
4
解决办法
3万
查看次数

获取boto3中的当前用户帐户ID

我需要在脚本中获取"当前用户" 的帐户IDboto3.到目前为止,我最好的解决方案是解析当前用户arn:

>>> import boto3
>>> account_id = boto3.resource('iam').CurrentUser().arn.split(':')[4]
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更"轻量级"的方法.事实上

>>> timeit.timeit("boto3.resource('iam').CurrentUser().arn",
... 'import boto3', number=10)
4.8895583080002325
Run Code Online (Sandbox Code Playgroud)

我实际上不需要CurrentUser脚本中的资源.

botocore boto3

32
推荐指数
1
解决办法
2万
查看次数

如何检查DynamoDB表是否存在?

我是boto3中的新用户,我正在使用DynamoDB.

我经历了DynamoDB api,我找不到任何方法告诉我表是否已经存在.

处理此问题的最佳方法是什么?

我应该尝试创建一个新表并使用try catch包装它吗?

python amazon-dynamodb boto3

32
推荐指数
5
解决办法
3万
查看次数

s3网址 - 获取存储桶名称和路径

我有一个变量,它有aws s3 url

s3://bucket_name/folder1/folder2/file1.json
Run Code Online (Sandbox Code Playgroud)

我想在变量中获取bucket_name并在另一个变量中使用/folder1/folder2/file1.json.我尝试了正则表达式,可以得到如下所示的bucket_name,不确定是否有更好的方法.

m = re.search('(?<=s3:\/\/)[^\/]+', 's3://bucket_name/folder1/folder2/file1.json')
print(m.group(0))
Run Code Online (Sandbox Code Playgroud)

我怎么得到其余的ie - folder1/folder2/file1.json?

我检查了是否有boto3功能从URL中提取bucket_name和key,但找不到它.

python boto3

32
推荐指数
8
解决办法
2万
查看次数