Как передать аргументы работе Glue в CloudFormation YAML? - PullRequest
0 голосов
/ 11 октября 2018

Вы можете передать аргументы в задание AWS Glue через параметр --arguments (см. здесь ).

В документации CloudFormation указано, что DefaultArguments имеют значение "UTF-8 пар ключ-значение строка-в-UTF-8 "и что их тип -" объект JSON ".Поскольку YAML - это супер-набор JSON, я ожидал, что смогу передать аргументы, подобные этому, в шаблоне (YAML) CloudFormation:

DefaultArguments:
  "--arguments": {"--test_argument": "foo"}

Однако во время развертывания CloudFormation возникает эта ошибка:

Ошибка проверки свойства: [Значение свойства {/ DefaultArguments / - arguments =} не соответствует типу {String}]

Как правильно указать значения?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Правильный способ передачи нескольких параметров:

DefaultArguments:
  "--argument1": value1
  "--argument2": value2

и последующий доступ к ним в работе (например, в Python) следующим образом:

from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['argument1', 'argument2'])
print args['argument1']
print args['argument2']

Меня смутило то, что дляПередавая параметры с помощью интерфейса командной строки AWS, вы используете явную структуру --arguments='--argument1="value1"', но в CloudFormation вы указываете разные аргументы напрямую.

0 голосов
/ 11 октября 2018

Значение ключа --arguments должно быть строкой, но вы фактически назначаете ей отображение (или в JSON-говорящем объекте), потому что оно начинается с {.Вы должны заключить в кавычки значение, и, поскольку у вас есть двойные кавычки в значении, лучше всего делать это с одинарными кавычками:

DefaultArguments:
  "--arguments": '{"--test_argument": "foo"}'

(любые существующие одинарные кавычки в значении, которые вы должны будете убрать, поставив два одинарныхкавычки)

Если ваш JSON более сложный, полезно использовать скалярные скаляры.Внутри них { также не имеет особого значения, и (одиночные) символы новой строки, за которыми следуют пробелы, заменяются одним пробелом.Таким образом, следующие данные загружаются в те же данные, что и в приведенном выше решении:

DefaultArguments:
  "--arguments": >
    {"--test_argument": 
        "foo"}

Конечно, если YAML (1.2) является надмножеством JSON, glue может легко предположить, что значение уже проанализировано, если оно нестрока, но она не выглядит такой умной и всегда ожидает JSON в виде строки.

...