python - संसाधन, ग्राहक और सत्र के बीच boto3 में अंतर?




(2)

मैं कोशिश करूँगा और इसे यथासंभव सरल समझाऊंगा। इसलिए वास्तविक शब्दों की सटीकता की कोई गारंटी नहीं है।

Session वह जगह है जहां AWS सेवाओं से कनेक्टिविटी शुरू की जाती है। उदाहरण के बाद डिफ़ॉल्ट सत्र है जो डिफ़ॉल्ट क्रेडेंशियल प्रोफ़ाइल का उपयोग करता है (जैसे ~ / .aws / क्रेडेंशियल, या IAM उदाहरण प्रोफ़ाइल का उपयोग करके अपने EC2 मान लें)

sqs = boto3.client('sqs')
s3 = boto3.resource('s3')

क्योंकि डिफ़ॉल्ट सत्र उस प्रोफ़ाइल या इंस्टेंस प्रोफ़ाइल की सीमा है जिसका उपयोग किया जाता है, कभी-कभी आपको डिफ़ॉल्ट सत्र कॉन्फ़िगरेशन को ओवरराइड करने के लिए कस्टम सत्र का उपयोग करने की आवश्यकता होती है (जैसे कि area_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 संसाधनों को बांधने और इसे पास करने की अनुमति देता है, इसलिए आप बस इस अमूर्तता का उपयोग चिंता से करते हैं जो लक्ष्य सेवाओं को इंगित करता है। जैसा कि आप सत्र भाग से नोटिस करते हैं, यदि आपके पास एक कस्टम सत्र है, तो आप इस अमूर्त वस्तु को सभी कस्टम क्षेत्र की चिंता करने के लिए पारित करते हैं, आदि। निम्नलिखित एक जटिल उदाहरण है

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):
   response = s3session.list_objects_v2(Bucket=bucket_name)
   if 'Contents'] in response:
     for obj in response['Contents']:
        print(obj['key'])

list_bucket_contents(backup_s3, 'backupbucket')
list_bucket_contents(video_s3 , 'videobucket') 

मैं Ubuntu 16.04 LTS में पायथन 2.7.12 का उपयोग कर रहा हूं। मैं निम्नलिखित लिंक से boto3 का उपयोग करना सीख रहा हूँ: https://boto3.readthedocs.io/en/latest/guide/quickstart.html#using-boto-3 । मेरा संदेह संसाधन, ग्राहक, या सत्र और उनकी संबंधित कार्यक्षमता का उपयोग करने के लिए है।


Client , Resource और Session बारे में कुछ और विस्तृत जानकारी यहाँ दी गई है।

ग्राहक:

  • निम्न-स्तरीय सेवा पहुंच
  • सेवा विवरण से उत्पन्न
  • डेवलपर को बोटोकोर क्लाइंट को उजागर करता है
  • आमतौर पर सेवा एपीआई के साथ 1: 1 के नक्शे
  • सभी सेवा संचालन ग्राहकों द्वारा समर्थित हैं
  • साँप-आवरण विधि के नाम (जैसे 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'])

** आपको 1000 से अधिक होने पर एक निरंतरता मार्कर के साथ list_objects () को बार-बार कॉल करते हुए, अपने पेजिनेटर का उपयोग करना होगा या अपने स्वयं के लूप को लागू करना होगा।

संसाधन:

  • उच्च-स्तरीय, ऑब्जेक्ट-ओरिएंटेड API
  • संसाधन विवरण से उत्पन्न
  • पहचानकर्ताओं और विशेषताओं का उपयोग करता है
  • कार्यों (संसाधनों पर संचालन)
  • सबसॉर्स और कलेक्शन को उजागर करता है
  • 100% एपीआई कवरेज प्रदान नहीं करता है

यहां S3 बाल्टी की वस्तुओं (सभी) में संसाधन-स्तरीय पहुंच का उपयोग करते हुए समान उदाहरण दिया गया है:

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
for obj in bucket.objects.all():
    print(obj.key, obj.last_modified)

ध्यान दें कि इस स्थिति में आपको वस्तुओं को प्राप्त करने के लिए दूसरी एपीआई कॉल करने की आवश्यकता नहीं है; वे बाल्टी पर एक संग्रह के रूप में आपके लिए उपलब्ध हैं। उप-स्रोतों के ये संग्रह आलस्य से भरे हुए हैं।

आप देख सकते हैं कि कोड का Resource संस्करण बहुत सरल है, अधिक कॉम्पैक्ट है, और इसमें अधिक क्षमता है (यह आपके लिए पृष्ठांकन करता है)। यदि आप पृष्ठांकन को शामिल करना चाहते हैं तो कोड का Client संस्करण वास्तव में ऊपर दिखाए गए से अधिक जटिल होगा।

सत्र:

  • कॉन्फ़िगरेशन जानकारी संग्रहीत करता है (मुख्य रूप से क्रेडेंशियल्स और चयनित क्षेत्र)
  • आपको सेवा क्लाइंट और संसाधन बनाने की अनुमति देता है
  • जरूरत पड़ने पर boto3 आपके लिए एक डिफ़ॉल्ट सत्र बनाता है

इन boto3 अवधारणाओं के बारे में अधिक जानने के लिए एक उपयोगी संसाधन परिचयात्मक पुन: आविष्कार वीडियो है





boto3