Aws Склеить задание, обновить местоположение скрипта - PullRequest
0 голосов
/ 15 января 2020

Я изо всех сил пытаюсь найти способ обновления местоположения сценария моей работы с клеем aws из-за aws cli.

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

Я пытался:

aws задание обновления клея --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 голосов
/ 16 января 2020

Ваша проблема связана с тем, как 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, поэтому по умолчанию все интерпретируется как строка.

...