我在Ubuntu 16.04 LTS中使用Python 2.7.12。我正在学习如何使用python中的boto3从以下链接https://boto3.readthedocs.io/en/latest/guide/quickstart.html#using-boto-3。我怀疑何时使用资源,客户端,会话及其功能。资源,客户端和会话之间的区别..?
17
A
回答
1
要添加到其他答案,特别是在比较客户端和资源时。
客户:
- 低级别的服务访问从服务描述
- 产生
- 暴露botocore客户端向显影剂
- 通常1映射:1与服务API
- 蛇形的方法名称(例如ListBuckets API => list_buckets方法)
这里的客户机级访问到S3桶的对象(至多1000 **)的例子:
import boto3
client = boto3.client('s3')
response = client.list_objects(Bucket='mybucket')
for content in response['Contents']:
obj_dict = client.get_object(Bucket='mybucket', Key=content['Key'])
print(content['Key'], obj_dict['LastModified'])
**你将不得不使用一个paginator ,或实现自己的循环中,调用list_objects()反复延续标记,如果有超过1000
资源:
- 更高级别,从资源描述
- 使用标识符和属性
- 有动作(对资源的操作)
- 暴露子资源和集合
下面是一个生成面向对象的API
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
for obj in bucket.objects.all():
print(obj.key, obj.last_modified)
请注意,在这种情况下,您不必进行第二次API调用即可获取对象;他们可以作为一个收集桶。这些子资源的集合是延迟加载的。
会议:
- 存储配置信息(主要是证书和选定区域)
- 允许您创建服务客户端和资源
一个有用的资源,以了解更多有关这些boto3概念是introductory re:Invent video。
25
我会试着尽可能简单地解释它。所以不能保证实际条款的准确性。
Session是启动到AWS服务的连接的地方。例如。下面是使用默认的凭据配置文件默认会话(如〜/ .aws /凭证,或使用IAM实例简介假设你的EC2)
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
因为默认会话限制到配置文件或实例配置文件中,有时你需要使用自定义会话来覆盖默认会话配置(例如,region_name,endpoint_url等),例如
# custom resource session must use boto3.session to do the override
my_west_session = boto3.session(region_name = 'us-west-2')
my_east_sesison = boto3.session(region_name = 'us-east-1')
backup_s3 = my_west_session.resource('s3')
video_s3 = my_east_sesison.resource('s3')
# you have two choices of create custom client session.
backup_s3c = my_west_session.client('s3')
video_s3c = boto3.client("s3", region_name = 'us-east-1')
Resource:这是被推荐使用的高级别服务类。这允许您绑定特定的AWS资源并将其传递,因此您只需使用此抽象,而不用担心目标服务指向的是什么。正如你从会话部分注意到的那样,如果你有一个自定义会话,你只需传递这个抽象对象,而不用担心所有自定义区域等等。以下是一个复杂的例子 E.g.
import boto3
my_west_session = boto3.session(region_name = 'us-west-2')
my_east_sesison = boto3.session(region_name = 'us-east-1')
backup_s3 = my_west_session.resource("s3")
video_s3 = my_east_sesison.resource("s3")
backup_bucket = backup_s3.Bucket('backupbucket')
video_bucket = video_s3.Bucket('videobucket')
# just pass the instantiated bucket object
def list_bucket_contents(bucket):
for object in bucket.objects.all():
print(object.key)
list_bucket_contents(backup_bucket)
list_bucket_contents(video_bucket)
Client是低电平类对象。对于每个客户端调用,您需要明确指定定位资源,指定的服务目标名称必须通过很长时间。你将失去抽象能力。
例如,如果您只处理默认会话,则看起来类似于boto3.resource。
import boto3
s3 = boto3.client('s3')
def list_bucket_contents(bucket_name):
for object in s3.list_objects_v2(Bucket=bucket_name) :
print(object.key)
list_bucket_contents('Mybucket')
但是,如果要列出来自不同区域的存储区中的对象,则需要指定客户端所需的显式存储区参数。
import boto3
backup_s3 = my_west_session.client('s3',region_name = 'us-west-2')
video_s3 = my_east_sesison.client('s3',region_name = 'us-east-1')
# you must pass boto3.session.client and the bucket name
def list_bucket_contents(s3session, bucket_name):
for object in s3session.list_objects_v2(Bucket=bucket_name) :
print(object.key)
list_bucket_contents(backup_s3, 'backupbucket')
list_bucket_contents(video_s3 , 'videobucket')
相关问题
- 1. Keycloak中客户端ID和客户端ID之间的区别
- 2. Oracle lnstant客户端和Oracle客户端之间的区别
- 3. 客户端和用户代理之间的区别
- 4. 会话和缓存之间的区别
- 5. 轨道路由中的资源和资源之间的区别?
- 6. 应用程序客户端和独立客户端之间的区别
- 7. python tcp socketserver和windows和unix客户端之间的区别
- 8. 项目资源和本地资源映像之间的区别
- 9. CGI ::客户端之间的会话共享会话!
- 10. IIS 7和ASP.NET MVC客户端缓存之间的区别
- 11. Oracle客户端和Oracle数据库之间的确切区别
- 12. net35和net35-客户端Facebook c#SDK之间的区别
- 13. Emacs客户端:C-x k和C-x之间的区别#
- 14. Web客户端和Web服务之间的区别?
- 15. Bonjour - 客户端和服务器之间的区别?
- 16. SVN客户端和API之间的主要区别是什么?
- 17. 客户端使用REST和HTTP库之间的任何区别?
- 18. 的java:HTTP服务器和客户端之间的HTTP会话
- 19. MySQL服务器和MySQL客户端之间有什么区别
- 20. Node.js和客户端会话
- 21. PHP会话和自制会话之间的区别?
- 22. 在WCF和Silverlight Http客户端之间共享ASP.NET会话ID
- 23. 客户端会话
- 24. Django客户端和Extranet用户区别
- 25. 了解客户端呈现和服务器端呈现之间的区别?
- 26. 客户端和服务器端读取文件之间的区别
- 27. JSP/ASP会话对象会话和网站用户帐户会话之间的区别?他们不一样吗?
- 28. 刷新客户端资源
- 29. 服务器和客户端的区别
- 30. Android客户端和(JMF)PC客户端之间的语音通话