Эмулятор хранилища данных Google Cloud не использует учетные данные по умолчанию - PullRequest
0 голосов
/ 13 сентября 2018

За Инструкции по установке эмулятора облачного хранилища данных Google , я смог установить и запустить эмулятор в окне терминала bash без проблем с gcloud beta emulators datastore start --project gramm-id.

Я также настроил переменные окружения в соответствии с инструкциями в другом терминале с $(gcloud beta emulators datastore env-init) и проверил, что они определены.

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

from google.cloud import datastore

print(os.environ['DATASTORE_HOST'])          # output: http://localhost:8081
print(os.environ['DATASTORE_EMULATOR_HOST']) # output: localhost:8081


client = datastore.Client('gramm-id')
kind = 'Task'
name = 'simpleTask'

task_key = client.key(kind, name)
task = client.Enity(key=task_key)
task['description'] = 'Buy milk'
client.put(task)

Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "tools.py", line 237, in <module>
    client = datastore.Client('gramm-id')
  File "/home/.../lib/python3.6/site-packages/google/cloud/datastore/client.py", line 205, in __init__
    project=project, credentials=credentials, _http=_http)
... long stack trace ....
  File "/home/.../lib/python3.6/site-packages/google/auth/_default.py", line 306, in default
    raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://developers.google.com/accounts/docs/application-default-credentials.

Не думаю, что мне нужно создать учетную запись службы GCP и предоставить учетные данные для доступа для использования эмулятора хранилища данных на моей машине.

Моя система:

  • Ubuntu 18.04
  • Anaconda python 3.6.6
  • Google CloudSDK 215.0.0
  • cloud-datastore-emulator 2.0.2.

Чего мне не хватает?

Ответы [ 2 ]

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

Теоретически вы должны иметь возможность использовать фиктивные учетные данные, например ::10000

class EmulatorCreds(google.auth.credentials.Credentials):

    def __init__(self):
        self.token = b'secret'
        self.expiry = None

    @property
    def valid(self):
        return True

    def refresh(self, _):
        raise RuntimeError('Should never be refreshed.')

client = datastore.Client(
    project='gramm-id',
    credentials=EmulatorCreds() , 
    _http=requests.Session()  # Un-authorized
)

Однако кажется, что в настоящее время это не работает , поэтому сейчас вам нужно установить GOOGLE_APPLICATION_CREDENTIALS

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

gcloud auth application-default login

Это предложит вам войти в систему через окно браузера и правильно настроит ваш GOOGLE_APPLICATION_CREDENTIALS. [1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...