如何在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
相关产品推荐
相关产品推荐

