2017-04-20 2 views
2

私は実行しているPythonスクリプトに(おそらくユニークな)ユースケースを持っています。バケットからファイルをアップロードし、ダウンロードするためにkeyfile.jsonをgsutilに渡すことはできますか?

subprocess.Popen(["gsutil", "-q", "-m", "-o", "GSUtil:parallel_process_count=8,GSUtil:parallel_thread_count=8", "cp", files, destination]) 

:むしろ、私のようなsubprocess呼び出しを使用し、つまり、私はgsutilの並列素晴らしをしたいので、私はfrom google.cloud import storageをしません。

インスタンスグループテンプレートでは、-scopes経由でサービスアカウントに渡すことができますが、認証をアプリケーションレベルで処理したいと考えています。

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "keyfile.json" 
tmp_env = os.environ.copy() 
subprocess.Popen(['gsutil', ...], env=tmp_env) 

が、無駄にする:私は、環境変数を設定しsubprocessにそれを渡してみました。実行中:

gcloud auth activate-service-account --key-file /path/to/keyfile.json --project my-project -q 

は、Python APIを必要としないjsonキーファイルで認証する最善の方法のようです。しかし、私がDockerfileの終わりにそれを投げればうまくいきませんし、インスタンスグループテンプレートの最後に実行したstartup.shスクリプトの最後にそれを投げ込むこともできます.shスクリプトは、どちらも本当に私が望むものを達成していません。つまり、どちらもアプリケーションレベルで「gsutil認証」を取得するという私の本来の目標から離れます。

tl; dr keyfile.json資格情報をgsutilに渡す方法はありますか?これはgsutilチームがこれまで論じてきた機能ですか? Cloud Platformとgsutilドキュメントを十分に狩っていないのであれば謝罪します。

答えて

3

あなたはそうのようなあなたの.boto設定ファイルにgsutilためのJSONのキーファイルへのポインタを提供することができます。

[Credentials] 
gs_service_key_file = /path/to/your/keyfile.json 

これは、スタンドアロンのためgsutil config -eを実行するのと同じである(非gcloud)をインストールします。

.boto構成ファイルではなく、コマンドラインでこの値を指定する場合は、コマンドラインでプロセスおよびスレッド数を構成した方法と同様の-oパラメータを使用できます。あなたのコンテナ内からキーファイルのパスにアクセスできることを確認する必要があります。

+0

優れています。まさに私が探していたもの。ダンケ – shogekiha

+0

なぜドキュメントでこれを見つけることができないのですか? gsutilのすべてのドキュメンテーションが対話的な認証を示しているということは私には意味がありません。なぜなら、私(と確かに無数の人)はどこかのコンテナのスクリプトから認証を受ける必要があります。 – Brennan

+0

なぜ文書で見つけられないのですか?私はちょうど[コミットを押した](https://github.com/GoogleCloudPlatform/gsutil/commit/5e5ba0671f3a6bde14676f6cbcef06ec9772ffb7)それを修正するために、私はちょうど[コミットをプッシュ]! –

関連する問題