arrow_back

Google Cloud サーバーレス プラットフォームへの Go アプリのデプロイ

ログイン 参加
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

Google Cloud サーバーレス プラットフォームへの Go アプリのデプロイ

ラボ 1時間 10分 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

GSP702

Google Cloud セルフペース ラボ

概要

Go は、Google によるオープンソースのプログラミング言語です。Go を使うと信頼性効率性に優れた、高速かつスケール可能なソフトウェアを簡単に構築できます。このラボでは、シンプルな Go のアプリを Cloud Run functionsApp Engine にデプロイして、Go の基礎を学びます。次に、Go アプリを使用して、BigQueryFirestore のデータにアクセスします。

演習内容

このラボでは、次のタスクを行います。

  • Firestore データベースを設定して、データをインポートする
  • Cloud Build の機能の概要を確認する
  • BigQuery と Firestore のデータにアクセスする
  • Go アプリを App Engine と Cloud Run functions にデプロイする
  • Go アプリのコードを調べる
  • 各プラットフォームでアプリをテストする

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。

    ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでも [ユーザー名] を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでも [パスワード] を確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックします。ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

  2. 出力は次のようになります。

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

Go とは

Go(golang)は、システムのプログラミング用に設計された汎用言語です。堅牢なこの言語は、ガベージ コレクション機能を備えており、並行プログラミングをサポートしています。プログラムはパッケージで構築され、それらのプロパティにより依存関係を効率的に管理できます。

Python や JavaScript と違って、Go はスクリプト言語ではなく、コンパイル言語です。Go のソースコードは、実行前にマシンコードにコンパイルされます。そのため、Go は一般的にスクリプト言語より高速かつ効率的で、プログラムを実行するために Node、Python、JDK のようなランタイムをインストールする必要ありません。

サーバーレス プラットフォーム

サーバーレス コンピューティングを利用することで、デベロッパーはインフラストラクチャを意識することなく、コードの記述に集中できます。従来のコンピューティングに比べ、サーバー管理不要、事前プロビジョニング不要、自動スケーリング、使用したリソースのみに対する支払いなどの利点があります。こうした利点を活かして、ステートレスな HTTP アプリケーション、ウェブ、モバイル、IoT バックエンド、バッチとストリーミングのデータ処理、チャットボットなどの幅広い用途に利用できます。

Go は、効率性とポータビリティに優れていて、使い方を簡単に学べるので、クラウド アプリケーションに最適です。このラボでは、Cloud Build を使って、Google のサーバーレス プラットフォームである Cloud Run functions と App Engine に Go アプリをデプロイする方法を学びます。

  • Cloud Run functions
  • App Engine
注: 個々のニーズに最適なサーバーレス プラットフォームについては、サーバーレス オプションをご覧ください。

Cloud Build

Cloud Build は、Google Cloud インフラストラクチャでビルドを行うサービスです。Cloud Build では、Cloud Storage、Cloud Source Repositories、GitHub、Bitbucket からソースコードをインポートし、仕様に合わせてビルドを実行して、Docker コンテナなどのアーティファクトを生成します。

Cloud Build は、一連のビルドステップとしてビルドを実行します。各ビルドステップは、Docker コンテナで実行されます。ビルドステップでは、環境に関係なく、コンテナで実行可能なすべての処理を実行できます。詳細については、Cloud Build のドキュメントをご覧ください。

Cloud Run functions

Cloud Run functions は、Google Cloud のイベント ドリブンのサーバーレス コンピューティング プラットフォームです。Go はマシンコード バイナリにコンパイルされ、起動の際にフレームワークに依存せず、インタプリタを必要としないので、Go のコールド スタート時間は 80~1400 ms です。このように起動時間が短く、その間はアプリケーションとサービスを利用しないため、費用がかかりません。また、スタートアップとコールド スタートのトラフィックの処理は 1400 ms 以内です。起動後に、Cloud Functions の関数はトラフィックを瞬時に処理します。これだけでも、Go が Cloud Run functions にデプロイする最適な言語であることがわかります。

アーキテクチャ

Go アプリのサンプルである Google Cloud Data Drive を Cloud Run functions にデプロイすると、データフローのアーキテクチャは以下のようになります。

Cloud Run 上の Go ウェブアプリのアーキテクチャ図

App Engine

App Engine スタンダード環境は、Google のインフラストラクチャで実行されるコンテナ インスタンスに基づいています。コンテナは、複数の利用可能なランタイムの 1 つで事前構成されています。

