从boto2迁移到3

时间:2016-06-02 12:30:55

标签: python-3.x boto boto3

我有这个代码使用boto2,我需要移植到boto3,坦率地说,我在boto3文档中有点遗失:

connection = boto.connect_s3(host=hostname,
                             aws_access_key_id=access_key,
                             aws_secret_access_key=secret_key,
                             is_secure=False,
                             calling_format=boto.s3.connection.OrdinaryCallingFormat())
s3_bucket = connection.get_bucket(bucket_name)

我还需要与其他不是S3的对象商店一起工作。

2 个答案:

答案 0 :(得分:1)

import boto3

s3 = boto3.client('s3', aws_access_key_id=access_key,
                  aws_secret_access_key=secret_key,
                  endpoint_url=hostname, use_ssl=False)
response = s3.get_bucket(Bucket=bucket_name)

client docs

s3 docs

答案 1 :(得分:0)

boto3和boto不兼容。大多数命名都不向后兼容。

您必须阅读boto3文档才能重新创建脚本。好消息是,Boto3文档比boto更好,虽然不是很棒(很多棘手的参数示例没有提供)。

如果你有一些使用旧功能的应用程序,你应该为它创建一个包装器代码,以使切换透明。

因此,您通过包装器实例化任何对象存储连接,然后实例化各种存储桶以使用不同的连接器。这是一些想法。

#AWS 
# object_wrapper is a your bucket wrapper that All the application willc all 
from object_wrapper import object_bucket
from boto3lib.s3  import s3_connector
connector = s3_connector()
bucket = object_bucket(BucketName="xyz",  Connector=connector)


# say you use boto2 to connect to Google object store
from object_wrapper import object_bucket
from boto2lib.s3 import s3_connector 
connector = s3_connector()
bucket = object_bucket(BucketName="xyz",  Connector=connector)

# say for Azure
from object_wrapper import object_bucket
from azure.storage.blob import BlockBlobService
connector = BlockBlobService(......)
bucket = object_bucket(BucketName="xyz",  Connector=connector)