Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách dùng Boto3 lấy chi tiết nhiều Glue job cùng lúc

Trong bài này, ta sẽ xem cách lấy metadata tài nguyên cho một danh sách tên job cho trước.

Đề bài − Sử dụng thư viện boto3 trong Python để lấy các job có sẵn trong tài khoản. Ví dụ: lấy chi tiết các job có sẵn trong tài khoản.

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 − Không cần tham số. Nó sẽ lấy tất cả job liệt kê cho tài khoản và hiển thị metadata của từng job.

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 list_jobs để lấy tất cả job liệt kê trong tài khoản.

Bước 6 − Gọi batch_get_jobs và truyền tên job lấy được ở hàm trước.

Bước 7 − Nó trả về list_of_jobs và metadata của từng job.

Bước 8 − 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 để lấy chi tiết từng job liệt kê trong tài khoản:

import boto3
from botocore.exceptions import ClientError

def get_resource_maetadata_of_glue_jobs():
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        list_of_jobs = glue_client.list_jobs()
        response = glue_client.batch_get_jobs(JobNames=list_of_jobs['JobNames'])
        return list_of_jobs, response
    except ClientError as e:
        raise Exception("boto3 client error in get_resource_maetadata_of_glue_jobs: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_resource_maetadata_of_glue_jobs: " + e.__str__())

a, b = get_resource_maetadata_of_glue_jobs()
# Danh sách Jobs
print(a)
# Metadata tài nguyên của từng job
print(b)

Kết quả

# Danh sách Jobs
{'JobNames': ['01_PythonShellTest1', '01_pythonSHELL_14012021'], 'NextToken': 'eyJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE2MTQxNzE2OTksIm5hbm9zIjo1MTYwMDAwMDB9LCJsYXN0RXZhbHVhdGVkS2V5Ijp7ImpvYk5hbWUiOnsicCI6InRpY2stZGF0YS10ZXN0In0sImFjY291bnRJZCI6eyJzIjoiNzgyMjU4NDg1ODQxIn0sImpvYklkIjp7InMiOiJqXzhmZDc2MzhkYTcyMGQ5Yzk1YTg4MTlkOTgxNTE5MDdjM2JmYWI3ZGYxNGUwNGExZGM0ZTIzZjViYjczM2M2ZTYifX19', 'ResponseMetadata': {'RequestId': '5d3eb19a-41f5-b24e-2d59ed9664b5', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Tue, 23 Feb 2021 13:01:39 GMT', 'content-type': 'application/x-amz-json-1.1', 'contentlength': '1134', 'connection': 'keep-alive', 'x-amzn-requestid': '5d3eb19a-41f5-b24e-2d59ed9664b5'}, 'RetryAttempts': 0}
# Metadata tài nguyên của từng job
{'Jobs': [{'Name': '01_PythonShellTest1', 'Role': 'arn:aws:iam::1234:role/dev-edl-glue-role', 'CreatedOn': datetime.datetime(2021, 1, 6, 19, 59, 19, 387000, tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2021, 2, 9, 21, 47, 31, 614000, tzinfo=tzlocal()), 'ExecutionProperty': {'MaxConcurrentRuns': 1}, 'Command': {'Name': 'pythonshell', 'ScriptLocation': 's3://test/01_pythonShellTest/test1/01_PythonShellTest1.py', 'PythonVersion': '3'}, 'DefaultArguments': {'--job-bookmark-option': 'job-bookmark-disable', '--job-language': 'python'}, 'MaxRetries': 0, 'AllocatedCapacity': 0, 'Timeout': 2880, 'MaxCapacity': 0.0625, 'GlueVersion': '1.0'}, {'Name': '01_pythonSHELL_14012021', 'Role': 'arn:aws:iam::1234:role/devedl-glue-role', 'CreatedOn': datetime.datetime(2021, 1, 14, 20, 22, 40, 965000, tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2021, 1, 14, 20, 22, 40, 965000, tzinfo=tzlocal()), 'ExecutionProperty': {'MaxConcurrentRuns': 1}, 'Command': {'Name': 'pythonshell', 'ScriptLocation': 's3://test/01_pythonSHELL_14012021_123.py', 'PythonVersion': '3'}, 'DefaultArguments': {'--job-bookmark-option': 'job-bookmark-disable'}, 'MaxRetries': 0, 'AllocatedCapacity': 0, 'Timeout': 2880, 'MaxCapacity': 0.0625, 'GlueVersion': '1.0'}]}