アーキテクチャ

Go アプリのサンプルである Google Cloud Data Drive を App Engine にデプロイすると、データフローのアーキテクチャは以下のようになります。

Go Serverless のアーキテクチャ図

Google Cloud Data Drive のソースコード

このラボでは、Google Cloud Data Drive という名前のシンプルなアプリをデプロイします。Google は、Google Cloud からデータをすぐに抽出できるように、このアプリを開発し、ソースコードを公開しました。Google Cloud Data Drive アプリは、Cloud API とサービスを使う際に効果的な利用パターンを示す一連のツールの 1 つです。

Google Cloud Data Drive Go アプリは、シンプルで構成可能な URL パスを公開し、サポートされる Google Cloud データ プラットフォームから JSON 形式でデータを取得します。現在このアプリは BigQuery と Firestore をサポートしていますが、モジュール化された設計であり、多数のデータソースをサポートすることが可能です。

Google Cloud Data Drive を実行している Google Cloud からデータを取得する際に使用される HTTP URL パターンを以下に示します。

  • Firestore : [SERVICE_URL]/fs/[PROJECT_ID]/[COLLECTION]/[DOCUMENT]

  • BigQuery: [SERVICE_URL]/bq/[PROJECT_ID]/[DATASET]/[TABLE]

ここで

パラメータ

説明

[SERVICE URL]

App Engine または Cloud Run Functions からのアプリケーションのベース URL です。App Engine のベース URL は、https://[PROJECT ID].appspot.com/ のようになります。

[PROJECT ID]

アクセスする Firestore コレクションまたは BigQuery データセットのプロジェクト ID。プロジェクト ID はラボの左側のパネルで確認できます。

[COLLECTION]

Firestore コレクション ID(symbols/product)です。

[DOCUMENT]

返信する Firestore ドキュメント(symbol)です。

[DATASET]

BigQuery データセット名(publicviews)です。

[TABLE]

BigQuery テーブル名(ca_zip_codes)です。

注: このラボではアプリをテストするために curl を使用しますが、URL を自分で作成して、ブラウザで機能テストを別に実施することもできます。

タスク 1. 環境の設定

  1. このラボの後半で使用するために、Cloud Shell で 以下のコマンドを入力して、プロジェクト ID を保存する環境変数を作成します。
gcloud config set compute/region {{{ project_0.default_region | "filled in at lab startup." }}} export REGION=$(gcloud config get compute/region) export PROJECT_ID=$(gcloud info --format="value(config.project)")
  1. このラボのサンプルコードを Google Cloud Storage(GCS)からコピーします。
mkdir DIY-Tools gsutil cp -R gs://spls/gsp702/DIY-Tools/* DIY-Tools/

データベースの準備

このラボでは、BigQuery と Firestore のサンプルデータを使って Go アプリをテストします。

BigQuery データベース

BigQuery は、ML、データ パーティショニング、セグメンテーション向けの多数の機能を備えた、サーバーレスのデータ ウェアハウスで、長期の使用が可能です。BigQuery では、ANSI SQL を使用してギガバイトからペタバイト規模のデータを極めて高速に分析でき、運用のオーバーヘッドは発生しません。

BigQuery データセットは、カリフォルニア州の郵便番号を示したもので、ラボ開始時に作成されました。

Firestore データベース

Firestore は、ドキュメントを超高速で検索する機能とリアルタイムのイベントを処理する機能を備えた、サーバーレスのドキュメント データベースです。また、99.999% の SLA を保証します。アプリのテストに Firestore のデータを使用するには、Firestore をネイティブ モードに初期化して、サンプルデータをインポートする必要があります。

Firestore ネイティブ モードのデータベース インスタンスがあらかじめ作成されています。

  1. Cloud コンソールで、ナビゲーション メニュー > [Firestore] をクリックして、コンソールで Firestore を開きます。

Firestore データベース インスタンスが初期化されるまで待ちます。この処理によって同じリージョンの App Engine も初期化されるので、最初に App Engine インスタンスを作成することなく、アプリケーションを App Engine にデプロイできます。

  1. Cloud Shell で Firestore インポート ジョブを起動します。これにより、ラボ用の Firestore サンプルデータが準備されます。
gcloud firestore import gs://$PROJECT_ID-firestore/prd-back

このインポート ジョブにより、symbols というコレクションの Cloud Firestore バックアップが $PROJECT_ID-firestore ストレージ バケットに読み込まれます。

