У меня есть определение задания, которое я могу запустить и запустить, но не могу установить переменную среды, которая мне нужна. Я использую Boto3, и ядро моего кода выглядит так:
job_def_arn = "arn: aws: партия: us-east-1: XXXX: определение задания / mytask: 2"
env_dict = {"FOO": "Bar", "BUCKET_NAME": "mybucket-bucket"}
env = [{"name": k, "value": v} for k, v in env_dict.items()]
node_overrides = {
"nodePropertyOverrides": [
{"targetNodes": "0:",
"containerOverrides": {"environment": env}}]}
print("***", node_overrides)
resp = batch.submit_job(jobName="foobarjobname",
jobQueue="my_job_queue",
jobDefinition=job_def_arn,
nodeOverrides=node_overrides)
Вывод:
*** {'nodePropertyOverrides': [{'targetNodes': '0:', 'containerOverrides': {'environment': [{'name': 'FOO', 'value': 'Bar'}, {'name': 'BUCKET_NAME', 'value': 'mybucket-bucket'}]}}]}
И задание запускается, но мой код не выполняется, потому что он не получает ожидаемые переменные среды. Я добавил код, чтобы распечатать os.environ, прежде чем он попытается его использовать. Когда я проверяю журналы, становится ясно, что в среде есть старые предопределенные значения env, изначально установленные в задании, а не те, которые я устанавливаю в своем коде.
Кто-нибудь видит, что я делаю неправильно? ? Любые идеи о том, как дополнительно диагностировать это?
Заранее спасибо.
Хулио
Обновление
Разобрался. Поспешил с выводами при просмотре документации и подумал, что вы задали среду, указав ее в nodePropertyOverrrides. Вы фактически делаете это, указывая containerOverrides.
env = [{"name": k, "value": v} for k, v in env_dict.items()]
container_overrides = {"environment": env}
resp = batch.submit_job(jobName="foobarjobname",
jobQueue="my_job_queue",
jobDefinition=job_def_arn,
containerOverrides=container_overrides)