You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:45:41