インポート ジョブが完了するには最長で 5 分ほどかかることがあります。その間に次のセクションに進みます。

Firestore データベースのデプロイメントを確認する

Cloud Build の権限の構成

Cloud Build は、Google Cloud インフラストラクチャでビルドを行うサービスです。デフォルトの Cloud Build には、以下にアプリケーションをデプロイするための十分な権限がありません。

  • App Engine
  • Cloud Run functions

Cloud Build を使って Google Cloud Data Drive アプリをデプロイする前に、これらのサービスを有効にする必要があります。

  1. コンソールで、ナビゲーション メニュー > [Cloud Build] > [設定] の順にクリックします。
  2. [Cloud Functions] の [ステータス] を [有効] に設定します。

UI の Cloud Run functions の横にある [ステータス] プルダウン メニューで [有効] オプションがハイライト表示されている

  1. プロンプトが表示されたら、[すべてのサービス アカウントにアクセス権を付与] をクリックします。
  2. [Cloud Run] の [ステータス] を [有効] に設定します。
  3. [App Engine] の [ステータス] を [有効] に設定します。

タスク 2. Cloud Run Functions にデプロイする

Cloud Run functions は、Google Cloud のイベント ドリブンのサーバーレス コンピューティング プラットフォームです。Go と Cloud Run functions とを組み合わせると、起動時間が高速で、無制限にスケールできる、優れたサーバーレスのプラットフォームとなります。また、アプリケーションでのイベント ドリブンの応答時間が最短になります。

ソースコードを調べて、Cloud Run functions で Google Cloud Data Drive ソースコードを再利用する方法を確認します。

main 関数の確認

  1. DIY-Tools/gcp-data-drive/cmd/webserver/main.gomain 関数を起動する際に、gcpdatadrive.GetJSONData Go 関数へすべての HTTP リクエストを送信するようにウェブサーバーに指示します。
