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'}]}