Ваша проблема связана с тем, как 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
. Не беспокойтесь о AWS документах , специально запрашивающих строковый тип. Bash не имеет типов так же, как, например, Python, поэтому по умолчанию все интерпретируется как строка.