Đề bài − Sử dụng thư viện boto3 trong Python để chạy glue job và lấy trạng thái thành công hay thất bại. Ví dụ: chạy job run_s3_file_job và lấy trạng thái.
Cách tiếp cận/Thuật toán giải quyết
Bước 1 − Nhập boto3 và botocore exceptions để xử lý ngoại lệ.
Bước 2 − job_name là tham số bắt buộc, trong khi arguments là tham số tùy chọn. Một số job cần arguments để chạy. Trong trường hợp đó, truyền arguments dưới dạng dict.
Ví dụ: arguments = {'arguments1': 'value1', 'arguments2': 'value2'}
Nếu job không cần arguments, chỉ cần truyền job_name.
Bước 3 − Tạo phiên AWS bằng boto3. Đảm bảo region_name trong profile mặc định. Nếu không, truyền rõ ràng region_name khi tạo phiên.
Bước 4 − Tạo client AWS cho glue.
Bước 5 − Sử dụng hàm start_job_run và truyền JobName và arguments nếu cần.
Bước 6 − Khi job bắt đầu, nó cung cấp job_run_id kèm metadata của job.
Bước 7 − Dùng hàm get_job_run và truyền tham số RunId từ kết quả hàm trước. Nó trả về dictionary về trạng thái.
Bước 8 − Lấy trạng thái cụ thể của job. Trạng thái có thể là Running nếu job chưa xong, ngược lại SUCCEEDED/FAILED.
Bước 9 − Xử lý ngoại lệ chung nếu có lỗi xảy ra khi kiểm tra job.
Ví dụ
Sử dụng code sau để chạy và lấy trạng thái glue job hiện có:
import boto3
from botocore.exceptions import ClientError
import time
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__())
# Lấy trạng thái lần 1
print(run_glue_job_get_status("run_s3_file_job"))
# Lấy trạng thái lần 2 sau khi chờ
time.sleep(10)
print(run_glue_job_get_status("run_s3_file_job"))
Kết quả
## Lấy trạng thái lần 1 Running # Lấy trạng thái lần 2 sau khi chờ SUCCEEDED