Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để sử dụng Boto3 để kiểm tra trạng thái của một Công việc Keo đang chạy?

Tuyên bố sự cố - Sử dụng thư viện boto3 trong Python để chạy lệnh dán và nhận trạng thái cho dù nó thành công hay thất bại. Ví dụ:chạy công việc run_s3_file_job và có được trạng thái của nó.

Phương pháp tiếp cận / Thuật toán để giải quyết vấn đề này

Bước 1 - Nhập các ngoại lệ boto3 và botocore để xử lý các ngoại lệ.

Bước 2 - job_name là tham số bắt buộc, trong khi đối số là tham số tùy chọn trong hàm. Rất ít công việc cần tranh luận để điều hành. Trong trường hợp đó, các đối số có thể được chuyển dưới dạng dict.

Ví dụ: đối số ={‘đối số1’ =‘giá trị1’, ‘đối số đối số2’ =‘giá trị2’}

Nếu công việc không nhận đối số, thì chỉ cần chuyển job_name.

Bước 3 - Tạo phiên AWS bằng thư viện boto3. Đảm bảo rằng tên miền được đề cập trong hồ sơ mặc định. Nếu nó không được đề cập, thì hãy chuyển rõ ràng region_name trong khi tạo phiên.

Bước 4 - Tạo ứng dụng AWS cho keo dán.

Bước 5 - Bây giờ sử dụng hàm start_job_run và chuyển JobName và các đối số nếu được yêu cầu.

Bước 6 - Khi công việc bắt đầu, nó cung cấp job_run_id với siêu dữ liệu của công việc.

Bước 7 - Sử dụng chức năng get_job_run và chuyển tham số RunId từ kết quả của chức năng trước đó. Nó trả về từ điển về trạng thái.

Bước 8 - Bây giờ, nhận tình trạng cụ thể của công việc. Trạng thái có thể đang Chạy nếu công việc không được hoàn thành nếu không đã THÀNH CÔNG / THẤT BẠI.

Bước 9 - Xử lý ngoại lệ chung nếu có sự cố xảy ra trong khi kiểm tra công việc.

Ví dụ

Sử dụng mã sau để chạy và nhận trạng thái của công việc dán keo hiện có -

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__())

#Get status 1st time
print(run_glue_job_get_status("run_s3_file_job"))
#Get status 2nd time after waiting
time.sleep(10)
print(run_glue_job_get_status("run_s3_file_job"))

Đầu ra

##Get status 1st time
Running
#Get status 2nd time after waiting
SUCCEEDED