使用Boto3更新AWS Glue作业参数失败,求解决方法
问题:使用Boto3更新AWS Glue作业参数失败
尝试通过Boto3更新AWS Glue作业的参数,执行以下代码时失败:
response = glue_client.get_job(JobName=glue_job_name) job = response['Job'] job['DefaultArguments'][parameter_name] = new_parameter_value glue_client.update_job(JobName=glue_job_name, JobUpdate=job)
执行后返回如下错误:
{ "statusCode": 500, "body": "Error: Parameter validation failed:\nUnknown parameter in JobUpdate: \"Name\", must be one of: Description, LogUri, Role, ExecutionProperty, Command, DefaultArguments, NonOverridableArguments, Connections, MaxRetries, AllocatedCapacity, Timeout, MaxCapacity, WorkerType, NumberOfWorkers, SecurityConfiguration, NotificationProperty, GlueVersion, CodeGenConfigurationNodes, ExecutionClass, SourceControlDetails\nUnknown parameter in JobUpdate: \"CreatedOn\", must be one of: Description, LogUri, Role, ExecutionProperty, Command, DefaultArguments, NonOverridableArguments, Connections, MaxRetries, AllocatedCapacity, Timeout, MaxCapacity, WorkerType, NumberOfWorkers, SecurityConfiguration, NotificationProperty, GlueVersion, CodeGenConfigurationNodes, ExecutionClass, SourceControlDetails\nUnknown parameter in JobUpdate: \"LastModifiedOn\", must be one of: Description, LogUri, Role, ExecutionProperty, Command, DefaultArguments, NonOverridableArguments, Connections, MaxRetries, AllocatedCapacity, Timeout, MaxCapacity, WorkerType, NumberOfWorkers, SecurityConfiguration, NotificationProperty, GlueVersion, CodeGenConfigurationNodes, ExecutionClass, SourceControlDetails\nUnknown parameter in JobUpdate.Command: \"test_parameter\", must be one of: Name, ScriptLocation, PythonVersion, Runtime" }
原因分析
get_job返回的Job对象包含大量AWS Glue内部维护的字段(如Name、CreatedOn、LastModifiedOn),以及Command中的额外参数,但update_job的JobUpdate参数仅接受官方指定的可修改字段,直接传入完整Job对象会触发参数校验失败。
解决方案
无需传递完整Job对象给JobUpdate,仅构造包含需要修改字段的字典即可。针对更新DefaultArguments的场景,具体步骤如下:
- 获取现有作业的
DefaultArguments并复制(避免修改原响应对象) - 修改目标参数值
- 构造仅包含
DefaultArguments的JobUpdate字典 - 调用
update_job执行更新
修正后的代码:
# 获取现有作业的DefaultArguments并复制 response = glue_client.get_job(JobName=glue_job_name) default_args = response['Job']['DefaultArguments'].copy() # 更新指定参数 default_args[parameter_name] = new_parameter_value # 构造JobUpdate,仅传入需要修改的字段 glue_client.update_job( JobName=glue_job_name, JobUpdate={ 'DefaultArguments': default_args } )
如果需要同时修改其他可配置字段(如Description、Role等),只需将对应字段添加到JobUpdate字典中,确保仅包含官方允许的字段列表中的项即可。
内容的提问来源于stack exchange,提问作者jgm.3008
相关产品推荐
相关产品推荐

