Search code examples
python-3.xgoogle-cloud-platformgoogle-cloud-bigtablebigtable

How to connect to GCP BigTable using Python


I am connecting to my GCP BigTable instance using python (google-cloud-bigtable library), after setting up "GOOGLE_APPLICATION_CREDENTIALS" in my environment variables. I'm successful at doing this.

However, my requirement is that I want to pass the credentials during the run-time while creating the BigTable Client object as shown below:

client = bigtable.Client(credentials='82309281204023049', project='xjkejfkx')

I have followed the GCP BigTable Client Documentation to connect to GCP BigTable, but I am getting this error:

Traceback (most recent call last):
  File "D:/testingonlyinformix/bigtable.py", line 14, in <module>
    client = bigtable.Client(credentials="9876543467898765", project="xjksjkdn", admin=True)
  File "D:\testingonlyinformix\new_venv\lib\site-packages\google\cloud\bigtable\client.py", line 196, in __init__
    project=project, credentials=credentials, client_options=client_options,
  File "D:\testingonlyinformix\new_venv\lib\site-packages\google\cloud\client\__init__.py", line 320, in __init__
    self, credentials=credentials, client_options=client_options, _http=_http
  File "D:\testingonlyinformix\new_venv\lib\site-packages\google\cloud\client\__init__.py", line 167, in __init__
    raise ValueError(_GOOGLE_AUTH_CREDENTIALS_HELP)
ValueError: This library only supports credentials from google-auth-library-python. See https://google-auth.readthedocs.io/en/latest/ for help on authentication with this library.

Can someone please suggest what are all the fields/attributes a Client object is expecting during the run-time when making a connection to GCP BigTable?

Thanks


Solution

  • After 2 hrs of searching I finally landed on these page(s), please check them out in order:

    1. BigTable Authentication
    2. Using end-user authentication
    3. OAuth Scopes for BigTable
    from google_auth_oauthlib import flow
    
    appflow = flow.InstalledAppFlow.from_client_secrets_file(
        "client_secrets.json", scopes=["https://www.googleapis.com/auth/bigtable.admin"])
    
    appflow.run_console()
    credentials = appflow.credentials
    

    The credentials in the previous step will need to be provided to the BigTable client object:

    client = bigtable.Client(credentials=credentials, project='xjkejfkx')

    This solution worked for me, if anyone has any other suggestions, please do pitch-in.