সমস্যা বিবরণ − Python-এ boto3 লাইব্রেরি ব্যবহার করে একটি Glue Job রান করা এবং এটি সফল হয়েছে কিনা বা ফেল করেছে সেটা জানা। উদাহরণস্বরূপ, run_s3_file_job জবটি রান করা এবং এর স্ট্যাটাস পাওয়া।
সমাধানের পদ্ধতি/অ্যালগরিদম
ধাপ ১ − boto3 এবং botocore এক্সসেপশন ইম্পোর্ট করে এক্সসেপশন হ্যান্ডল করা।
ধাপ ২ − job_name হলো বাধ্যতামূলক প্যারামিটার, কিন্তু arguments ফাংশনে অপশনাল প্যারামিটার। কিছু জব রান করার জন্য আর্গুমেন্ট নেয়। সেক্ষেত্রে আর্গুমেন্ট ডিকশনারি হিসেবে পাস করা যায়।
উদাহরণ: arguments = {'arguments1': 'value1', 'arguments2': 'value2'}
যদি জবটি আর্গুমেন্ট না নেয়, তবে শুধু job_name পাস করুন।
ধাপ ৩ − boto3 লাইব্রেরি ব্যবহার করে AWS সেশন তৈরি করা। নিশ্চিত করুন region_name ডিফল্ট প্রোফাইলে ذکر করা আছে। না থাকলে সেশন তৈরি করার সময় স্পষ্টভাবে region_name পাস করুন।
ধাপ ৪ − Glue-এর জন্য AWS ক্লায়েন্ট তৈরি করা।
ধাপ ৫ − এখন start_job_run ফাংশন ব্যবহার করুন এবং JobName এবং arguments পাস করুন (যদি প্রয়োজন হয়)।
ধাপ ৬ − একবার জব শুরু হলে, এটি জবের মেটাডেটা সহ job_run_id প্রদান করে।
ধাপ ৭ − get_job_run ফাংশন ব্যবহার করুন এবং আগের ফাংশনের রিজাল্ট থেকে RunId প্যারামিটার পাস করুন। এটি স্ট্যাটাস সম্পর্কে ডিকশনারি রিটার্ন করে।
ধাপ ৮ − এখন, জবের নির্দিষ্ট স্ট্যাটাস পাওয়া। স্ট্যাটাস হতে পারে Running যদি জব সম্পন্ন না হয়, অন্যথায় SUCCEEDED/FAILED।
ধাপ ৯ − জব চেক করার সময় যদি কিছু ভুল হয় তবে জেনেরিক এক্সসেপশন হ্যান্ডল করা।
উদাহরণ
এক্সিস্টিং Glue Job রান করে এর স্ট্যাটাস পাওয়ার জন্য নিচের কোড ব্যবহার করুন −
import boto3 from botocore.exceptions import ClientError def run_glue_job_get_status(job_name, arguments={}): session = boto3.session.Session() glue_client = session.client('glue') try: job_run_id = glue_client.start_job_run(JobName=job_name, Arguments=arguments) status_detail = glue_client.get_job_run(JobName=job_name, RunId=job_run_id.get("JobRunId")) status = status_detail.get("JobRun").get("JobRunState") return status except ClientError as e: raise Exception("boto3 client error in run_glue_job_get_status: " + e.__str__()) except Exception as e: raise Exception("Unexpected error in run_glue_job_get_status: " + e.__str__()) # ১মবার স্ট্যাটাস পাওয়া print(run_glue_job_get_status("run_s3_file_job")) # কিছু সময় অপেক্ষা করে ২য়বার স্ট্যাটাস পাওয়া time.sleep(10) print(run_glue_job_get_status("run_s3_file_job"))আউটপুট
##Get status 1st time Running #Get status 2nd time after waiting SUCCEEDED