সংস্থান, ক্লায়েন্ট এবং সেশনের মধ্যে বোটো 3-এর পার্থক্য?


216

আমি উবুন্টু 16.04 এলটিএসে পাইথন 2.7.12 ব্যবহার করছি। আমি নীচের লিঙ্কটি থেকে কীভাবে বোটো 3 ব্যবহার করবেন তা শিখছি: https://boto3.readthedocs.io/en/latest/guide/quickstart.html#used-boto-3 । আমার সন্দেহ হ'ল সংস্থান, ক্লায়েন্ট বা সেশন এবং তাদের সম্পর্কিত কার্যকারিতা কখন ব্যবহার করবেন।

উত্তর:


248

ক্লায়েন্ট , রিসোর্স এবং সেশন সম্পর্কে কী রয়েছে সে সম্পর্কে এখানে আরও কিছু বিশদ তথ্য ।

ক্লায়েন্ট:

  • নিম্ন-স্তরের AWS পরিষেবা অ্যাক্সেস
  • AWS পরিষেবা বিবরণ থেকে উত্পন্ন
  • বোটোকোর ক্লায়েন্টকে বিকাশকারীকে প্রকাশ করে
  • সাধারণত AWS পরিষেবা API দিয়ে 1: 1 এর মানচিত্র
  • সমস্ত AWS পরিষেবা অপারেশনগুলি ক্লায়েন্টদের দ্বারা সমর্থিত
  • সাপের কেসযুক্ত পদ্ধতির নাম (যেমন তালিকার বালিকা API => list_bucket পদ্ধতি)

এখানে এস 3 বালতির বস্তুগুলিতে ক্লায়েন্ট-স্তরের অ্যাক্সেসের একটি উদাহরণ রয়েছে (সর্বাধিক 1000 **):

import boto3

client = boto3.client('s3')
response = client.list_objects_v2(Bucket='mybucket')
for content in response['Contents']:
    obj_dict = client.get_object(Bucket='mybucket', Key=content['Key'])
    print(content['Key'], obj_dict['LastModified'])

** আপনাকে যদি এক হাজারেরও বেশি থাকে তবে আপনাকে একটি প্যাগেইনেটর ব্যবহার করতে হবে বা নিজের লুপটি প্রয়োগ করতে হবে, তালিকার_পজগুলি () বারবার কল করতে হবে a

সম্পদ:

  • উচ্চ-স্তরের, অবজেক্ট-ভিত্তিক এপিআই
  • উত্স থেকে উত্পন্ন বর্ণনা
  • সনাক্তকারী এবং বৈশিষ্ট্য ব্যবহার করে
  • কর্ম আছে (সংস্থান উপর ক্রিয়াকলাপ)
  • এডাব্লুএস সংস্থানগুলির সাব্রোসোর্স এবং সংগ্রহ প্রকাশ করে
  • AWS পরিষেবাদির 100% API কভারেজ সরবরাহ করে না

এখানে এস 3 বালতির বস্তুগুলিতে (সমস্ত) রিসোর্স-স্তরের অ্যাক্সেস ব্যবহার করে সমতুল উদাহরণ:

import boto3

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

মনে রাখবেন যে এই ক্ষেত্রে আপনাকে অবজেক্টগুলি পেতে দ্বিতীয় API কল করতে হবে না; তারা বালতিতে সংগ্রহ হিসাবে আপনার কাছে উপলব্ধ। সাব্রোসোর্সের এই সংগ্রহগুলি অলস-লোডযুক্ত।

আপনি দেখতে পাচ্ছেন যে Resourceকোডটির সংস্করণটি আরও সহজ, আরও কমপ্যাক্ট, এবং আরও ক্ষমতা রয়েছে (এটি আপনার জন্য পৃষ্ঠাগুলি দেয়)। কোডটির Clientসংস্করণটি যদি আপনি পৃষ্ঠাগুলি অন্তর্ভুক্ত করতে চান তবে উপরের চিত্রের চেয়ে আসলে আরও জটিল হবে।

