チェックポイント
Check Firestore Database Deployment
/ 30
Check Cloud Run Functions application Deployment
/ 30
Check App Engine application Deployment
/ 40
Google Cloud サーバーレス プラットフォームへの Go アプリのデプロイ
GSP702
概要
Go は、Google によるオープンソースのプログラミング言語です。Go を使うと信頼性と効率性に優れた、高速かつスケール可能なソフトウェアを簡単に構築できます。このラボでは、シンプルな Go のアプリを Cloud Run functions と App Engine にデプロイして、Go の基礎を学びます。次に、Go アプリを使用して、BigQuery と Firestore のデータにアクセスします。
演習内容
このラボでは、次のタスクを行います。
- Firestore データベースを設定して、データをインポートする
- Cloud Build の機能の概要を確認する
- BigQuery と Firestore のデータにアクセスする
- Go アプリを App Engine と Cloud Run functions にデプロイする
- Go アプリのコードを調べる
- 各プラットフォームでアプリをテストする
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、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 の概要ガイドをご覧ください。
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 にデプロイすると、データフローのアーキテクチャは以下のようになります。
App Engine
App Engine スタンダード環境は、Google のインフラストラクチャで実行されるコンテナ インスタンスに基づいています。コンテナは、複数の利用可能なランタイムの 1 つで事前構成されています。
アーキテクチャ
Go アプリのサンプルである Google Cloud Data Drive を App Engine にデプロイすると、データフローのアーキテクチャは以下のようになります。
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 は、 |
[PROJECT ID] |
アクセスする Firestore コレクションまたは BigQuery データセットのプロジェクト ID。プロジェクト ID はラボの左側のパネルで確認できます。 |
[COLLECTION] |
Firestore コレクション ID( |
[DOCUMENT] |
返信する Firestore ドキュメント( |
[DATASET] |
BigQuery データセット名( |
[TABLE] |
BigQuery テーブル名( |
curl
を使用しますが、URL を自分で作成して、ブラウザで機能テストを別に実施することもできます。タスク 1. 環境の設定
- このラボの後半で使用するために、Cloud Shell で 以下のコマンドを入力して、プロジェクト ID を保存する環境変数を作成します。
- このラボのサンプルコードを Google Cloud Storage(GCS)からコピーします。
データベースの準備
このラボでは、BigQuery と Firestore のサンプルデータを使って Go アプリをテストします。
BigQuery データベース
BigQuery は、ML、データ パーティショニング、セグメンテーション向けの多数の機能を備えた、サーバーレスのデータ ウェアハウスで、長期の使用が可能です。BigQuery では、ANSI SQL を使用してギガバイトからペタバイト規模のデータを極めて高速に分析でき、運用のオーバーヘッドは発生しません。
BigQuery データセットは、カリフォルニア州の郵便番号を示したもので、ラボ開始時に作成されました。
Firestore データベース
Firestore は、ドキュメントを超高速で検索する機能とリアルタイムのイベントを処理する機能を備えた、サーバーレスのドキュメント データベースです。また、99.999% の SLA を保証します。アプリのテストに Firestore のデータを使用するには、Firestore をネイティブ モードに初期化して、サンプルデータをインポートする必要があります。
Firestore ネイティブ モードのデータベース インスタンスがあらかじめ作成されています。
- Cloud コンソールで、ナビゲーション メニュー > [Firestore] をクリックして、コンソールで Firestore を開きます。
Firestore データベース インスタンスが初期化されるまで待ちます。この処理によって同じリージョンの App Engine も初期化されるので、最初に App Engine インスタンスを作成することなく、アプリケーションを App Engine にデプロイできます。
- Cloud Shell で Firestore インポート ジョブを起動します。これにより、ラボ用の Firestore サンプルデータが準備されます。
このインポート ジョブにより、symbols
というコレクションの Cloud Firestore バックアップが $PROJECT_ID-firestore
ストレージ バケットに読み込まれます。
インポート ジョブが完了するには最長で 5 分ほどかかることがあります。その間に次のセクションに進みます。
Cloud Build の権限の構成
Cloud Build は、Google Cloud インフラストラクチャでビルドを行うサービスです。デフォルトの Cloud Build には、以下にアプリケーションをデプロイするための十分な権限がありません。
- App Engine
- Cloud Run functions
Cloud Build を使って Google Cloud Data Drive アプリをデプロイする前に、これらのサービスを有効にする必要があります。
- コンソールで、ナビゲーション メニュー > [Cloud Build] > [設定] の順にクリックします。
- [Cloud Functions] の [ステータス] を [有効] に設定します。
- プロンプトが表示されたら、[すべてのサービス アカウントにアクセス権を付与] をクリックします。
- [Cloud Run] の [ステータス] を [有効] に設定します。
- [App Engine] の [ステータス] を [有効] に設定します。
タスク 2. Cloud Run Functions にデプロイする
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 リクエストを送信するようにウェブサーバーに指示します。
-
GitHub の
main.go
のmain
関数を確認してください。
Cloud Run functions では、main.go
が使用されるのではなく、Cloud Run functions ランタイムが設定されていて、DIY-Tools/gcp-data-drive/gcpdatadrive.go
ファイルで定義された gcpdatadrive.GetJSONData
Go 関数に直接 HTTP リクエストを送信します。
- これについては、Cloud Build で
cloudbuild_gcf.yaml
を使用して、Google Cloud Data Drive アプリケーションを Cloud Run functions にデプロイする方法を調べることで確認できます。
-
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 アプリをデプロイする
- Cloud Shell で、GitHub からクローンを作成したアプリケーションのディレクトリに変更します。
- 次のコマンドを入力してプロジェクトの詳細を取得し、サービス アカウントに
pubsub.publisher
権限を付与します。
- Cloud Build で Google Cloud Data Drive アプリを Cloud Run functions にデプロイします。
- 次のコマンドを入力して、認証されていないユーザーにも Google Cloud Data Drive の Cloud Run functions へのアクセスを許可します。
「Would you like to run this command and additionally grant [allUsers] permission to invoke function [gcp-data-drive] (Y/n)?」と尋ねられたら、「Y
」と入力します。
- Cloud Run functions の HTTP トリガー URL を環境変数に保存します。
-
curl
を使用してアプリケーションを呼び出し、プロジェクトの Firestore のsymbols
コレクションからデータをクエリします。
これに対して、プロジェクトの symbols
コレクションの値が含まれた JSON ファイルのコンテンツが返されます。
-
curl
を使用してアプリケーションを呼び出し、ラボ プロジェクトの BigQuery のpublicviews.ca_zip_codes
テーブルにあるデータをクエリします。
これに対して、BigQuery SQL ステートメント SELECT * FROM publicviews.ca_zip_codes;
の結果が含まれた JSON ファイルのコンテンツが返されます。
タスク 3. その他の Cloud Run functions トリガー
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 に適しています。また、サーバーがないのでパッチも必要ありません。
タスク 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: 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
を確認してください。
Google Cloud Data Drive アプリをデプロイする
-
DIY-Tools/gcp-data-drive
で、Cloud Build を使って Go ウェブサーバー アプリを App Engine にデプロイします。
デプロイが完了するまで数分かかります。
- App Engine URL を環境変数に保存し、アプリを呼び出すコマンドで使用します。
target url
です。-
curl
を使用して App Engine で実行されるアプリケーションを呼び出し、Firestore にあるデータをクエリします。
これに対して、プロジェクトの symbols
コレクションの 3 つの値が含まれた JSON ファイルのコンテンツが返されます。
-
curl
を使用して App Engine で実行されるアプリを呼び出し、BigQuery のデータをクエリします。
これに対して、BigQuery SQL ステートメント SELECT * FROM publicviews.ca_zip_codes;
の結果が含まれた JSON ファイルのコンテンツが返されます。
負荷の増加
負荷を増加するとどうなるかを確認します。
- nano エディタを使用して、アプリケーションに負荷をかけるためのシンプルなシェル スクリプトを作成します。
- エディタに以下のスクリプトを入力するか、貼り付けます。
- Ctrl+X キー、Y キー、Enter キーの順に押して新しいファイルを保存します。
- スクリプトを実行可能にします。
- 負荷テストを実行します。
- コンソールで、ナビゲーション メニュー > [App Engine] > [インスタンス] の順にクリックします。
インスタンス ウィンドウが開き、負荷テストを Cloud Shell で実行したときの 1 秒あたりのリクエスト処理数の概要と生成されたインスタンスのリストが表示されます。App Engine によって追加のアプリ インスタンスが自動的に作成され、HTTP 受信トラフィックが分散される様子を確認してください。
- 負荷テストがまだ実行されていたら、Cloud Shell で Ctrl+C キーを押して終了します。
お疲れさまでした
このセルフペース ラボでは、Go プログラミング言語を使って、すべての Google Cloud サーバーレス コンピューティング プラットフォームにデプロイする方法を学びました。まとめは以下のとおりです。
- Go プログラミング言語には、最新のクラウド アプリケーションとオンプレミス アプリケーションに最適な、収益性と効率性に優れた特長があります。
- 同じ Go コードベースを変更することなく、Google Cloud のサーバーレスでコンテナベースの Anthos コンピューティング プラットフォームすべてにデプロイできます。
- Cloud Build(同様にサーバーレス)は、ご使用のアプリケーションのライフサイクルで、クラウドベースの CI/CD パイプラインを一貫して提供するうえで、重要な役割を果たします。
- Cloud Run functions と App Engine は、Google 規模で起動して簡単にデプロイできるシンプルなサーバーレス プラットフォームです。
- Google Cloud Data Drive は、既存の Google Cloud 環境でも使用できる、オープンソースのデータ抽出ライブラリです。
次のステップと詳細情報
- Go の詳細については、Go プログラミング言語をご覧ください。
- GitHub での Go をご覧ください。
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 の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。