チェックポイント
Create a bucket
/ 50
Upload objects to your bucket
/ 50
アプリ開発: Cloud Storage への画像ファイルや動画ファイルの保存 - Python
GSP185
概要
Cloud Storage では、世界中のどこからでも、いつでもデータを保存、取得できます。データの量に制限はありません。ウェブサイト コンテンツの提供、アーカイブと障害復旧のためのデータの保存、直接ダウンロードによるユーザーへの大きなデータ オブジェクトの配布など、さまざまなシナリオで Cloud Storage を使用できます。
このラボでは、Cloud Storage を使用してアプリケーション データを保存、取得するようにアプリケーションを構成します。使用するアプリケーションはオンライン クイズ アプリケーション、使用するデータはそのフォームデータです。フォームに含める画像をローカルマシンからアップロードします。
目標
このラボでは、次のタスクの実行方法について学びます。
- Cloud Shell を開発環境として設定する
- アプリケーション コードを更新して Cloud Datastore を統合する
- クイズ アプリケーションを使用して画像ファイルを Cloud Storage にアップロードし、その画像をクイズに表示する
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
Cloud Shell コードエディタを起動する
- Cloud Shell で [エディタを開く] をクリックして、コードエディタを起動します。
- 次のコマンドを実行してプロジェクト ID を構成します。このとき
YOUR-PROJECT-ID
は実際のプロジェクト ID に置き換えます。
タスク 1. クイズ アプリケーションを準備する
このセクションでは、Cloud Shell にアクセスしてクイズ アプリケーションを含む git リポジトリのクローンを作成し、アプリケーションを実行します。
Cloud Shell でソースコードのクローンを作成する
- 次のコマンドを実行して、クラスのリポジトリのクローンを作成します。
クイズ アプリケーションを構成し、実行する
-
作業ディレクトリを変更します。
cd ~/training-data-analyst/courses/developingapps/python/cloudstorage/start -
アプリケーションを構成します。
. prepare_environment.sh 注: 警告が表示されても無視します。 このスクリプト ファイルを実行すると、以下の処理が行われます。
- App Engine アプリケーションを作成する。
- 環境変数
GCLOUD_PROJECT
をエクスポートする。 - pip を更新し、その後
pip install -r requirements.txt
を実行する。 - Cloud Datastore でエンティティを作成する。
- プロジェクト ID を出力する。
-
アプリケーションを実行します。
python run_server.py アプリケーションの実行が開始されると、次のような出力が表示されます。
* Running on http://127.0.0.1:8080/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 502-577-323
クイズ アプリケーションを確認する
-
[ウェブでプレビュー] アイコン > [ポート 8080 でプレビュー] をクリックして、アプリケーションをプレビューします。
-
ツールバーの [Create Question] をクリックします。
シンプルなフォームが表示されます。このフォームには、質問と解答用のテキストボックスと、正解を選択するためのラジオボタンが含まれています。
タスク 2. クイズ アプリケーションのコードを調べる
このセクションでは、このケーススタディ用アプリケーションのコードを確認します。
このラボでは、ファイルの閲覧と編集を行います。Cloud Shell にインストールされている nano
や vim
などの shell エディタや、Cloud Shell コードエディタを使用できます。
このラボでは、Cloud Shell コードエディタを使用してこのクイズ アプリケーションのコードを確認します。
アプリケーションのコードを確認する
-
エディタの左側にあるファイル ブラウザ パネルを使用して、
/training-data-analyst/courses/developingapps/python/cloudstorage/start
フォルダに移動します。 -
...quiz/webapp/templates/
フォルダにあるadd.html
ファイルを選択します。このファイルには、Create Question フォームのテンプレートが含まれています。
フォームが変更されていることに注意してください。
enc-type
にmultipart/form-data
が使用され、次の 2 つのフォーム コントロールが追加されています。-
image
: ファイル アップロード用コントロール -
imageUrl
: 非表示項目
-
-
...quiz/webapp
フォルダにあるroutes.py
ファイルを選択します。このファイルには、フォームデータを受け取る POST ハンドラのルートが含まれています。フォームから画像ファイルを取得するように変更されています。
-
...quiz/webapp
フォルダにあるquestions.py
ファイルを選択します。このファイルには、
routes.py
ファイルで抽出されたフォームデータを処理するハンドラが含まれています。Cloud Storage のクライアントである新しいモジュールを使用できるように、このファイルを変更します。 -
...quiz/gcp/storage.py
ファイルを選択します。このファイルに、画像ファイルのデータを Cloud Storage に保存するためのコードを記述します。
タスク 3. Cloud Storage バケットを作成する
このセクションでは、Cloud Storage バケットを作成し、それを参照する環境変数をエクスポートします。
-
Cloud Shell コマンドラインに戻ります。
-
Ctrl+C キーを押してアプリケーションを停止します。
-
<プロジェクト ID>-media
という名前の Cloud Storage バケットを作成します。gsutil mb gs://$DEVSHELL_PROJECT_ID-media バケットを作成するには gsutil mb コマンドを使用します。バケットの名前として gs://BUCKET_NAME を渡します。
接頭辞 $DEVSHELL_PROJECT_ID に -media を付けたバケット名を使用します。
-
次のコマンドを実行して、Cloud Storage バケット名を
GCLOUD_BUCKET
という名前の環境変数としてエクスポートします。
タスク 4. Cloud Storage にオブジェクトを追加する
このセクションでは、アップロードされたファイルを Cloud Storage に保存するためのコードを記述します。
Cloud Storage の API ドキュメントについて詳しくは、API とリファレンスをご覧ください。
Python の Cloud Storage モジュールをインポートして使用する
- コードエディタで
...quiz/gcp/storage.py
ファイルの先頭に移動します。 -
GCLOUD_BUCKET
環境変数からバケット名を取得します。 -
google.client
パッケージから storage モジュールをインポートします。 - Cloud Storage クライアントを作成します。
- Cloud Storage バケットへの参照を取得します。
quiz/gcp/storage.py
Cloud Storage にファイルを送信するコードを記述する
- 引き続き
storage.py
で、upload_file(...)
関数の既存の pass ステートメントを削除してから、Cloud Storage クライアントを使用して、Cloud Storage バケットにファイルをアップロードして公開します。 - バケット内の Cloud Storage blob オブジェクトへの参照を取得します。
- その blob オブジェクトを使用して画像をアップロードします。
- ファイルを公開します。
- blob の公開 URL を返します。
quiz/gcp/storage.py - upload)file(...)
関数
-
storage.py
を保存します。
Cloud Storage の機能を使用するためのコードを記述する
- エディタで
...quiz/webapp/questions.py
ファイルの先頭に移動します。 - datastore クライアントだけでなく storage クライアントも使用できるように import ステートメントを変更します。
-
upload_file(...)
関数に移動します。storage クライアントを使用してファイルをアップロードし、返された公開 URL を変数に代入します。 - その公開 URL を返すように return ステートメントを変更します。
-
save_question(...)
関数に移動します。image_file
が存在するかどうかを確認する if テストを記述します。 - 存在する場合は、
upload_file(...)
関数を呼び出して、imageUrl という名前のエンティティ プロパティに公開 URL を割り当てます。 - 存在しない場合は、imageUrl エンティティ プロパティに空の文字列を割り当てます。
quiz/webapp/questions.py
-
questions.py
を保存します。
アプリケーションを実行して Cloud Storage オブジェクトを作成する
-
...gcp/storage.py
ファイルと...webapp/questions.py
ファイルを保存してから、Cloud Shell コマンドに戻ります。 - Cloud Shell に戻ってアプリケーションを実行します。
-
Google のストレージから画像ファイルをローカルマシンにダウンロードします。
-
Cloud Shell で [ウェブでプレビュー] アイコン > [ポート 8080 でプレビュー] をクリックして、クイズ アプリケーションをプレビューします。
-
[Create Question] をクリックします。
-
フォームに次の値を入力して、[Save] をクリックします。
フォームの項目 値 Author 自分の名前 Quiz Google Cloud Platform
Title Which product does this logo relate to?
Image 先ほどダウンロードした Google_Cloud_Storage_logo.png ファイルをアップロード
Answer 1 App Engine
Answer 2 Cloud Storage
([Answer 2] のラジオボタンを選択します)Answer 3 Compute Engine
Answer 4 Container Engine
-
Google Cloud コンソールに戻り、ナビゲーション メニュー > [Cloud Storage] に移動します。
-
[Cloud Storage] > [ブラウザ] ページで、適切なバケット(
<プロジェクト ID>-media
という名前)をクリックします。
Google_Cloud_Storage_logo.png
という名前の新しいオブジェクトが表示されます。
クライアント アプリケーションを実行して Cloud Storage の公開 URL をテストする
-
アプリケーションの URL の末尾に
/api/quizzes/gcp
を追加します。先ほどこのウェブ アプリケーションに追加した質問に対応する JSON データがクライアントに返されるはずです。
imageUrl プロパティには、Cloud Storage のオブジェクトに対応する値が含まれています。
-
アプリケーションのホームページに戻り、[Take Test] リンクをクリックします。
-
[GCP] をクリックし、各質問に答えます。
先ほど追加した質問まで進むと、クライアント側ウェブ アプリケーションに画像が表示されます。
お疲れさまでした
ラボ「アプリ開発: Cloud Storage への画像ファイルと動画ファイルの保存 - Python」はこれで終了です。Cloud Storage を使ってアプリケーション データの保存と取り出しを行いました。
クエストを完了する
このセルフペース ラボは、「Application Development - Python」クエストおよび「Cloud Development」クエストの一部です。クエストとは学習パスを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、このラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。
次のステップと詳細情報
画像や動画で他にどのようなことができるか確認します。
詳しくは「Google Cloud 上の Python」をご覧ください
マニュアルの最終更新日: 2023 年 10 月 13 日
ラボの最終テスト日: 2023 年 10 月 18 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。