Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีใช้ Boto3 ดึงนิยาม Glue Jobs ทั้งหมดพร้อมกันจาก AWS Glue Data Catalog

ข้อกำหนดปัญหา: ใช้ไลบรารี Boto3 ใน Python เพื่อดึงนิยามของ Glue Jobs ทั้งหมดที่อยู่ใน AWS Glue Data Catalog ของผู้ใช้

ตัวอย่าง: ดึงนิยามของ Glue Jobs ทั้งหมดใน AWS Glue Data Catalog

ขั้นตอนการแก้ปัญหา

  1. ขั้นตอน 1: นำเข้า boto3 และ botocore exceptions
  2. ขั้นตอน 2: ไม่ต้องมีพารามิเตอร์ ฟังก์ชันนี้จะดึงนิยามของ Jobs ทั้งหมดที่แสดงในบัญชีผู้ใช้
  3. ขั้นตอน 3: สร้าง AWS session ด้วย Boto3
  4. ขั้นตอน 4: สร้าง AWS client สำหรับ Glue
  5. ขั้นตอน 5: ใช้ฟังก์ชัน get_jobs เพื่อดึงนิยามของ Jobs ทั้งหมด โปรดสังเกตความแตกต่างระหว่าง list_jobs (ดึงเฉพาะชื่อ Job) และ get_jobs (ดึงนิยามเต็มของแต่ละ Job)
  6. ขั้นตอน 6: คืนค่านิยามของแต่ละ Job
  7. ขั้นตอน 7: จัดการข้อยกเว้นทั่วไป

ตัวอย่างโค้ด

import boto3
from botocore.exceptions import ClientError

def get_definition_of_glue_jobs():
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        response = glue_client.get_jobs()
        return response
    except ClientError as e:
        raise Exception("boto3 client error in get_definition_of_glue_jobs: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_definition_of_glue_jobs: " + e.__str__())

print(get_definition_of_glue_jobs())

ผลลัพธ์

{'Jobs': [{'Name': '01_PythonShellTest1', 'Role': 'arn:aws:iam::********:role/devedl-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://ivz-dev-ds-staging- /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::*********:role/dev-edl-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://ivz-dev-dsstaging-work/ /test_14012021/01_pythonSHELL_14012021_123.py', 'PythonVersion': '3'}, 'DefaultArguments': {'--job-bookmark-option': 'jobbookmark-disable'}, 'MaxRetries': 0, 'AllocatedCapacity': 0, 'Timeout': 2880, 'MaxCapacity': 0.0625, 'GlueVersion': '1.0'}, {'Name': 'GlueConnectionTest', 'Role': 'arn:aws:iam::*********:role/devedl-qa-automation-glue-role', 'CreatedOn': datetime.datetime(2020, 3, 6, 16, 27, 3, 862000, tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2020, 3, 6, 16, 49, 19, 942000, tzinfo=tzlocal()), 'ExecutionProperty': {'MaxConcurrentRuns': 1}, 'Command': {'Name': 'pythonshell', 'ScriptLocation': 's3://glue-job-connection-testbucket/test.py', 'PythonVersion': '3'}, 'DefaultArguments': {'--jobbookmark-option': 'job-bookmark-disable', '--job-language': 'python'}, 'Connections': {'Connections': ['dev-edl-redshift-glue-connection', 'devedl-rds-glue-connection']}, 'MaxRetries': 0, 'AllocatedCapacity': 0, 'Timeout': 2880, 'MaxCapacity': 0.0625, 'GlueVersion': '1.0'}], 'NextToken': 'eyJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE2MTQ2NjI2MTAsIm5hbm9zIjo2MjEwMDAwMDB9LCJsYXN0RXZhbHVhdGVkS2V5Ijp7ImpvYk5hbWUiOnsic3I6InRpY2stZGF0YS10ZXN0In0sImFjY291bnRJZCI6eyJzIjoiNzgyMjU4NDg1ODQxIn0sImpvYklkIjp7InMiOiJqXzhmZDc2MzhkYTcyMGQ5Yzk1YTg4MTlkOTgxNTE5MDdjM2JmYWI3ZGYxNGUwNGExZGM0ZTIzZjViYjczM2M2ZTYifX19', 'ResponseMetadata': {'RequestId': '287ad828-**************************af', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Mon, 01 Mar 2021 05:23:30 GMT', 'content-type': 'application/xamz-json-1.1', 'content-length': '8258', 'connection': 'keep-alive', 'xamzn-requestid': '287ad828-*****************af'}, 'RetryAttempts': 0}}