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

如何在Step Functions中一次性为多个Glue Job传递参数?

问题

我有多个Glue Job,均需使用相同的作业参数--param1和--param2,已将这些Glue Job接入Step Functions,但不清楚如何正确传递参数并在Glue Job内部访问。

我在Step Functions中的配置如下:

{
  "Type": "Task",
  "Resource": "arn:aws:states:::glue:startJobRun.sync",
  "Parameters": {
    "JobName": "Test1",
    "Arguments": {
      "--param1": "$.param1",
      "--param2": "$.param2"
    }
  },
  "Next": "Test2"
}

Test2 Job也做了类似配置。启动Step Functions执行时传入的输入JSON为:

{
  "param1": "value1",
  "param2": "value2"
}

但实际参数值输出的却是"$.param1"和"$.param2",未被正确替换。我当前使用以下Python代码访问参数:

args = getResolvedOptions(sys.argv, ['JOB_NAME', "param1", "param2"])
print("Test1", args["param1"], args["param2"])

想了解如何在启动Step Functions时,为所有Glue Job传递value1和value2作为param1、param2的值,并在Glue Job内正确访问。

解决方案

1. 修正Step Functions的参数引用格式

当前问题出在Step Functions的参数引用写法上:直接写"$.param1"会被当成字符串字面量,而非输入变量的引用。需要使用Path参数格式,给每个参数键添加. $后缀,让Step Functions识别这是对输入JSON中对应字段的引用。

正确的Task配置如下:

{
  "Type": "Task",
  "Resource": "arn:aws:states:::glue:startJobRun.sync",
  "Parameters": {
    "JobName": "Test1",
    "Arguments": {
      "--param1.$": "$.param1",
      "--param2.$": "$.param2"
    }
  },
  "Next": "Test2"
}

Test2的配置也需要做同样修改,确保每个参数键都带有. $后缀。

2. Glue Job内部参数访问无需修改

你当前的Python代码是正确的:getResolvedOptions会自动处理带--前缀的参数,直接使用不带--的参数名即可获取对应值,保持现有代码即可:

import sys
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ['JOB_NAME', "param1", "param2"])
print("Test1", args["param1"], args["param2"])

3. 验证参数传递

启动Step Functions执行时,保持输入JSON不变:

{
  "param1": "value1",
  "param2": "value2"
}

执行后查看Glue Job的日志,即可看到正确的参数值输出。

内容的提问来源于stack exchange,提问作者Poreddy Siva Sukumar Reddy US

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:57:10