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角色:
- 登录AWS Management Console,并从服务列表中选择IAM服务。
- 选择“角色”选项卡,并单击“创建角色”按钮。
- 选择“AWS Glue”和“AWS Glue Service Role”作为您的角色类型,并单击“下一步:权限”。
- 在权限页面中,选中“AWSGlueServiceRole”策略,并单击“下一步:标记”。
- 在标记页面中,为您的角色命名,并单击“创建角色”。
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作业。