我在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. Emacs客戶端:C-x k和C-x之間的區別#
- 11. Oracle客戶端和Oracle數據庫之間的確切區別
- 12. Bonjour - 客戶端和服務器之間的區別?
- 13. Web客戶端和Web服務之間的區別?
- 14. SVN客戶端和API之間的主要區別是什麼?
- 15. 客戶端使用REST和HTTP庫之間的任何區別?
- 16. net35和net35-客戶端Facebook c#SDK之間的區別
- 17. IIS 7和ASP.NET MVC客戶端緩存之間的區別
- 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客戶端之間的語音通話