
aws glue 工作流向作业传递参数时,必须以 `--key value` 格式显式声明(如 `--client value12`),才能通过 `getresolvedoptions()` 正确解析;否则即使参数值出现在 `sys.argv` 中,也会因缺少前缀而报“required”错误。
在 AWS Glue 中,工作流(Workflow)可通过 “启动作业”节点(Start Job Run) 的 Job parameters 字段向 Glue 作业传递自定义参数。但关键前提是:这些参数必须遵循 Glue 的命令行参数规范——即每个参数名需以双连字符 -- 开头,形如 --client、--env、--region 等,且键与值需作为两个独立的 sys.argv 元素出现。
从你提供的 sys.argv 输出可见:
..., 'client', 'value12', '--JOB_NAME', 'test-job', ...
这里的 'client' 和 'value12' 是两个普通字符串,没有 -- 前缀,因此 Glue 运行时不会将其识别为有效参数,getResolvedOptions(sys.argv, ['client']) 就会抛出 KeyError: 'client' is required 错误。
✅ 正确做法是:
在 Glue 工作流的作业节点配置中,将参数设置为:
| Key | Value |
|---|---|
| --client | value12 |
而非仅填 client → value12。这样 Glue 才会在启动作业时注入:
['/tmp/test.py', '--client', 'value12', '--JOB_NAME', 'test-job', ...]
此时你的 Python 代码即可正常工作:
import sys
from awsglue.job import Job
from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['JOB_NAME', 'client']) # ✅ 成功解析
print(f"Client value: {args['client']}") # 输出: Client value: value12⚠️ 注意事项:
- 参数名在 getResolvedOptions 中不带 --(如写 'client',不是 '--client');
- 所有自定义参数必须在工作流中显式以 --key 形式传入,Glue 不支持无前缀的“裸参数”;
- 若参数值含空格或特殊字符,请确保工作流配置中已做适当转义(推荐使用 JSON 格式或 S3 引用间接传递复杂值);
- 可通过 print(sys.argv) 快速验证参数是否按预期注入,调试阶段建议保留该语句。
总结:Glue 的参数解析机制严格依赖 CLI 风格约定。只要确保工作流中以 --key value 方式传参,并在代码中用 getResolvedOptions 指定无前缀的键名,即可稳定、可靠地获取 Workflow 下发的上下文信息。










