我试图在我的CI / CD开发中包括script_location
的更新以及仅此参数。 AWS要求我包括必需的参数,例如RoleArn
。如何只更新要更改的部分作业配置?
这就是我要使用的
aws glue update-job --job-name <job_name> --job-update Command="{ScriptLocation=s3://<s3_path_to_script>}
这就是发生的事情:
An error occurred (InvalidInputException) when calling the UpdateJob operation: Command name should not be null or empty.
如果我添加默认命令名称glueetl
,则会发生这种情况:
An error occurred (InvalidInputException) when calling the UpdateJob operation: Role should not be null or empty.
答案 0 :(得分:2)
我不知道您是否已解决此问题,但我使用以下命令进行了管理:
aws glue update-job --job-name <gluejobname> --job-update Role=myRoleNameBB,Command="{Name=<someupdatename>,ScriptLocation=<local_filename.py>}"
您不需要角色的ARN,而是角色名称。上面的示例假定您具有名称为 myRoleNameBB 的角色,并且可以访问AWS Glue。
注意:我在笔记本电脑上使用了本地文件。另外,“命令”部分中的“名称”也是必填项。
运行它时,我将显示以下输出:
{
"JobName": "<gluejobname>"
}
答案 1 :(得分:1)
通过 CLI 更新胶水作业或胶水触发器的一种简单方法是使用 --cli-input-json 选项。为了使用正确的 json,您可以使用 aws glue update-job --generate-cli-skeleton
返回一个完整的结构来插入您的更改。
例如:
{"JobName":"","JobUpdate":{"Description":"","LogUri":"","Role":"","ExecutionProperty":{"MaxConcurrentRuns":0},"Command":{"Name":"","ScriptLocation":"","PythonVersion":""},"DefaultArguments":{"KeyName":""},"NonOverridableArguments":{"KeyName":""},"Connections":{"Connections":[""]},"MaxRetries":0,"AllocatedCapacity":0,"Timeout":0,"MaxCapacity":null,"WorkerType":"G.1X","NumberOfWorkers":0,"SecurityConfiguration":"","NotificationProperty":{"NotifyDelayAfter":0},"GlueVersion":""}}
这里只需填写作业名称并更改选项即可。
在此之后,您必须将 json 转换为单行 json 并使用 ' '
aws glue update-job --cli-input-json '<one-line-json>'
我也希望能帮助解决这个问题的人。
参考:
答案 2 :(得分:0)
根据我的发现,没有办法使用update-job API来仅更新部分工作。
我遇到了同样的问题,并且提供了克服该错误的作用。该命令有效,但update-job API实际上将其他参数重置为默认值,例如应用程序类型,作业语言,类,超时,最大容量等。
因此,如果您先前存在的作业是scala中的Spark应用程序,则该作业将失败,因为AWS默认将Python Shell和python作为作业语言作为update-job API的一部分。而且,此API无法将作业语言类型设置为scala并设置主类(在scala中是必需的)。它提供了一种将应用程序类型设置为Spark应用程序的方法。
如果您不想为update-job API指定角色。一种方法是使用与现有ETL作业相同的名称和位置复制新脚本,然后在CI流程中使用start-job API触发ETL。
第二种方法是直接运行ETL,并在开始作业API调用中强制其使用最新脚本:
aws glue start-job-run --job-name <job-name> --arguments=scriptLocation="<path to your latest script>"
第二种方法的唯一警告是,当您在控制台中查看时,ETL作业仍将引用旧脚本位置。上面的命令只是强制运行此作业以使用最新的脚本,您可以通过在Glue ETL控制台的“历史记录”选项卡中查看来确认。