Aws Glue作业,更新脚本位置

时间:2020-01-15 09:59:15

标签: amazon-web-services aws-glue

由于aws cli,我很难找到一种方法来更新aws胶作业的脚本位置。

https://docs.aws.amazon.com/cli/latest/reference/glue/update-job.html

我尝试过:

aws胶水update-job --job-name“ $ {JOB}-$ {ENV}” --job-update Command = {Name =“ glueetl”,ScriptLocation =“ s3:// aws-glue-jobs -$ {ENV} / artifacts / $ {JOB} / $ {JOB} .py“}

它向我返回错误:

未知选项:ScriptLocation = s3://aws-glue-jobs-staging/artifacts/dummy_job/dummy_job.py}

我看不到我的错误在哪里。这在文档中指定。

1 个答案:

答案 0 :(得分:0)

您的问题源于bash(或awscli)解析给定命令,子命令和参数的参数的方式,即它对空格和等号(=)敏感。 以下应该可以正常工作:

aws glue update-job --job-name="${JOB}-${ENV}" --job-update="Role=arn:aws:iam::__FILL_ME__:role/__FILL_ME__, Command={Name=glueetl, ScriptLocation=s3://aws-glue-jobs-${ENV}/artifacts/${JOB}/${JOB}.py}"

aws glue update-job --job-name "${JOB}-${ENV}" --job-update "Role=arn:aws:iam::__FILL_ME__:role/__FILL_ME__, Command={Name=glueetl, ScriptLocation=s3://aws-glue-jobs-${ENV}/artifacts/${JOB}/${JOB}.py}"

aws glue update-job \
    --job-name "${JOB}-${ENV}" \
    --job-update "Role=arn:aws:iam::__FILL_ME__:role/__FILL_ME__, Command={Name=glueetl, ScriptLocation=aws-glue-jobs-${ENV}/artifacts/${JOB}/${JOB}.py}"

aws glue update-job \
    --job-name="${JOB}-${ENV}" \
    --job-update="Role=arn:aws:iam::__FILL_ME__:role/__FILL_ME__, Command={Name=glueetl, ScriptLocation=aws-glue-jobs-${ENV}/artifacts/${JOB}/${JOB}.py}"

注意:尽管您的原始代码段不包含Role=arn:aws:iam::__FILL_ME__,但仍需要指定glue


关于参数解析的注释

在您提供的命令中:

  • update-job:命令名称
  • ScriptLocation:子命令的名称
  • 后面的所有内容都是键值参数(选项),其中键和值应以空格或等号(=)分隔

由于# First key-value pair --job-name "${JOB}-${ENV}" # Second key-value pair --job-update Command={Name="glueetl", # Third key-value pair ScriptLocation="s3://aws-glue-jobs-${ENV}/artifacts/${JOB}/${JOB}.py"} 前面有一个空格,因此参数解析如下:

"

或者类似的东西。通常,保留空格可以通过用双引号或单引号引起来的所有内容来实现。由于使用环境变量,因此必须使用双引号,但是这将需要删除NameScriptLocation的值的Column delimiter of the data files。不必担心AWS docs专门询问字符串类型。 Bash的类型与Python不同,因此默认情况下一切都会解释为字符串。