সেশন:

  • স্টোর কনফিগারেশন তথ্য (প্রাথমিকভাবে শংসাপত্র এবং নির্বাচিত অঞ্চল)
  • আপনাকে পরিষেবা ক্লায়েন্ট এবং সংস্থান তৈরি করতে দেয়
  • বোটো 3 আপনার প্রয়োজনের জন্য একটি ডিফল্ট সেশন তৈরি করে

একটি দরকারী সম্পদ এই boto3 ধারণা সম্পর্কে আরো জানতে হয় পরিচায়ক Re: ভিডিও ঠাহর


2
ক্লায়েন্ট এবং সংস্থান মধ্যে কোনও পারফরম্যান্স পার্থক্য আছে? আমার এই সমস্যাটি ছিল যেখানে বর্গাকার সারি থেকে বার্তাগুলি মুছতে ক্লায়েন্ট ব্যবহার করা আরও দ্রুত ছিল এবং সংস্থান ব্যবহার করে ধীর ছিল।
ভালস্টাইন

3
@ ওয়ালস্টাইন আমার কাছে ভাগ করার জন্য কোনও নির্দিষ্ট তুলনা নেই তবে আমি সাধারণত ক্লায়েন্টের ইন্টারফেসগুলি সম্পদের তুলনায় লাইটওয়েট হওয়ার আশা করি এবং তাই রানটাইমে সম্ভাব্যতর দ্রুত (যদিও কোডের তুলনায় ধীর)।
জারমড

@ জাজারমড শেখার অংশ হিসাবে, আমি উভয় পদ্ধতি ব্যবহার করে এস 3 বালতি তৈরি করার চেষ্টা করেছি। আমি অনুভব করি যে, "রিসোর্স" এর তুলনায় "ক্লায়েন্ট" ব্যবহার করার সময় রিসোর্স সৃষ্টি দ্রুত ঘটছে। এটা কি ঠিক? যদি তা হয় তবে কেন ক্লায়েন্টের সাথে সংস্থান তৈরি করা দ্রুত?
সারাভানান জি

1
@ সরভানানজি যদি আপনি s3.set_stream_logger('botocore'), আপনি মেটা-প্রোগ্রামিংয়ের লগ দেখতে পারেন যে বোটো 3 (বোটোকরে কল করে) হুডের নীচে কাজ করে। এটি কাজ করে যাতে আপনার দরকার নেই। অনুরোধ প্রস্তুতি, প্রতিক্রিয়া পার্সিং, এবং নির্ভরশীল কলগুলি শৃঙ্খলাবদ্ধ করার জন্য এটিতে কাস্টমাইজেশন / প্লাগবিলিটি এবং একটি 3 (+?) ইভেন্টের গভীর শ্রেণীবিন্যাসের জন্য একটি পুরো ইভেন্ট সিস্টেম রয়েছে। প্যারামিটার বিল্ডিং, অনুরোধ স্বাক্ষর, অঞ্চল সনাক্তকরণ উল্লেখযোগ্য। এফওয়াইআই এটি পরিবর্তন করার জন্য একটি যাদুর ব্যথা। সহজ পরিবর্তন দেখুন
mcint

89

আমি চেষ্টা করবো এবং এটি যতটা সম্ভব সহজ ব্যাখ্যা করব। সুতরাং প্রকৃত পদগুলির যথার্থতার কোনও গ্যারান্টি নেই।

সেশনটি যেখানে এডাব্লুএস পরিষেবাগুলিতে সংযোগটি শুরু করবে। উদাহরণস্বরূপ নিম্নলিখিতটি হ'ল ডিফল্ট সেশন যা ডিফল্ট শংসাপত্রের প্রোফাইল ব্যবহার করে (যেমন aw / .aws / শংসাপত্রগুলি, বা আইএএম উদাহরণ প্রোফাইল ব্যবহার করে আপনার ইসি 2 অনুমান)

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

যেহেতু ডিফল্ট সেশনটি ব্যবহার করা প্রোফাইল বা দৃষ্টান্তের প্রোফাইলের সীমাবদ্ধ, তাই কখনও কখনও আপনাকে ডিফল্ট সেশন কনফিগারেশন (যেমন অঞ্চল_নাম, শেষ পয়েন্ট_আরল ইত্যাদি) র ওভাররাইড করতে কাস্টম সেশন ব্যবহার করতে হবে যেমন

