如何通过Boto3在单个Glue Workflow中创建不同类型触发器
使用Boto3在AWS Glue Workflow中创建SCHEDULED和CONDITIONAL触发器的正确步骤
你失败的核心原因是不能在单个触发器中同时指定SCHEDULED和CONDITIONAL两种类型,这两种触发器是独立的,需要分别创建并关联到同一个Glue Workflow。下面是具体实现步骤和代码示例:
前提准备
确保你已经通过Boto3初始化了Glue客户端,并且拥有足够的AWS权限(glue:CreateTrigger、glue:GetWorkflow等):
import boto3 glue_client = boto3.client('glue', region_name='your-region')
步骤1:创建或确认目标Glue Workflow存在
如果还没有Workflow,先创建一个:
# 创建Workflow glue_client.create_workflow( Name='Your-Workflow-Name', Description='Workflow with scheduled and conditional triggers' )
步骤2:创建SCHEDULED触发器(启动Workflow)
这个触发器用于按指定时间调度整个Workflow的启动,核心参数是Type='SCHEDULED'和Schedule(遵循CloudWatch Events表达式):
# 创建调度型触发器 scheduled_trigger = glue_client.create_trigger( Name='Scheduled-Start-Trigger', Type='SCHEDULED', Schedule='cron(0 12 * * ? *)', # 每天中午12点触发,按需调整 WorkflowName='Your-Workflow-Name', Actions=[ { 'JobName': 'Your-First-Job-Name' # Workflow启动后执行的第一个任务 } ], Description='Scheduled trigger to start the workflow daily' ) print(f"Scheduled trigger ARN: {scheduled_trigger['Name']}")
步骤3:创建CONDITIONAL触发器(基于任务状态触发后续操作)
这个触发器依赖Workflow中某个任务的执行状态(比如某Job成功)来触发后续任务,核心参数是Type='CONDITIONAL'和Predicate(定义触发条件):
# 创建条件型触发器 conditional_trigger = glue_client.create_trigger( Name='Conditional-Job-Trigger', Type='CONDITIONAL', WorkflowName='Your-Workflow-Name', Predicate={ 'Conditions': [ { 'LogicalOperator': 'EQUALS', 'JobName': 'Your-First-Job-Name', 'State': 'SUCCEEDED' } ], 'Logical': 'AND' # 多条件时用AND/OR,单条件可省略 }, Actions=[ { 'JobName': 'Your-Second-Job-Name' # 满足条件后执行的任务 } ], Description='Conditional trigger that runs after first job succeeds' ) print(f"Conditional trigger ARN: {conditional_trigger['Name']}")
关键注意事项
- 每个触发器的
Name必须在AWS账户和区域内唯一 Schedule表达式必须符合CloudWatch Events的cron或rate格式,例如rate(1 hour)或cron(0 0 * * ? *)Predicate中的JobName必须是Workflow中已存在的任务,且状态判断要符合实际需求(可选SUCCEEDED/FAILED/STOPPED)- 确保所有关联的Glue Job已经创建完成,否则触发器无法正常触发
内容的提问来源于stack exchange,提问作者Naveen Srikanth
相关产品推荐
相关产品推荐

