Python 如何使用Python中的Boto3库运行Glue Job?

Python 如何使用Python中的Boto3库运行Glue Job?

AWS Glue是一个完全托管的ETL(提取,转换和加载)服务,可让用户从各种数据源中轻松地移动数据到和从AWS服务中。AWS Glue为用户提供了一整套构建,自动化和调度ETL工作流所需的工具。

Boto3是AWS Software Development Kit(SDK)的Python版本,可用于连接和操作AWS服务。它是使用AWS API的客户端库,允许Python开发人员轻松地编写脚本来自动化AWS任务。

在这篇文章中,我们将探讨如何使用Boto3库在Python中运行AWS Glue Job,以实现自动化ETL流程。

阅读更多:Python 教程

先决条件

在正式开始之前,请确保以下先决条件已经满足:

  • Python环境已安装。
  • Boto3库已经安装。我们可以使用以下命令安装:
pip install boto3
  • AWS的访问密钥和秘密密钥已设置。我们需要这些凭据来与AWS建立连接。

步骤1:创建IAM角色

在开始之前,我们需要创建一个IAM角色,以配置Glue作业执行过程中的权限。我们可以按照以下步骤创建IAM角色:

  1. 登录AWS Management Console,并从服务列表中选择IAM服务。
  2. 选择“角色”选项卡,并单击“创建角色”按钮。
  3. 选择“AWS Glue”和“AWS Glue Service Role”作为您的角色类型,并单击“下一步:权限”。
  4. 在权限页面中,选中“AWSGlueServiceRole”策略,并单击“下一步:标记”。
  5. 在标记页面中,为您的角色命名,并单击“创建角色”。

IAM角色创建完成后,我们可以获取角色的ARN(Amazon Resource Name)以及外部ID。这些信息将在后续步骤中使用。

步骤2:编写Python脚本

在这一步中,我们将编写Python脚本来执行Glue作业。完整的代码如下所示:

import boto3


def start_glue_job(job_name, role_arn, external_id):
    '''
    该函数启动了一个Glue作业。

    job_name:要启动的作业的名称。
    role_arn:与作业关联的IAM角色的ARN。
    external_id:与作业关联的IAM角色的外部ID。
    '''

    client = boto3.client('glue')

    response = client.start_job_run(
        JobName=job_name,
        Arguments={
            '--enable-glue-datacatalog': 'true'
        },
        SecurityConfiguration='MySecurityConfig', # 可选
        Timeout=2880, # 可选
        MaxCapacity=2, # 可选
        NumberOfWorkers=10, # 可选
        NotificationProperty={
            'NotifyDelayAfter': 0
        },
        WorkerType='Standard', # 可选
        GlueVersion='2.0', # 可选
        ExecutionProperty={
            'MaxConcurrentRuns': 1
        },
        Role=role_arn,
        IdempotencyToken='Token123', # 可选
        Tags={
            'Environment': 'Production'
        },
        JobRunName='MyJobRun', # 可选
        AllocatedCapacity=5, # 可选
        TimeoutSpecification={
            'ExecutionTimeout': 600,
            'ShutdownDelay': 60
        },
        WorkerArgs={
            '--job-bookmark-option': 'job-bookmark-enable',
            '--enable-s3-parquet-optimized-committer': 'true'
        },
        SecurityConfigurationEncryption={
            'JobBookmarksEncryption': {
                'JobBookmarksEncryptionMode': 'SSE-S3'
            },
            'CloudWatchEncryption': {
                'CloudWatchEncryptionMode': 'SSE-KMS',
                'CloudWatchEncryptionKmsKey': 'alias/aws/glue' # 可选
            }
        },
        BatchSize=1000 #    )

    job_run_id = response['JobRunId']

    print(f"Started job run with ID: {job_run_id}")

    return job_run_id


if __name__ == '__main__':
    job_name = 'my-glue-job'
    role_arn = 'arn:aws:iam::123456789012:role/my-glue-job-role'
    external_id = 'my-external-id'

    start_glue_job(job_name, role_arn, external_id)

在这个脚本中,我们定义了一个名为start_glue_job的函数,用于启动一个Glue作业。在参数中,我们指定了作业的名称、关联的IAM角色的ARN和外部ID。我们还可以使用其他可选参数来配置作业执行的各个方面。

start_glue_job函数中,我们使用Boto3客户端库来连接AWS。然后,我们调用start_job_run方法来启动作业运行。该方法需要提供作业名称、执行参数以及关联的IAM角色的ARN。启动作业时,start_job_run方法将返回作业运行ID。我们可以使用这个ID来跟踪作业运行的状态,并获取有关作业运行的详细信息。

在主程序中,我们指定了作业的名称、关联的IAM角色的ARN和外部ID,并调用start_glue_job函数来启动作业运行。

步骤3:执行Python脚本

在编写完脚本之后,我们可以使用Python解释器来执行它:

python myscript.py

当我们运行脚本时,它将启动Glue作业,并返回作业运行的ID。我们可以使用这个ID来跟踪作业运行的状态,并获取有关作业运行的详细信息。

结论

在这篇文章中,我们介绍了如何使用Python中的Boto3库来执行AWS Glue作业。我们首先创建了一个IAM角色,并获取了角色的ARN和外部ID。然后,我们编写了一个Python脚本,使用Boto3客户端库来连接AWS并调用start_job_run方法来启动Glue作业。最后,我们执行了Python脚本,启动了Glue作业。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程