func main() { // Register the initial HTTP handler. http.HandleFunc("/", gcpdatadrive.GetJSONData) port := os.Getenv("PORT") ...
  1. GitHub の main.gomain 関数を確認してください。

Cloud Run functions では、main.go が使用されるのではなく、Cloud Run functions ランタイムが設定されていて、DIY-Tools/gcp-data-drive/gcpdatadrive.go ファイルで定義された gcpdatadrive.GetJSONData Go 関数に直接 HTTP リクエストを送信します。

  1. これについては、Cloud Build で cloudbuild_gcf.yaml を使用して、Google Cloud Data Drive アプリケーションを Cloud Run functions にデプロイする方法を調べることで確認できます。
注: 見やすくするため、コメントは削除しています。

エントリポイント行の「GetJSONData」がハイライト表示されている

  1. GitHub の cloudbuild_gcf.yaml を確認してください。

Cloud Build のステップは、アプリケーションを Cloud Run にデプロイするステップとも似ていますが、この場合、gcloud functions deploy コマンドを使ってアプリケーションを Cloud Run functions にデプロイします。

App Engine または Cloud Run にデプロイする場合は、Go のメイン パッケージの main 関数が使用されますが、ここでは Cloud Run Functions の --entrypoint パラメータを使用して GetJSONData 関数を指定していることに注目してください。

Google Cloud Data Drive アプリをデプロイする

  1. Cloud Shell で、GitHub からクローンを作成したアプリケーションのディレクトリに変更します。
cd ~/DIY-Tools/gcp-data-drive
  1. 次のコマンドを入力してプロジェクトの詳細を取得し、サービス アカウントに pubsub.publisher 権限を付与します。
PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') SERVICE_ACCOUNT=$(gcloud storage service-agent --project=$PROJECT_ID) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/pubsub.publisher
  1. Cloud Build で Google Cloud Data Drive アプリを Cloud Run functions にデプロイします。
gcloud builds submit --config cloudbuild_gcf.yaml --project $PROJECT_ID --no-source --substitutions=_GIT_SOURCE_BRANCH="master",_GIT_SOURCE_URL="https://github.com/GoogleCloudPlatform/DIY-Tools",_GCP_REGION="{{{project_0.default_region}}}" 注: 403 権限エラーが発生した場合は、少し待ってからビルドコマンドを再試行してください。通常、サービス アカウントの権限が反映されるまで数分かかります。
  1. 次のコマンドを入力して、認証されていないユーザーにも Google Cloud Data Drive の Cloud Run functions へのアクセスを許可します。
gcloud alpha functions add-iam-policy-binding gcp-data-drive --member=allUsers --role=roles/cloudfunctions.invoker

「Would you like to run this command and additionally grant [allUsers] permission to invoke function [gcp-data-drive] (Y/n)?」と尋ねられたら、「Y」と入力します。

  1. Cloud Run functions の HTTP トリガー URL を環境変数に保存します。
export CF_TRIGGER_URL=$(gcloud functions describe gcp-data-drive --format="value(url)")
  1. curl を使用してアプリケーションを呼び出し、プロジェクトの Firestore の symbols コレクションからデータをクエリします。
curl $CF_TRIGGER_URL/fs/$PROJECT_ID/symbols/product/symbol | jq .

これに対して、プロジェクトの symbols コレクションの値が含まれた JSON ファイルのコンテンツが返されます。

[ { "asin": "", "brand": "", "category": "", "docid": "914600502073", "fbafees": 0, "lastMatchLookup": "0001-01-01T00:00:00Z", "listPrice": 0, "manufacturer": "", "pkgquantity": 0, "salesrank": 0, "smallImage": "", "title": "", "upc": "914600502073" }, { "asin": "0744018307", "bbw": true, "brand": "", "category": "book_display_on_website", "cpip": 2000, "docid": "9780744018301", "fba": false, "fbafees": 722, "inStock": "NOW", "lastMatchLookup": "2020-03-13T14:00:10.209183Z", "lastOfferLookup": "2020-03-13T14:00:13.670858Z", "listPrice": 3999, "manufacturer": "Prima Games", "pkgquantity": 0, "salesrank": 337073, "sfbc": 0, "sfbr": 0, "smallImage": "http://ecx.images-amazon.com/images/I/51NFIAHRfTL._SL75_.jpg", "title": "Wolfenstein II: The New Colossus: Prima Collector's Edition Guide", "upc": "9780744018301" } ]
  1. curl を使用してアプリケーションを呼び出し、ラボ プロジェクトの BigQuery の publicviews.ca_zip_codes テーブルにあるデータをクエリします。
curl $CF_TRIGGER_URL/bq/$PROJECT_ID/publicviews/ca_zip_codes

これに対して、BigQuery SQL ステートメント SELECT * FROM publicviews.ca_zip_codes; の結果が含まれた JSON ファイルのコンテンツが返されます。

[ { "Zipcode": "96090", "area_land_miles": 1.027, "state_code": "CA" }, { "Zipcode": "94929", "area_land_miles": 1.062, "state_code": "CA" } ] Cloud Run functions アプリケーションのデプロイを確認する

タスク 3. その他の Cloud Run functions トリガー

Cloud Run functions はイベント ドリブンのアーキテクチャです。デプロイしたアプリでは HTTP リクエストがイベントとして使用されます。異なるイベントタイプで起動する別の Go アプリのコードを見てみましょう。この関数は、Firestore 書き込みイベントでトリガーされます。

以下の Go ソースコードは、Go Code サンプルガイドから抜粋したものです。

package mygopackage import ( "context" "fmt" "log" "time" "cloud.google.com/go/functions/metadata" ) // FirestoreEvent is the payload of a Firestore event. type FirestoreEvent struct { OldValue FirestoreValue `json:"oldValue"` Value FirestoreValue `json:"value"` UpdateMask struct { FieldPaths []string `json:"fieldPaths"` } `json:"updateMask"` } // FirestoreValue holds Firestore fields. type FirestoreValue struct { CreateTime time.Time `json:"createTime"` Fields interface{} `json:"fields"` Name string `json:"name"` UpdateTime time.Time `json:"updateTime"` } // DoSomeThingOnWrite is triggered by // a change to a Firestore document. func DoSomeThingOnWrite(ctx context.Context, e FirestoreEvent) error { meta, err := metadata.FromContext(ctx) if err != nil { return fmt.Errorf("metadata.FromContext: %v", err) } // The variables e and meta contain // the information from the event // so now we can Go do some logic // work with the data. In this case // we are simply writing it to the log. log.Printf("Function triggered by change to: %v", meta.Resource) log.Printf("Old value: %+v", e.OldValue) log.Printf("New value: %+v", e.Value) return nil }

GitHub のソースコードの例を参照してください。

この例には、ラボのサンプル アプリケーションで使われる HTTP リクエスト トリガーではなく、Firestore イベントを処理する Cloud Run functions をデプロイするために使われるコードが含まれます。DoSomeThingOnWrite を Cloud Run functions のエントリポイントとして使用し、この関数を Cloud Firestore イベント トリガーに登録します。

現在、Cloud Run functions では以下のイベント トリガーをサポートしています。

イベント トリガーのリスト

上記はシンプルな例ですが、幅広い可能性があります。Go Cloud Run functions によって、以前はオペレーティング システム管理の負担だったタスクが簡単に実行されます。たとえば、ユーザーがモバイルアプリを使用して Cloud Firestore になんらかの書き込みを行う際に、このような関数を使ってデータ損失防止(DLP)を実行し、データをサニタイズできます。

また、Cloud Run functions を利用して、Pub/Sub イベントに基づいてウェブ利用の概要レポートを書き換えて Firestore に書き込むこともできます。イベントベースの小さな処理は、数に関係なく Go Cloud Run functions に適しています。また、サーバーがないのでパッチも必要ありません。

タスク 4. App Engine にデプロイする

App Engine は Go アプリケーションの実行に最適です。App Engine は、ワークロードの変化に応じてスケールアップやスケールダウンを行う、フルマネージドのサーバーレス コンピューティング プラットフォームです。Go アプリケーションは、デプロイ時に単一の実行可能バイナリ ファイルにコンパイルされます。アプリケーションの Go のコールド スタート時間は多くの場合 80~1400 ms です。App Engine は、実行中でも水平方向にスケールできるので、要求の厳しいグローバルなスケールのワークロードでも数秒で対応できます。

Cloud Build YAML 構成ファイルの確認

以下に示した Cloud Build YAML ファイル DIY-Tools/gcp-data-drive/cloudbuild_appengine.yaml には、ご使用のアプリケーションを App Engine にデプロイするための Cloud Build ステップ定義が含まれます。このファイルを使って、アプリケーションを App Engine にデプロイします。

最初のステップでは、git コマンドを実行して、アプリケーションを含めたソース リポジトリのクローンを作成します。このステップは、アプリケーションのブランチ間で簡単にスイッチできるようにパラメータ化されます。

2 つ目のステップでは、sed コマンドを実行して、app.yaml ファイルの runtime: go113runtime: go121 に置き換えます。これは、Go 1.13 ランタイムが非推奨となり、将来削除されるためです。なお、これはアプリの実行を継続するためのパッチにすぎません。個々のプロジェクトでは、最新の Go ランタイムを使用できるようにアプリを更新する必要があります。

3 つ目のステップでは、gcloud app deploy コマンドを実行して、アプリケーションを App Engine にデプロイします。

他の例と同じように、gcloud app deploy コマンドを使用してアプリを手動でデプロイすることもできますが、Cloud Build を使用することで、この作業を Google インフラストラクチャにオフロードできます。たとえば、サーバーレス CI/CD パイプラインを作成する場合に Cloud Build を利用すると便利です。

注: 見やすくするため、ファイルのコメントは削除しています。 steps: - name: 'gcr.io/cloud-builders/git' args: ['clone','--single-branch','--branch', '${_GIT_SOURCE_BRANCH}','${_GIT_SOURCE_URL}'] - name: 'ubuntu' # Or any base image containing 'sed' args: ['sed', '-i', 's/runtime: go113/runtime: go121/', 'app.yaml'] # Replace go113 with go121 dir: 'DIY-Tools/gcp-data-drive/cmd/webserver' - name: 'gcr.io/cloud-builders/gcloud' args: ['app','deploy','app.yaml','--project','$PROJECT_ID'] dir: 'DIY-Tools/gcp-data-drive/cmd/webserver'

GitHub の cloudbuild_appengine.yaml を確認してください。

Google Cloud Data Drive アプリをデプロイする

  1. DIY-Tools/gcp-data-drive で、Cloud Build を使って Go ウェブサーバー アプリを App Engine にデプロイします。
gcloud builds submit --config cloudbuild_appengine.yaml \ --project $PROJECT_ID --no-source \ --substitutions=_GIT_SOURCE_BRANCH="master",_GIT_SOURCE_URL="https://github.com/GoogleCloudPlatform/DIY-Tools"

デプロイが完了するまで数分かかります。

  1. App Engine URL を環境変数に保存し、アプリを呼び出すコマンドで使用します。
注: App Engine URL は出力の target url です。 export TARGET_URL=https://$(gcloud app describe --format="value(defaultHostname)")
  1. curl を使用して App Engine で実行されるアプリケーションを呼び出し、Firestore にあるデータをクエリします。
curl $TARGET_URL/fs/$PROJECT_ID/symbols/product/symbol | jq .

これに対して、プロジェクトの symbols コレクションの 3 つの値が含まれた JSON ファイルのコンテンツが返されます。

[ { "asin": "", "brand": "", "category": "", "docid": "914600502073", "fbafees": 0, "lastMatchLookup": "0001-01-01T00:00:00Z", "listPrice": 0, "manufacturer": "", "pkgquantity": 0, "salesrank": 0, "smallImage": "", "title": "", "upc": "914600502073" }, { "asin": "0744018307", "bbw": true, "brand": "", "category": "book_display_on_website", "cpip": 2000, "docid": "9780744018301", "fba": false, "fbafees": 722, "inStock": "NOW", "lastMatchLookup": "2020-03-13T14:00:10.209183Z", "lastOfferLookup": "2020-03-13T14:00:13.670858Z", "listPrice": 3999, "manufacturer": "Prima Games", "pkgquantity": 0, "salesrank": 337073, "sfbc": 0, "sfbr": 0, "smallImage": "http://ecx.images-amazon.com/images/I/51NFIAHRfTL._SL75_.jpg", "title": "Wolfenstein II: The New Colossus: Prima Collector's Edition Guide", "upc": "9780744018301" } ]
  1. curl を使用して App Engine で実行されるアプリを呼び出し、BigQuery のデータをクエリします。
curl $TARGET_URL/bq/$PROJECT_ID/publicviews/ca_zip_codes | jq .

これに対して、BigQuery SQL ステートメント SELECT * FROM publicviews.ca_zip_codes; の結果が含まれた JSON ファイルのコンテンツが返されます。

[ { "Zipcode": "96090", "area_land_miles": 1.027, "state_code": "CA" }, { "Zipcode": "94929", "area_land_miles": 1.062, "state_code": "CA" } ]

負荷の増加

負荷を増加するとどうなるかを確認します。

  1. nano エディタを使用して、アプリケーションに負荷をかけるためのシンプルなシェル スクリプトを作成します。
nano loadgen.sh
  1. エディタに以下のスクリプトを入力するか、貼り付けます。
#!/bin/bash for ((i=1; i<=1000; i++)); do curl "$TARGET_URL/bq/$PROJECT_ID/publicviews/ca_zip_codes" > /dev/null & done
  1. Ctrl+X キー、Y キー、Enter キーの順に押して新しいファイルを保存します。
  2. スクリプトを実行可能にします。
chmod +x loadgen.sh
  1. 負荷テストを実行します。
./loadgen.sh
  1. コンソールで、ナビゲーション メニュー > [App Engine] > [インスタンス] の順にクリックします。

インスタンス ウィンドウが開き、負荷テストを Cloud Shell で実行したときの 1 秒あたりのリクエスト処理数の概要と生成されたインスタンスのリストが表示されます。App Engine によって追加のアプリ インスタンスが自動的に作成され、HTTP 受信トラフィックが分散される様子を確認してください。

インスタンスのリストが表示されているインスタンス ウィンドウ

注: 概要グラフのデータが表示されるまで 3~5 分かかることがあります。[インスタンス] ウィンドウを更新するようにしてください。
  1. 負荷テストがまだ実行されていたら、Cloud Shell で Ctrl+C キーを押して終了します。
App Engine アプリケーションのデプロイを確認する

お疲れさまでした

このセルフペース ラボでは、Go プログラミング言語を使って、すべての Google Cloud サーバーレス コンピューティング プラットフォームにデプロイする方法を学びました。まとめは以下のとおりです。

  • Go プログラミング言語には、最新のクラウド アプリケーションとオンプレミス アプリケーションに最適な、収益性と効率性に優れた特長があります。
  • 同じ Go コードベースを変更することなく、Google Cloud のサーバーレスでコンテナベースの Anthos コンピューティング プラットフォームすべてにデプロイできます。
  • Cloud Build(同様にサーバーレス)は、ご使用のアプリケーションのライフサイクルで、クラウドベースの CI/CD パイプラインを一貫して提供するうえで、重要な役割を果たします。
  • Cloud Run functions と App Engine は、Google 規模で起動して簡単にデプロイできるシンプルなサーバーレス プラットフォームです。
  • Google Cloud Data Drive は、既存の Google Cloud 環境でも使用できる、オープンソースのデータ抽出ライブラリです。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2024 年 11 月 5 日

ラボの最終テスト日: 2024 年 11 月 5 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします