AWS регион в AWS Клей - PullRequest
       13

AWS регион в AWS Клей

0 голосов
/ 31 августа 2018

Как я могу получить регион, в котором выполняется текущее задание Glue?


Когда начинает выполняться задание Glue, я вижу вывод

Detected region eu-central-1.

В AWS Lambda я могу использовать следующие строки для извлечения текущего региона:

import os
region = os.environ['AWS_REGION']

Однако, похоже, что переменная окружения AWS_REGION отсутствует в Glue, и поэтому KeyError повышается:

KeyError: 'AWS_REGION'


Причина, по которой мне нужен регион, заключается в том, что я пытаюсь получить все базы данных и таблицы, как описано в этом вопросе , и я не хочу жестко кодировать регион при создании клиента boto.

1 Ответ

0 голосов
/ 03 сентября 2018

Один из вариантов - передать AWS_REGION в качестве параметра задания. Например, если вы запускаете задание из Lambda:

import os

response = client.start_job_run(
    JobName = 'a_job_name',
    Arguments = {'--AWS_REGION': os.environ['AWS_REGION'] } 
)

В качестве альтернативы, если вы определяете свои задания с помощью ресурса AWS :: Glue :: Job CloudFormation:

GlueJob:
  Type: AWS::Glue::Job
  Properties:
    Role: !Ref GlueRole
    DefaultArguments:
      "--AWS_REGION": !Sub "${AWS::Region}"
    Command:
      ScriptLocation: !Sub s3://${GlueScriptBucket}/glue-job.py
      Name: glueetl

Затем вы можете извлечь параметр AWS_REGION в коде задания, используя getResolvedOptions :

import sys
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ['AWS_REGION'])
print('region', args['AWS_REGION'])
...