Python スタートガイド

このチュートリアルは、初めてクラウドでアプリを構築する方々を対象にしています。エンジニアやウェブ デベロッパーなどが、 Google Cloudに適用できるアプリ開発の重要なコンセプトを学習する場合に役立ちます。

目標

費用

このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。

このドキュメントの手順は、リソース使用量が Google Cloudの無料枠ティアの制限内に収まるように設計されています。 料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Firestore データベースをネイティブ モードで作成するには、次の手順に沿って操作してください。
    1. Google Cloud コンソールで、[Firestore のデータベースの作成] ページに移動します。

      Firestore のデータベースの作成に移動

    2. [Cloud Firestore モードの選択] 画面から [ネイティブ モードを選択] をクリックします。
    3. Firestore データベースのロケーションを選択します。このロケーション設定は、 Google Cloud プロジェクトのデフォルトの Google Cloud リソースのロケーション です。このロケーションは、ロケーション設定が必要な Google Cloud プロジェクトの Google Cloud サービスで使用されます。具体的には、デフォルトの Cloud Storage バケットと Cloud Run アプリです。
    4. [データベースを作成] をクリックします。
  7. Cloud Run Admin、Cloud Storage、Cloud Logging、Error Reporting API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

    API を有効にする

  8. サンプル リポジトリのクローンを作成して、Cloud Shell でサンプル アプリケーションを開きます。
    Cloud Shell に移動

    Cloud Shell を使用すると、ブラウザからコマンドラインで直接 Google Cloud リソースにアクセスできます。

  9. サンプルコードをダウンロードしてアプリのディレクトリに移動するには、[続行] をクリックします。
  10. Cloud Shell で、gcloud ツールを構成して新しい Google Cloud プロジェクトを使用します。

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID

    PROJECT_ID は、 Google Cloud コンソールを使用して作成した Google Cloud プロジェクト ID に置き換えます。

    Google Cloud CLI は、コマンドラインから Google Cloud リソースを操作する基本的な方法です。このチュートリアルでは、gcloud ツールを使用してアプリをデプロイおよびモニタリングします。

