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

EventBridge能否向Glue工作流/触发器传递作业参数?

我的系统设计

  • 我已创建4个Glue Job:testgluejob1、testgluejob2、testgluejob3以及common-glue-job。
  • EventBridge规则用于检测testgluejob1、testgluejob2、testgluejob3等Glue Job的SUCCEEDED状态。
  • 接收到Glue Job运行成功的通知后,Glue Trigger会启动common-glue-job。
    架构示意图

问题描述

  • 我希望在common-glue-job脚本中,将上游触发作业的名称作为参数使用。
  • 请问是否可以从EventBridge向Glue Workflow或Glue Trigger传递参数?
    问题示意图

已尝试的操作

  • 已知Glue Trigger可向common-glue-job传递参数,相关CloudFormation静态参数配置示例如下:
    Type: AWS::Glue::Trigger
    ...
      Actions:
        - JobName: prod-job2
          Arguments:
            '--job-bookmark-option': job-bookmark-enable
    
  • 若为Glue Workflow设置Run Properties,可在common-glue-job中通过boto3调用get_workflow_run_properties()函数获取对应属性,但不清楚如何通过CloudFormation配置,实现EventBridge触发工作流时传入Run Properties。
  • 已配置EventBridge规则的Target InputTransformer,但不确定如何在common-glue-job中获取传入的转换值,相关配置如下:
    DependsOn:
    - EventBridgeGlueExecutionRole
    - GlueWorkflowTest01
    Type: AWS::Events::Rule
    Properties:
    Name: EventRuleTest01
    EventPattern:
      source:
        - aws.glue
      detail-type:
        - Glue Job State Change
      detail:
        jobName:
         - !Ref GlueJobTest01
        state:
         - SUCCEEDED
    Targets:
      -
        Arn: !Sub arn:aws:glue:${AWS::Region}:${AWS::AccountId}:workflow/${GlueWorkflowTest01}
        Id: GlueJobTriggersWorkflow
        RoleArn: !GetAtt 'EventBridgeGlueExecutionRole.Arn'
        InputTransformer:
          InputTemplate: >-
            {
              "--ORIGINAL_JOB": <jobName>
            }
          InputPathsMap: 
            jobName : "$.detail.jobName"
    

解决方案

EventBridge向Glue资源传递动态参数完全可行,之前配置InputTransformer的思路是对的,只是参数格式和获取方式没有匹配对应资源的传参要求,以下是可直接落地的方案:

方案1:EventBridge直接触发common-glue-job(最简便,无需中转资源)

不需要依赖Glue Workflow或者Trigger做中转,直接将common-glue-job配置为EventBridge规则的目标即可:

  1. 给EventBridge绑定的执行角色添加glue:StartJobRun权限。
  2. InputTransformer的输出格式和Glue Trigger静态Arguments格式完全一致,参数以--开头即可,之前写的InputTemplate可以直接复用。
  3. 在common-glue-job脚本中,直接通过Glue内置的参数解析方法获取值,不需要额外调用boto3接口:
import sys
from awsglue.utils import getResolvedOptions
# 直接读取传入的作业参数
args = getResolvedOptions(sys.argv, ['ORIGINAL_JOB'])
upstream_job_name = args['ORIGINAL_JOB']

方案2:保留Glue Workflow的场景

如果业务逻辑必须依赖Workflow编排,只需要调整InputTemplate的格式即可:

  1. EventBridge触发Workflow时,参数必须封装在RunProperties字段下,不能直接传--参数名格式,修改后的InputTemplate如下:
{
  "RunProperties": {
    "ORIGINAL_JOB": <jobName>
  }
}
  1. 在common-glue-job中,先读取Glue自动注入的内置参数WORKFLOW_RUN_ID,再调用get_workflow_run_properties()方法即可拿到传入的动态值:
import boto3
import sys
from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['WORKFLOW_RUN_ID'])
glue_client = boto3.client('glue')
run_properties = glue_client.get_workflow_run_properties(
    Name='替换为你的Glue Workflow名称',
    RunId=args['WORKFLOW_RUN_ID']
)['RunProperties']
upstream_job_name = run_properties['ORIGINAL_JOB']

注意事项

Glue Trigger本身不支持接收EventBridge传入的动态参数,Trigger中配置的Arguments是创建时就固定的静态值,无法动态替换为上游作业名,因此如果需要获取动态的上游作业信息,不要选择Trigger作为中转。


内容的提问来源于stack exchange,提问作者O.Takashi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:51:38