由于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}
我看不到我的错误在哪里。这在文档中指定。
答案 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"}
前面有一个空格,因此参数解析如下:
"
或者类似的东西。通常,保留空格可以通过用双引号或单引号引起来的所有内容来实现。由于使用环境变量,因此必须使用双引号,但是这将需要删除Name
和ScriptLocation
的值的Column delimiter of the data files
。不必担心AWS docs专门询问字符串类型。 Bash的类型与Python不同,因此默认情况下一切都会解释为字符串。