2012-09-15 4 views
13

Google APIコンソールで作成したサービスアカウントを使用して、gsutilでGoogle BigQueryにデータをアップロードするにはどうすればよいですか?CS + BigQueryにアップロードするためにgsutilでサービスアカウントを使用する方法

まず、gsutilを使用してCloud Storageにデータをアップロードしようとしています。これは推奨モデルのようです。 Gmailのユーザー承認ですべてうまく動作しますが、サービスアカウントを使用することはできません。

私がsigned JWT credentialsを使用してアクセストークンを取得するには、PythonのAPIを使用することができるようだが、私は再開可能アップロードなどをサポートするようにgsutilのようなコマンドラインツールを使用して希望

編集:私が使用したいですgsutilをcronで実行して毎晩Cloud Storageにファイルをアップロードし、BigQueryにインポートします。

お手伝いが必要な場合は、こちらをご覧ください。

+1

gsutilは2013年3月25日現在、サービスアカウントをサポートしています。以下のMike Schwartzの回答を参照してください。http://stackoverflow.com/a/15646928/92445 –

答えて

15

Google Cloud Storageは、サービスアカウント(他の多くの機能やバグ修正など)をサポートするgsutilの新しいバージョン(3.26)をリリースしました。すでにインストールされているgsutilの場合は、実行することで、このバージョンを入手することができます簡単に

を更新gsutilの

、あなたが実行してサービスアカウントを設定することができます。

gsutilのコンフィグ-e

を参照してください " configコマンドの使用方法の詳細については、「gsutil help config」を参照してください。 gsutilがサポートするさまざまな種類の資格情報(およびさまざまなユースケース)については、「gsutilヘルプのcred」を参照してください。

Mike Schwartz Google Cloud Storageチーム

4

サービスアカウントは一般的にアプリケーションを識別するために使用されますが、gsutilを使用する場合は対話型ユーザーであり、個人アカウントを使用するのが自然です。 Google Cloud Storageのリソースは、アクセスコントロールリストやデベロッパーコンソールの[チーム]タブから個人アカウントとサービスアカウントの両方に関連付けることができますので、私の助言はgsutilで個人アカウントを使用してからサービスアカウントを使用することですあなたのアプリケーションのために。

+0

これを実稼働環境のcronジョブで使用すると、会社を辞めるとどうなりますか? cronの仕事は失敗するでしょうか? – jonathan

+0

Jonathan - はい、あなたのユーザーアカウントが存在しなくなったら失敗します。 gsutilを使ってサービスアカウントをサポートするべきですが、まだしてはいけません。 1)おそらくgsutil/oauth2_plugin/oauth2_helper.pyに、サービスアカウントの既存のPythonのoauthクライアント実装を使用して機能をすばやく追加するか、2)アクセストークンを外部から取得し、〜/ .botoで指定されたキャッシュ場所に保存します、または3)gmail.comまたはgoogle appsを使用して自分自身で役割のアカウントを作成し、そのアカウントに許可を与え、oauthのフローに使用する。 –

+0

@RyanBoyd:ありがとう!私はそれを受け入れることができるように答えとしてコメントを投稿してください。 – jonathan

3

まず、bqコマンドラインツールを使用して、コマンドラインからBigQueryと対話する必要があります。 (hereについて読んで、hereをダウンロードしてください)。

私はそれがgsutilbqの両方であなたの個人的な資格情報を使用することをお勧めします、bqコマンドラインツールは、サービスアカウントの使用をサポートしていることマルクに同意します。サービスアカウント認証を使用するコマンドは、次のようになります。

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

タイプbq --help詳細については、

PythonやJava経由でコード内のサービスアカウントを使用するのもかなり簡単です。 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

ご協力ありがとうございます。しかし、gsutilは再開可能で信頼性の高いアップロードの方法だと私は理解しています。私はcronでこれを使用したいと思うし、私の個人的なアカウントに依存しない(私の会社を離れるとどうなるの?)。 cronは作業を続ける必要があります。 – jonathan

+0

はい、gsutilはCloud Storageと対話し、bqはCloud Storageに保存されているデータをBigQueryに読み込むことができます。 gsutilとbqの両方にOAuth2認証情報が保存され、毎回ログインせずにスクリプトを実行できるようになります。また、毎回ユーザー入力なしでcronジョブを実行できます。スクリプトでサービスアカウントを使用する場合は、次のようにします。(1)ストレージバケットのアクセス許可をサービスアカウントアドレスと独自の(2)bqと一緒に使用するように設定します。 –

+0

私の答えをいくつかの追加コード(上記)で更新しました –

2

答えとして投稿、代わりのコメントは、

はい、個々のユーザーによって行われたOAuthの助成金は、もはや有効ではないだろう。したがって、ユーザーアカウントを使用してユーザーベースのフローを使用する場合は、退社すると自動的に処理が失敗します。

gsutilを使用してサービスアカウントをサポートする必要があります。

あなたはのいずれかの操作を実行できます。おそらく、サービスの既存のpython OAuthクライアントの実装が

  • はトークンの外部からのアクセスを取得するアカウント使用して gsutilを/ oauth2_plugin/oauth2_helper.pyに迅速に機能を追加

    1. をサービスアカウントフローを作成し、〜/で指定されたキャッシュ場所に格納します。boto(ややハッキー)
    2. gmail.comまたはgoogle appsを使用して自分で役割アカウントを作成し、そのアカウントに許可を与えてOAuthフローに使用します。

    gsutilのサービスアカウントをサポートする機能リクエストを提出し、チームからの初期の肯定的なフィードバックがあります。 (ETAを提供することはできません)

  • +1

    この回答は廃止されました.Mykeの最新情報を参照してください。 – Benson

    関連する問題