2012-09-15 15 views
13

Jak przesłać dane do Google BigQuery z gsutil, przy użyciu konta usługi utworzonego w konsoli API Google?Jak korzystać z Konta serwisowe gsutil, do przesyłania do CS + BigQuery

Najpierw próbuję przesłać dane do Cloud Storage używając gsutil, jako że wydaje się być zalecana modelu. Wszystko działa dobrze z zatwierdzeniem przez użytkownika gmail, ale nie pozwala mi korzystać z konta usługi.

Wydaje mogę użyć API Pythona aby uzyskać token dostępu z wykorzystaniem signed JWT credentials, ale wolałbym przy użyciu narzędzia wiersza polecenia podobnego gsutil ze wsparciem dla wznawianie przesyłania itp

EDIT: Chciałbym użyć gsutil w cronie, aby co noc przesyłać pliki do Cloud Storage, a następnie importować je do BigQuery.

Każda pomoc lub wskazówki dojazdu będą mile widziane. Konta usług

+1

Od 25 marca 2013 r. Gsutil obsługuje konta usług. Zobacz odpowiedź Mike Schwartz poniżej: http://stackoverflow.com/a/15646928/92445 –

Odpowiedz

15

Google Cloud Storage właśnie wydała nową wersję (3.26) gsutil, która obsługuje konta usług (a także wiele innych funkcji i poprawek). Jeśli masz już zainstalowany gsutil można dostać tej wersji uruchamiając:

gsutil aktualizować

W skrócie, można skonfigurować konta usługi, uruchamiając:

gsutil config -e

See " gsutil help config "aby uzyskać więcej informacji na temat używania polecenia config. Zobacz "gsutil help creds", aby uzyskać informacje o różnych smakach poświadczeń (i różnych przypadkach użycia) obsługiwanych przez gsutil.

Mike Schwartz, Google Cloud Storage Team

4

są powszechnie stosowane do identyfikacji aplikacji, ale przy użyciu gsutil jesteś interaktywny użytkownika i jest to bardziej naturalne korzystanie z konta osobistego. Zawsze możesz powiązać zasoby Google Cloud Storage z kontem osobistym i/lub kontem usługi (za pomocą list kontroli dostępu lub zakładki Zespół programisty), więc moja rada to skorzystanie z konta osobistego z gsutil, a następnie użycie konta usługi dla twojej aplikacji.

+0

Jeśli użyję tego w pracy cron w środowisku produkcyjnym, co się stanie, gdy opuszczę firmę? Czy zadanie cron zawiedzie? – jonathan

+0

Jonathan - tak, to się nie powiedzie, jeśli twoje konto użytkownika już nie istnieje. Powinniśmy obsługiwać konta usług za pomocą gsutil, ale jeszcze nie. Mógłbyś: 1) prawdopodobnie szybko dodać funkcję do gsutil/oauth2_plugin/oauth2_helper.py przy użyciu istniejącej implementacji kont usługi klienta ohasona lub 2) pobrać zewnętrznie token dostępu i zapisać go w lokalizacji pamięci podręcznej określonej w ~/.boto lub 3) utworzyć konto roli samodzielnie (za pośrednictwem gmail.com lub aplikacji google) i udzielić pozwolenia na to konto i użyć go do przepływu oauth. –

+0

@RyanBoyd: Dzięki! Czy mógłbyś dodać komentarz jako odpowiedź, abym mógł go zaakceptować? – jonathan

3

Przede wszystkim należy mieć przy użyciu narzędzia wiersza polecenia bq interakcję z BigQuery z wiersza poleceń. (Przeczytaj o tym here i pobierz go here).

zgadzam się z Markiem, że to dobry pomysł, aby skorzystać z indywidualnych poświadczeń zarówno gsutil i bq, linia poleceń narzędzie bq wspiera stosowanie kont usług. Komenda do używania uwierzytelnienia konta usługi może wyglądać mniej więcej tak.