# custom resource session must use boto3.Session to do the override
my_west_session = boto3.Session(region_name = 'us-west-2')
my_east_session = boto3.Session(region_name = 'us-east-1')
backup_s3 = my_west_session.resource('s3')
video_s3 = my_east_session.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')

সংস্থান : এটি ব্যবহারের জন্য প্রস্তাবিত উচ্চ-স্তরের পরিষেবা শ্রেণি। এটি আপনাকে নির্দিষ্ট এডাব্লুএস সংস্থানগুলি বেঁধে রাখার অনুমতি দেয় এবং এটি পাশাপাশি চলে যায়, তাই কোন লক্ষ্য পরিষেবাগুলি দেখানো হয়েছে তা চিন্তার চেয়ে আপনি কেবল এই বিমূর্ততাটি ব্যবহার করেন। আপনি যেমন সেশন অংশটি থেকে লক্ষ্য করেছেন, আপনার যদি কাস্টম সেশন থাকে তবে আপনি সমস্ত কাস্টম অঞ্চল ইত্যাদি সম্পর্কে চিন্তাভাবনা না করেই এই বিমূর্ত বস্তুটি পাস করুন along নীচে একটি জটিল উদাহরণ উদা

import boto3 
my_west_session = boto3.Session(region_name = 'us-west-2')
my_east_session = boto3.Session(region_name = 'us-east-1')
backup_s3 = my_west_session.resource("s3")
video_s3 = my_east_session.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)

মক্কেল একটি নিম্ন স্তরের শ্রেণীর অবজেক্ট। প্রতিটি ক্লায়েন্ট কলের জন্য, আপনাকে স্পষ্টভাবে লক্ষ্যবস্তু সংস্থানগুলি নির্দিষ্ট করতে হবে, মনোনীত পরিষেবা টার্গেটের নামটি দীর্ঘ হতে হবে। আপনি বিমূর্ত ক্ষমতা হারাবেন।

উদাহরণস্বরূপ, আপনি যদি কেবলমাত্র ডিফল্ট সেশনটির সাথে ডিল করেন তবে এটি বোটো 3.সোর্সের সাথে সাদৃশ্যপূর্ণ।

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_session.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') 

গৌণ. 'অবজেক্ট' কীওয়ার্ড নয়?
স্বগতিকা

সমান্তরাল এক ফাংশন বা মডিউলে আমাদের 'রিসোর্স' এবং 'ক্লায়েন্ট' উভয়ই এড়ানো উচিত?
জন ওভারিরন

1
@ জোহান ওভারিওন সমস্ত এডাব্লুএস পরিষেবাটির "রিসোর্স" প্রতিরূপ নেই, সুতরাং আপনার এখনও নিম্ন স্তরের "ক্লায়েন্ট" দরকার। যদি আপনি মোতায়েনের জন্য ব্যবহারের উদ্দেশ্যে থাকেন তবে মোতায়েনের স্বয়ংক্রিয় ব্যবহারের জন্য এপিআই ব্যবহার করার চেয়ে ক্লাউডফর্মেশন (এটি শিখতে অসুবিধা হয় তবে দীর্ঘমেয়াদে আপনার সময় সাশ্রয় করবে) ব্যবহার করার পরামর্শ দেওয়া হয়।
মটমুট

@ মুটমুট তবে আউটসুটগুলি আনা বা ক্লাউডফর্মেশনের মাধ্যমে স্ট্যাক আপডেট করার পরিবর্তে এইপিএসগুলি সহজেই সার্ভিস / রিসোর্সগুলি অনুসন্ধান / হেরফের করতে পারে। আমি কি সঠিক?
এস কে ভেঙ্কট

@ এসকেভেনক্যাট আপনি যদি ধারাবাহিক ইন্টিগ্রেশন ইত্যাদি ব্যবহার করে মাল্টি-সার্ভার স্থাপনার স্থাপন শুরু করেন, ক্লোডফর্মেশন / টেরফর্ম / হিট বোটো 3 কোড ব্যবহার করে বজায় রাখা আরও সহজ।
mootmoot
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.