MissingServiceIdError, когда boto3 используется внутри скрипта userdata - PullRequest
0 голосов
/ 27 мая 2019

Мой шаблон CloudFormation (AWS::EC2::Instance) вызывает скрипт Python из раздела пользовательских данных. Этот скрипт пытается обновить открытый ключ конечной точки разработки клея. Вот соответствующая часть кода:

glue_client = boto3.client('glue', 
                           endpoint_url=endpoint or GLUE_CONF.get('endpoint_url'),
                           region_name=GLUE_CONF.get('region_name'))
glue_client.update_dev_endpoint(EndpointName=endpoint_name, PublicKey=public_key)

Первая строка работает нормально, если запускать вручную после завершения создания экземпляра EC2, но не удается со следующей ошибкой , если вызывается как часть сценария пользовательских данных :

Traceback (most recent call last):
  File "/home/ec2-user/setup_notebook_server.py", line 448, in <module>
        key_pw=args.keypw, endpoint=args.endpoint)
  File "/home/ec2-user/setup_notebook_server.py", line 326, in automated_main
        generate_keypair_and_update_dev_endpoint(endpoint=endpoint)
  File "/home/ec2-user/setup_notebook_server.py", line 268, in generate_keypair_and_update_dev_endpoint
        update_dev_endpoint_and_wait(get_dev_endpoint_name(), public_key, endpoint)
  File "/home/ec2-user/setup_notebook_server.py", line 213, in update_dev_endpoint_and_wait
        region_name=GLUE_CONF.get('region_name'))
  File "/usr/local/lib/python2.7/site-packages/boto3/__init__.py", line 91, in client
        return _get_default_session().client(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/boto3/session.py", line 263, in client
        aws_session_token=aws_session_token, config=config)
  File "/usr/local/lib/python2.7/site-packages/botocore/session.py", line 838, in create_client
        client_config=config, api_version=api_version)
  File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 80, in create_client
        cls = self._create_client_class(service_name, service_model)
  File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 106, in _create_client_class
        service_id = service_model.service_id.hyphenize()
  File "/usr/local/lib/python2.7/site-packages/botocore/utils.py", line 730, in __get__
        computed_value = self._fget(obj)
  File "/usr/local/lib/python2.7/site-packages/botocore/model.py", line 307, in service_id
        service_name=self._service_name
botocore.exceptions.MissingServiceIdError: The model being used for the service glue is missing the serviceId metadata property, which is required.

Что означает это исключение и как его исправить?

...