bq --service_account [email protected] --service_account_credential_store keep_me_safe --service_account_private_key_file myfile.key query 'select count(*) from publicdata:samples.shakespeare' 

Rodzaj bq --help aby uzyskać więcej informacji.

Jest także całkiem łatwy w użyciu kont serwisowych w kodzie za pośrednictwem Pythona lub Javy. Oto krótki przykład użycia kodu z BigQuery Authorization guide.

import httplib2 

from apiclient.discovery import build 
from oauth2client.client import SignedJwtAssertionCredentials 

# REPLACE WITH YOUR Project ID 
PROJECT_NUMBER = 'XXXXXXXXXXX' 
# REPLACE WITH THE SERVICE ACCOUNT EMAIL FROM GOOGLE DEV CONSOLE 
SERVICE_ACCOUNT_EMAIL = '[email protected]' 

f = file('key.p12', 'rb') 
key = f.read() 
f.close() 

credentials = SignedJwtAssertionCredentials(
    SERVICE_ACCOUNT_EMAIL, 
    key, 
    scope='https://www.googleapis.com/auth/bigquery') 

http = httplib2.Http() 
http = credentials.authorize(http) 

service = build('bigquery', 'v2') 
datasets = service.datasets() 
response = datasets.list(projectId=PROJECT_NUMBER).execute(http) 

print('Dataset list:\n') 
for dataset in response['datasets']: 
    print("%s\n" % dataset['id']) 
+0

Dzięki za pomoc. Rozumiem jednak, że gsutil to sposób na wznawianie i niezawodne przesyłanie. Chciałbym użyć tego w cronie i nie być zależnym od mojego osobistego konta (co się dzieje, gdy opuszczam moją firmę?). Cron musi kontynuować pracę. – jonathan

+0

Tak, gsutil współdziała z Cloud Storage, a bq umożliwia załadowanie danych, które są przechowywane w Cloud Storage do BigQuery. Zarówno gsutil, jak i bq będą przechowywać twoje poświadczenia OAuth2, które pozwolą skryptom działać bez konieczności logowania za każdym razem, i tak, możesz uruchomić zadanie cron bez wprowadzania danych przez użytkownika za każdym razem. Jeśli zdecydujesz się użyć kont usługi w swoim skrypcie, to: (1) Ustaw uprawnienia do swojego zasobnika, tak aby zawierał adres konta usługi, jak również swój własny (2) Użyj tego konta usługi z bq, jak opisano powyżej. –

+0

Zaktualizowałem moją odpowiedź, dodając dodatkowy kod (powyżej) –

2

Delegowanie jako odpowiedź, a nie komentarz, na podstawie wniosku Jonathana

Tak, dotacja OAuth wykonane przez indywidualnego użytkownika nie będzie ważne, jeżeli użytkownik nie istnieje. Jeśli więc korzystasz z przepływu osobistego na koncie osobistym, automatyczne procesy zakończą się niepowodzeniem, jeśli opuścisz firmę.

Powinniśmy obsługiwać konta usług za pomocą gsutil, ale jeszcze nie.

Można zrobić jeden:

  1. Prawdopodobnie dodać funkcję szybko gsutil/oauth2_plugin/oauth2_helper.py wykorzystaniem istniejącej pyton implementacja klienta oauth obsługi rachunków
  2. Odzyskać token dostępu zewnętrznie poprzez przepływ konta usługi i przechowuj go w lokalizacji pamięci podręcznej określonej w ~ /.boto (nieco hacky)
  3. Utwórz konto roli samodzielnie (za pośrednictwem gmail.com lub aplikacji google) i nadaj uprawnienia do tego konta i używaj go do przepływu OAuth.

Złożyliśmy wniosek o dodanie funkcji do obsługi kont serwisowych dla gsutil i otrzymaliśmy początkową pozytywną opinię od zespołu. (choć nie można podać ETA)

+1

Ta odpowiedź jest już nieaktualna, zobacz odpowiedź Mike'a na więcej aktualnych informacji. – Benson