28

GCS を使用してファイルを保存/取得する GAE プロジェクトがあります。これらのファイルは、GCE で実行されるコードで読み取る必要もあります (C++ ライブラリが必要なため、GAE では実行されません)。

実際の G​​AE > GCS < GCE にデプロイされた本番環境では、このセットアップは正常に機能します。ただし、ローカルでのテストと開発は、私が理解しようとしている別の話です。

推奨どおり、GAE の dev_appserver を GoogleAppEngineCloudStorageClient で実行して、(シミュレートされた) GCS にアクセスしています。ファイルはローカルのブロブストアに配置されます。GAE のテストに最適です。

これらは VM をローカルで実行するための GCE SDK ではないため、ローカルの「GCE」を参照するときは常に、Linux を実行しているローカル開発マシンにすぎません。ローカル GCE 側では、デフォルトの boto ライブラリ ( https://developers.google.com/storage/docs/gspythonlibrary ) を Python 2.x ランタイムと共に使用して、C++ コードと連携し、GCS からファイルを取得しています。 . ただし、開発中は、これらのファイルは dev_appserver の blobstore に保存されているため、boto からアクセスできません。

ローカル GAE と GCE をローカル GCS に正しく接続する方法はありますか?

とりあえずローカルのGCS部分は諦めて本物のGCSを使ってみました。boto を使用した GCE 部分は簡単です。GCS 部分は、access_token を使用して実際の G​​CS を使用することもできるため、次の方法でローカル blobstore の代わりに実際の G​​CS を使用します。

cloudstorage.common.set_access_token(access_token)

ドキュメントによると:

access_token: you can get one by run 'gsutil -d ls' and copy the
  str after 'Bearer'.

そのトークンは限られた時間だけ機能するため、理想的ではありません。より永続的な access_token を設定する方法はありますか?

4

5 に答える 5

1

開発環境から Google Cloud Storage にアクセスする便利なオプションがあります。Google Cloud SDK で提供されるクライアント ライブラリを使用する必要があります。ローカルで実行した後gcloud init、リソースにアクセスできます。

クライアント ライブラリ認証の例に示すように:

# Get the application default credentials. When running locally, these are
# available after running `gcloud init`. When running on compute
# engine, these are available from the environment.
credentials = GoogleCredentials.get_application_default()

# Construct the service object for interacting with the Cloud Storage API -
# the 'storage' service, at version 'v1'.
# You can browse other available api services and versions here:
#     https://developers.google.com/api-client-library/python/apis/
service = discovery.build('storage', 'v1', credentials=credentials)
于 2016-01-08T17:41:56.000 に答える
1

Google ライブラリは、駅にいる観光客のように行き来します。現在(2020 年)、google-cloud-storageは Python 3 を使用する GCE および GAE 標準環境で動作するはずです。

GAE および CGE では、環境からアクセス資格情報を取得し、ローカルで次のようなサービス アカウント JSON ファイルを提供できます。

GOOGLE_APPLICATION_CREDENTIALS=../sa-b0af54dea5e.json
于 2020-11-20T12:37:36.727 に答える
0

常に「本物の」リモート GCS を使用している場合は、新しい gcloud がおそらく最適なライブラリです: http://googlecloudplatform.github.io/gcloud-python/

Python 用のストレージ クライアント ライブラリがいくつあるのかを考えると、本当に混乱します。一部は AE 専用ですが、多くの場合、dev_appserver.py で実行するときにローカル モック Blobstore を強制的に (または少なくともデフォルトで) 使用します。

gcloud は常に実際の G​​CS を使用しているようです。これは私が望んでいるものです。また、ローカルで実行するときの認証を「魔法のように」修正します。

于 2016-07-28T17:54:30.283 に答える
-1

Python 用の appengine-gcs-clientは現在、本番環境の App Engine と dev_appserver.py 内でのみ有用であるように見えます。ローカルの例は、Boto を優先して開発者ドキュメントから削除されました :(ローカル GCS エミュレーションを使用します。おそらく、ローカル テストと GCE の両方で Boto を使用するのが最善です。

それでも「google.appengine.ext.cloudstorage」を使用したい場合は、アクセス トークンは常に期限切れになるため、手動で更新する必要があります。正直なところ、セットアップを考えると、Python から 'gsutil -d ls' を呼び出し、出力を解析して、ローカル資格情報から新しいトークンを取得するのが最も簡単な方法です。API クライアント ライブラリを使用して、より「正しい」方法でトークンを取得することもできますが、その時点では物事が遠回りになり、Boto を使用した方がよいでしょう。

于 2016-02-20T04:21:19.793 に答える