質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

804閲覧

Google App Engine(GAE)のローカルサーバ上のGoogle Cloud Storage(GCS)へのファイルアップロード

naosk8

総合スコア86

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/12/12 18:56

どなたか、お知恵を貸していただけますでしょうか。よろしくお願いします。

###前提・実現したいこと
Google App Engine(Python)にて、
Google Cloud Storageへのアクセスも行うアプリケーションを作っています。
その中で、一部、開発の過程として、ローカルファイルをGCSにアップロードする必要があるのですが、
dev_appserver.pyによって起動するローカルのGCSエンドポイントへのアップロード方法が分からず困っています。

###試したこと
リモートのGCSのバケットへのアップロードはgsutilコマンドで可能という旨、理解しており、
一通り、"Google Cloud Storage / GCS / dev_appserver / upload / local file"などの
キーワードをもとに調べたのですが有益な情報を発見できませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
Pythonやgcloudコマンドのバージョンは以下の通りです。

$ python --version Python 2.7.10 $ gcloud components list Your current Cloud SDK version is: 180.0.1 The latest available version is: 182.0.0 ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ Components │ ├──────────────────┬──────────────────────────────────────────────────────┬──────────────────────────┬───────────┤ │ Status │ Name │ ID │ Size │ ├──────────────────┼──────────────────────────────────────────────────────┼──────────────────────────┼───────────┤ │ Update Available │ Cloud SDK Core Libraries │ core │ 6.9 MiB │ │ Not Installed │ App Engine Go Extensions │ app-engine-go │ 97.7 MiB │ │ Not Installed │ Cloud Bigtable Command Line Tool │ cbt │ 4.0 MiB │ │ Not Installed │ Cloud Bigtable Emulator │ bigtable │ 3.5 MiB │ │ Not Installed │ Cloud Datalab Command Line Tool │ datalab │ < 1 MiB │ │ Not Installed │ Cloud Datastore Emulator │ cloud-datastore-emulator │ 17.7 MiB │ │ Not Installed │ Cloud Datastore Emulator (Legacy) │ gcd-emulator │ 38.1 MiB │ │ Not Installed │ Cloud Pub/Sub Emulator │ pubsub-emulator │ 33.2 MiB │ │ Not Installed │ Emulator Reverse Proxy │ emulator-reverse-proxy │ 14.5 MiB │ │ Not Installed │ Google Container Local Builder │ container-builder-local │ 3.7 MiB │ │ Not Installed │ Google Container Registry's Docker credential helper │ docker-credential-gcr │ 2.2 MiB │ │ Not Installed │ gcloud Alpha Commands │ alpha │ < 1 MiB │ │ Not Installed │ gcloud app Java Extensions │ app-engine-java │ 118.4 MiB │ │ Not Installed │ gcloud app PHP Extensions │ app-engine-php │ 21.9 MiB │ │ Not Installed │ kubectl │ kubectl │ 12.2 MiB │ │ Installed │ BigQuery Command Line Tool │ bq │ < 1 MiB │ │ Installed │ Cloud Storage Command Line Tool │ gsutil │ 3.3 MiB │ │ Installed │ gcloud Beta Commands │ beta │ < 1 MiB │ │ Installed │ gcloud app Python Extensions │ app-engine-python │ 6.2 MiB │ │ Installed │ gcloud app Python Extensions (Extra Libraries) │ app-engine-python-extras │ 27.8 MiB │ └──────────────────┴──────────────────────────────────────────────────────┴──────────────────────────┴───────────┘

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

最前策(何らかのコマンドでのローカルGCSへのアップロード)ではありませんが、
取り急ぎ、対処はできたので、その方法を共有します。引き続き、代替案は募集しております。。

自分の場合はDjangoを使っていますが、
以下のように、dev_appserver起動中にキックできるエンドポイントにて、
以下のような処理を実行することで、dev_appserver上のGCSへとローカルファイルをコピーできました。

python

1# -*- coding: utf-8 -*- 2from django.http import HttpResponse 3from google.appengine.tools.devappserver2.python.runtime.stubs import FakeFile 4import cloudstorage 5 6 7def execute(request): 8 project_root_dir = 'プロジェクトルートの絶対パス' 9 # ローカルファイルにアクセスできるよう、強制的に解放。本番では無効なので、あくまで開発用です。 10 # 本番環境ではローカルファイルアクセスが許されないので、本来はこの制約がある。 11 allowed_dirs = list(FakeFile.ALLOWED_DIRS) 12 allowed_dirs.append('プロジェクトルートから見たアクセスしたいフォルダの相対パス') 13 allowed_dirs = set(allowed_dirs) 14 FakeFile.set_allowed_paths(project_root_dir, allowed_dirs) 15 16 file_list = 移動したいファイルの、プロジェクトルートからみた相対パスのリスト 17 18 for file_path in file_list: 19 # get full path 20 full_file_path = project_root_dir + '/' + file_path 21 # open file locally 22 # 冒頭のFakeFileへの設定変更により、openをエラーなく実行可能。 23 with open(full_file_path) as local_file: 24 data = local_file.read() 25 local_file.close() 26 # save file in local gcs 27 save_path = 'バケット名' + '/' + file_path 28 with cloudstorage.open(filename=save_path, mode='w', content_type='text/plain') as f: 29 f.write(str(data)) 30 f.close() 31 32 return HttpResponse(status=200) 33

投稿2017/12/13 07:25

naosk8

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問