16

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

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

Python APIを使用して、署名されたJWTクレデンシャルを使用してアクセストークンを取得できるようですが、再開可能なアップロードなどをサポートするgsutilなどのコマンドラインツールを使用することをお勧めします。

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

助けや進むべき道順をいただければ幸いです。

4

6 に答える 6

21

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

gsutil update

簡単に言うと、次のコマンドを実行してサービスアカウントを構成できます。

gsutil config -e

gsutil help configconfigコマンドの使用の詳細については、を参照してください。サポートするさまざまな種類のクレデンシャル(およびさまざまなユースケース)については、
を参照してください。gsutil help credsgsutil

マイクシュワルツ、Googleクラウドストレージチーム

于 2013-03-26T20:38:41.370 に答える
20

@Mikeの回答を拡張するには、次のことを行う必要があります

  1. サービスアカウントのキーファイルをダウンロードして、たとえば/etc/backup-account.json
  2. gcloud auth activate-service-account --key-file /etc/backup-account.json

そして今、すべての通話は上記のサービスアカウントを使用しています。

于 2019-05-02T15:30:43.493 に答える
3

サービスアカウントは通常、アプリケーションを識別するために使用されますが、gsutilを使用する場合はインタラクティブなユーザーであり、個人アカウントを使用する方が自然です。Google Cloud Storageのリソースは、いつでも個人アカウントとサービスアカウントの両方、またはその両方に関連付けることができます(アクセス制御リストまたは開発者コンソールの[チーム]タブを使用)。そのため、個人アカウントをgsutilで使用してから、サービスアカウントを使用することをお勧めします。あなたのアプリケーションのために。

于 2012-09-15T02:58:45.403 に答える
3

まず、bqコマンドラインツールを使用して、コマンドラインからBigQueryを操作する必要があります。(ここでそれについて読み、ここでダウンロードしてください)。

私はマークに同意します。コマンドラインツールはサービスアカウントの使用をサポートしているので、との両方gsutilで個人のクレデンシャルを使用することをお勧めします。サービスアカウント認証を使用するコマンドは、次のようになります。bqbq

bq --service_account 1234567890@developer.gserviceaccount.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認証ガイドのコードを使用した簡単な例を次に示します。

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 = 'XXXXX@developer.gserviceaccount.com'

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'])
于 2012-09-15T04:25:29.857 に答える
2

ジョナサンのリクエストに基づいて、コメントではなく回答として投稿する

はい。ユーザーが存在しなくなると、個々のユーザーによるOAuth付与は無効になります。したがって、個人アカウントでユーザーベースのフローを使用する場合、会社を辞めると自動化されたプロセスは失敗します。

gsutilでサービスアカウントをサポートする必要がありますが、まだサポートしていません。

次のいずれかを実行できます。

  1. おそらく、サービスアカウントの既存のpython oauthクライアント実装を使用して、gsutil / oauth2_plugin/oauth2_helper.pyに機能をすばやく追加します
  2. サービスアカウントフローを介して外部からアクセストークンを取得し、〜/ .botoで指定されたキャッシュの場所に保存します(少しハッキー)
  3. (gmail.comまたはgoogleアプリを介して)自分でロールアカウントを作成し、そのアカウントにアクセス許可を付与して、OAuthフローに使用します。

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

于 2012-09-17T02:04:20.990 に答える
0

現在のところ、で使用するサービスアカウントを設定するためにコマンドを実行する必要はありませんgsutil。あなたがしなければならないのは~/.boto、次のコンテンツで作成することです:

[Credentials]
gs_service_key_file=/path/to/your/service-account.json
于 2021-12-16T11:28:59.807 に答える