
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Check Firestore Database Deployment
/ 30
Check Cloud Run Functions application Deployment
/ 30
Check App Engine application Deployment
/ 40
Go は、Google によるオープンソースのプログラミング言語です。Go を使うと信頼性と効率性に優れた、高速かつスケール可能なソフトウェアを簡単に構築できます。このラボでは、シンプルな Go のアプリを Cloud Run functions と App Engine にデプロイして、Go の基礎を学びます。次に、Go アプリを使用して、BigQuery と Firestore のデータにアクセスします。
このラボでは、次のタスクを行います。
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの詳細] パネルでも [ユーザー名] を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの詳細] パネルでも [パスワード] を確認できます。
[次へ] をクリックします。
その後次のように進みます。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
[承認] をクリックします。
出力は次のようになります。
出力:
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
Go(golang)は、システムのプログラミング用に設計された汎用言語です。堅牢なこの言語は、ガベージ コレクション機能を備えており、並行プログラミングをサポートしています。プログラムはパッケージで構築され、それらのプロパティにより依存関係を効率的に管理できます。
Python や JavaScript と違って、Go はスクリプト言語ではなく、コンパイル言語です。Go のソースコードは、実行前にマシンコードにコンパイルされます。そのため、Go は一般的にスクリプト言語より高速かつ効率的で、プログラムを実行するために Node、Python、JDK のようなランタイムをインストールする必要ありません。
サーバーレス コンピューティングを利用することで、デベロッパーはインフラストラクチャを意識することなく、コードの記述に集中できます。従来のコンピューティングに比べ、サーバー管理不要、事前プロビジョニング不要、自動スケーリング、使用したリソースのみに対する支払いなどの利点があります。こうした利点を活かして、ステートレスな HTTP アプリケーション、ウェブ、モバイル、IoT バックエンド、バッチとストリーミングのデータ処理、チャットボットなどの幅広い用途に利用できます。
Go は、効率性とポータビリティに優れていて、使い方を簡単に学べるので、クラウド アプリケーションに最適です。このラボでは、Cloud Build を使って、Google のサーバーレス プラットフォームである Cloud Run functions と App Engine に Go アプリをデプロイする方法を学びます。
Cloud Build は、Google Cloud インフラストラクチャでビルドを行うサービスです。Cloud Build では、Cloud Storage、Cloud Source Repositories、GitHub、Bitbucket からソースコードをインポートし、仕様に合わせてビルドを実行して、Docker コンテナなどのアーティファクトを生成します。
Cloud Build は、一連のビルドステップとしてビルドを実行します。各ビルドステップは、Docker コンテナで実行されます。ビルドステップでは、環境に関係なく、コンテナで実行可能なすべての処理を実行できます。詳細については、Cloud Build のドキュメントをご覧ください。
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 にデプロイすると、データフローのアーキテクチャは以下のようになります。
App Engine スタンダード環境は、Google のインフラストラクチャで実行されるコンテナ インスタンスに基づいています。コンテナは、複数の利用可能なランタイムの 1 つで事前構成されています。
Go アプリのサンプルである Google Cloud Data Drive を App Engine にデプロイすると、データフローのアーキテクチャは以下のようになります。
このラボでは、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 は、 |
[PROJECT ID] |
アクセスする Firestore コレクションまたは BigQuery データセットのプロジェクト ID。プロジェクト ID はラボの左側のパネルで確認できます。 |
[COLLECTION] |
Firestore コレクション ID( |
[DOCUMENT] |
返信する Firestore ドキュメント( |
[DATASET] |
BigQuery データセット名( |
[TABLE] |
BigQuery テーブル名( |
curl
を使用しますが、URL を自分で作成して、ブラウザで機能テストを別に実施することもできます。このラボでは、BigQuery と Firestore のサンプルデータを使って Go アプリをテストします。
BigQuery は、ML、データ パーティショニング、セグメンテーション向けの多数の機能を備えた、サーバーレスのデータ ウェアハウスで、長期の使用が可能です。BigQuery では、ANSI SQL を使用してギガバイトからペタバイト規模のデータを極めて高速に分析でき、運用のオーバーヘッドは発生しません。
BigQuery データセットは、カリフォルニア州の郵便番号を示したもので、ラボ開始時に作成されました。
Firestore は、ドキュメントを超高速で検索する機能とリアルタイムのイベントを処理する機能を備えた、サーバーレスのドキュメント データベースです。また、99.999% の SLA を保証します。アプリのテストに Firestore のデータを使用するには、Firestore をネイティブ モードに初期化して、サンプルデータをインポートする必要があります。
Firestore ネイティブ モードのデータベース インスタンスがあらかじめ作成されています。
Firestore データベース インスタンスが初期化されるまで待ちます。この処理によって同じリージョンの App Engine も初期化されるので、最初に App Engine インスタンスを作成することなく、アプリケーションを App Engine にデプロイできます。
このインポート ジョブにより、symbols
というコレクションの Cloud Firestore バックアップが $PROJECT_ID-firestore
ストレージ バケットに読み込まれます。
インポート ジョブが完了するには最長で 5 分ほどかかることがあります。その間に次のセクションに進みます。
Cloud Build は、Google Cloud インフラストラクチャでビルドを行うサービスです。デフォルトの Cloud Build には、以下にアプリケーションをデプロイするための十分な権限がありません。
Cloud Build を使って Google Cloud Data Drive アプリをデプロイする前に、これらのサービスを有効にする必要があります。
Cloud Run functions は、Google Cloud のイベント ドリブンのサーバーレス コンピューティング プラットフォームです。Go と Cloud Run functions とを組み合わせると、起動時間が高速で、無制限にスケールできる、優れたサーバーレスのプラットフォームとなります。また、アプリケーションでのイベント ドリブンの応答時間が最短になります。
ソースコードを調べて、Cloud Run functions で Google Cloud Data Drive ソースコードを再利用する方法を確認します。
main
関数の確認DIY-Tools/gcp-data-drive/cmd/webserver/main.go
の main
関数を起動する際に、gcpdatadrive.GetJSONData
Go 関数へすべての HTTP リクエストを送信するようにウェブサーバーに指示します。main.go
の main
関数を確認してください。Cloud Run functions では、main.go
が使用されるのではなく、Cloud Run functions ランタイムが設定されていて、DIY-Tools/gcp-data-drive/gcpdatadrive.go
ファイルで定義された gcpdatadrive.GetJSONData
Go 関数に直接 HTTP リクエストを送信します。
cloudbuild_gcf.yaml
を使用して、Google Cloud Data Drive アプリケーションを Cloud Run functions にデプロイする方法を調べることで確認できます。cloudbuild_gcf.yaml
を確認してください。Cloud Build のステップは、アプリケーションを Cloud Run にデプロイするステップとも似ていますが、この場合、gcloud functions deploy
コマンドを使ってアプリケーションを Cloud Run functions にデプロイします。
App Engine または Cloud Run にデプロイする場合は、Go のメイン パッケージの main
関数が使用されますが、ここでは Cloud Run Functions の --entrypoint
パラメータを使用して GetJSONData
関数を指定していることに注目してください。
pubsub.publisher
権限を付与します。「Would you like to run this command and additionally grant [allUsers] permission to invoke function [gcp-data-drive] (Y/n)?」と尋ねられたら、「Y
」と入力します。
curl
を使用してアプリケーションを呼び出し、プロジェクトの Firestore の symbols
コレクションからデータをクエリします。これに対して、プロジェクトの symbols
コレクションの値が含まれた JSON ファイルのコンテンツが返されます。
curl
を使用してアプリケーションを呼び出し、ラボ プロジェクトの BigQuery の publicviews.ca_zip_codes
テーブルにあるデータをクエリします。これに対して、BigQuery SQL ステートメント SELECT * FROM publicviews.ca_zip_codes;
の結果が含まれた JSON ファイルのコンテンツが返されます。
Cloud Run functions はイベント ドリブンのアーキテクチャです。デプロイしたアプリでは HTTP リクエストがイベントとして使用されます。異なるイベントタイプで起動する別の Go アプリのコードを見てみましょう。この関数は、Firestore 書き込みイベントでトリガーされます。
以下の Go ソースコードは、Go Code サンプルガイドから抜粋したものです。
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 に適しています。また、サーバーがないのでパッチも必要ありません。
App Engine は Go アプリケーションの実行に最適です。App Engine は、ワークロードの変化に応じてスケールアップやスケールダウンを行う、フルマネージドのサーバーレス コンピューティング プラットフォームです。Go アプリケーションは、デプロイ時に単一の実行可能バイナリ ファイルにコンパイルされます。アプリケーションの Go のコールド スタート時間は多くの場合 80~1400 ms です。App Engine は、実行中でも水平方向にスケールできるので、要求の厳しいグローバルなスケールのワークロードでも数秒で対応できます。
以下に示した Cloud Build YAML ファイル DIY-Tools/gcp-data-drive/cloudbuild_appengine.yaml
には、ご使用のアプリケーションを App Engine にデプロイするための Cloud Build ステップ定義が含まれます。このファイルを使って、アプリケーションを App Engine にデプロイします。
最初のステップでは、git
コマンドを実行して、アプリケーションを含めたソース リポジトリのクローンを作成します。このステップは、アプリケーションのブランチ間で簡単にスイッチできるようにパラメータ化されます。
2 つ目のステップでは、sed
コマンドを実行して、app.yaml
ファイルの runtime: go113
を runtime: go121
に置き換えます。これは、Go 1.13 ランタイムが非推奨となり、将来削除されるためです。なお、これはアプリの実行を継続するためのパッチにすぎません。個々のプロジェクトでは、最新の Go ランタイムを使用できるようにアプリを更新する必要があります。
3 つ目のステップでは、gcloud app deploy
コマンドを実行して、アプリケーションを App Engine にデプロイします。
他の例と同じように、gcloud app deploy
コマンドを使用してアプリを手動でデプロイすることもできますが、Cloud Build を使用することで、この作業を Google インフラストラクチャにオフロードできます。たとえば、サーバーレス CI/CD パイプラインを作成する場合に Cloud Build を利用すると便利です。
GitHub の cloudbuild_appengine.yaml
を確認してください。
DIY-Tools/gcp-data-drive
で、Cloud Build を使って Go ウェブサーバー アプリを App Engine にデプロイします。デプロイが完了するまで数分かかります。
target url
です。curl
を使用して App Engine で実行されるアプリケーションを呼び出し、Firestore にあるデータをクエリします。これに対して、プロジェクトの symbols
コレクションの 3 つの値が含まれた JSON ファイルのコンテンツが返されます。
curl
を使用して App Engine で実行されるアプリを呼び出し、BigQuery のデータをクエリします。これに対して、BigQuery SQL ステートメント SELECT * FROM publicviews.ca_zip_codes;
の結果が含まれた JSON ファイルのコンテンツが返されます。
負荷を増加するとどうなるかを確認します。
インスタンス ウィンドウが開き、負荷テストを Cloud Shell で実行したときの 1 秒あたりのリクエスト処理数の概要と生成されたインスタンスのリストが表示されます。App Engine によって追加のアプリ インスタンスが自動的に作成され、HTTP 受信トラフィックが分散される様子を確認してください。
このセルフペース ラボでは、Go プログラミング言語を使って、すべての Google Cloud サーバーレス コンピューティング プラットフォームにデプロイする方法を学びました。まとめは以下のとおりです。
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 11 月 5 日
ラボの最終テスト日: 2024 年 11 月 5 日
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
One lab at a time
Confirm to end all existing labs and start this one