アプリを実行する

  1. Cloud Shell で、pip を使用してアプリの依存関係をインストールします。

    pip3 install -r requirements.txt --user
    
  2. Gunicorn HTTP サーバーを実行します。
    ~/.local/bin/gunicorn -b :8080 main:app
    
  3. Cloud Shell で、[ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択します。新しいウィンドウが開き、実行中のアプリが表示されます。

アプリを Cloud Run にデプロイする

Google Cloud には、コードを実行するためのいくつかのオプションが用意されています。この例では、Cloud Run を使用してスケーラブルなアプリを Google Cloudにデプロイします。Cloud Run では、サーバーを管理する必要はなく、トラフィックの急増に対応するために自動的にスケーリングします。

  1. Cloud Build を使用して Docker コンテナをビルドし、Container Registry に公開します。
    gcloud builds submit --tag gcr.io/PROJECT_ID/bookshelf .

    PROJECT_ID は、作成した Google Cloudプロジェクト ID に置き換えます。

  2. Cloud Run を使用してコンテナを実行します。
    gcloud run deploy bookshelf --image gcr.io/PROJECT_ID/bookshelf \
    --platform managed --region us-central1 --allow-unauthenticated

    これで、アプリは gcloud run の出力に表示される URL で確認できるようになりました。

    Service [bookshelf] revision [bookshelf-00001] has been deployed and is serving 100 percent of traffic. 
    Service URL: https://bookshelf-swsmmh5s5a-uc.a.run.app

  3. ウェブブラウザに URL をコピーして、アプリを表示します。

    Bookshelf アプリのホームページ

Cloud Run へのデプロイの詳細については、Cloud Run のドキュメントをご覧ください。

Firestore を使用してデータを保存する

Cloud Run インスタンスに情報を保存することはできません。インスタンスを再起動すると情報が失われ、新しいインスタンスが作成されたときにはその情報は存在しないためです。そこで、すべてのインスタンスが読み取りおよび書き込みするデータベースを使用します。

Google Cloud には、データを保存するためのいくつかのオプションが用意されています。この例では、Firestore を使用して各書籍のデータを保存します。Firestore はフルマネージドでサーバーレスの NoSQL ドキュメント データベースで、データを保存および照会できます。Firestore はアプリのニーズを満たすために自動でスケールし、使用しない場合はゼロにスケールします。最初の書籍を追加しましょう。

  1. デプロイしたアプリ用の書籍を作成するには、[Add book] をクリックします。

    Bookshelf アプリに書籍を追加する
  2. [Title] 項目に「Moby Dick」と入力します。
  3. [Author] 項目に「Herman Melville」と入力します。
  4. [保存] をクリックします。Bookshelf アプリにエントリが追加されました。

    Moby Dick の Bookshelf アプリのエントリ
  5. Google Cloud コンソールで Firestore ページを更新するには、[更新] をクリックします。データが Firestore に表示されます。Bookshelf アプリは、各書籍を一意の ID とともに Firestore ドキュメントとして保存し、これらのドキュメントはすべて Firestore コレクション内に保存されます。このチュートリアルでは、コレクションを書籍集(books)と呼びます。Firestore ドキュメントの例。

Firestore は Firestore クライアント ライブラリを使用して書籍集を保存します。Firestore ドキュメントを取得する例を次に示します。

from google.cloud import firestore
db = firestore.Client()
book_ref = db.collection(u'Book').document(book_id)
snapshot = book_ref.get()

Firestore の使用方法の詳細については、Firestore にデータを追加するをご覧ください。

Cloud Storage にアップロードしたファイルを保存する

書籍を追加したので、書籍の表紙の画像を追加します。ファイルをインスタンスに保存することはできず、データベースは画像ファイルに適していません。そこで Cloud Storage を使用します。

Cloud Storage は Google Cloudのメインの blob ストアです。Cloud Storage を使用して、 Google Cloudで共有するアプリのアセットをホストできます。Cloud Storage を使用するには、データを保存する基本的なコンテナである Cloud Storage バケットを作成する必要があります。

  1. Google Cloud コンソールで、[Cloud Storage ブラウザ] ページに移動します。

    Cloud Storage ブラウザページに移動

  2. [バケットを作成] をクリックします。
  3. [バケットを作成] ダイアログで、 Google Cloud プロジェクト ID を文字列 _bucket に追加してバケットの名前を入力し、名前を YOUR_PROJECT_ID_bucket のようにします。この名前はバケット名の要件を満たしている必要があります。他のすべての項目はデフォルト値のままにします。
  4. [作成] をクリックします。
  5. バケットの作成後、ユーザーが閲覧できるようにオブジェクトを一般公開する必要があります。オブジェクトを一般公開するには、データの一般公開をご覧ください。
  6. [Edit book] をクリックして、書籍の表紙としてアップロードする画像を選択します。たとえば、このパブリック ドメインの画像を使用します。
    Moby Dick の書籍の表紙
  7. [保存] をクリックします。Bookshelf アプリのエントリがあるホームページにリダイレクトされます。
    Moby Dick の Bookshelf アプリのエントリ

Bookshelf アプリは、Cloud Storage クライアント ライブラリを使用して、アップロードされたファイルを Cloud Storage に送信します。

client = storage.Client()
bucket = client.bucket(bucketname)
blob = bucket.blob(filename)

blob.upload_from_string(
    file_stream,
    content_type=content_type)
# Ensure the file is publicly readable.
blob.make_public()

url = blob.public_url

Cloud Storage の使用方法については、Cloud Storage の概要をご覧ください。

Google Cloud Observability を使用してアプリをモニタリングする

アプリをデプロイし、書籍を作成して修正しました。ユーザーのためにこのようなイベントをモニタリングするには、アプリケーション パフォーマンス管理を使用します。

Cloud Logging でログをモニタリングする

  1. Google Cloudで、[ログ エクスプローラ] に移動します。

    [ログ エクスプローラ] に移動

    アプリをリアルタイムでモニタリングできます。アプリに問題が発生した場合は、まずこちらの画面を確認してください。

    Stackdriver ログビューア
  2. [リソース] プルダウン リストで、[Cloud Run のリビジョン, bookshelf] を選択します。

Error Reporting でエラーをモニタリングする

  1. Google Cloud コンソールで、[Error Reporting] ページに移動します。
    [Error Reporting] ページに移動
    Error Reporting では、アプリ内のエラーと例外が強調表示され、そのアラートを設定できます。
  2. ブラウザで、アプリの /errors URL にアクセスします。
    YOUR_CLOUD_RUN_URL/errors

    これにより、新しいテストの例外が生成され、Google Cloud Observability に送信されます。

  3. Google Cloud コンソールで、[Error Reporting] ページに戻り、しばらくすると新しいエラーが表示されます。[自動再読み込み] をクリックすると、ページを手動で更新する必要がなくなります。

    Error Reporting のエラー メッセージ。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトを削除する

  1. Google Cloud コンソールで [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