チェックポイント
Deploy the function
/ 100
Cloud Functions: Qwik Start - コマンドライン
GSP080
概要
クラウド関数は、HTTP リクエスト、メッセージ サービスからのメッセージ、ファイル アップロードなどのイベントに応答して実行されるコードです。クラウド イベントとは、クラウド環境で発生する事象のことを指します。たとえば、データベースでのデータの変更、ストレージ システムへのファイルの追加、新しい仮想マシン インスタンスの作成などがクラウド イベントとして扱われます。
クラウド関数は、何かが発生した場合にのみ実行されるイベント ドリブン型であるため、迅速に実行する必要があるタスクや、常時実行する必要がないタスクに適しています。
たとえば、クラウド関数を使用して次のことができます。
- Cloud Storage にアップロードされる画像のサムネイルを自動的に生成する
- Cloud Pub/Sub で新しいメッセージを受信したときにユーザーのスマートフォンに通知を送信する
- Cloud Firestore データベースからのデータを処理し、レポートを生成する
Node.js に対応している任意の言語でコードを作成できます。また、数回クリックするだけでコードをクラウドにデプロイできます。クラウド関数がデプロイされると、イベントに応答して自動的に実行が開始されます。
このハンズオンラボでは、Google Cloud コンソールでクラウド関数を作成、デプロイ、テストする方法を説明します。
このハンズオンラボでは、Google Cloud Shell のコマンドラインを使用して、クラウド関数を作成、デプロイ、テストする方法について学習します。
演習内容
- Cloud Functions の関数を作成する
- Cloud Functions 関数をデプロイしてテストする
- ログを表示する
設定
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、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 の概要ガイドをご覧ください。
タスク 1. 関数を作成する
最初に、helloWorld
という名前の簡単な関数を作成します。これは Cloud Functions のログにメッセージを書き込む関数です。この関数は Cloud Functions のイベントでトリガーされ、関数が実行されたことを通知するコールバック関数を受信します。
このラボでは、Cloud Pub/Sub トピックに関する Cloud Functions のイベントを扱います。Pub/Sub は、メッセージの送信者とメッセージの受信者を切り離すメッセージング サービスです。送信または投稿されるメッセージのアラートとメッセージ自体を受信者が受信するには、サブスクリプションが必要です。Pub/Sub について詳しくは、Cloud Pub/Sub ガイドの Google Cloud Pub/Sub: Google 規模のメッセージ サービスをご覧ください。
イベント パラメータとコールバック パラメータについて詳しくは、Cloud Functions のドキュメントのバックグラウンド関数をご覧ください。
Cloud Functions の関数を作成するには:
-
Cloud Shell で、次のコマンドを実行してデフォルトのリージョンを設定します。
gcloud config set run/region {{{project_0.default_region |REGION}}} -
関数コード用のディレクトリを作成します。
mkdir gcf_hello_world && cd $_ -
index.js
作成し、編集するために開きます。nano index.js -
次の内容を
index.js
ファイルにコピーします。const functions = require('@google-cloud/functions-framework'); // Pub/Sub トリガー トピックがメッセージを受信したときに実行される // CloudEvent コールバックを Functions Framework に登録します。 functions.cloudEvent('helloPubSub', cloudEvent => { // Pub/Sub メッセージは CloudEvent のデータ ペイロードとして渡されます。 const base64name = cloudEvent.data.message.data; const name = base64name ? Buffer.from(base64name, 'base64').toString() : 'World'; console.log(`Hello, ${name}!`); }); -
nano エディタを終了し(Ctrl+X)、ファイルを保存します(Y)。
-
package.json
を作成し、編集するために開きます。 -
以下を
package.json
ファイルにコピーします。{ "name": "gcf_hello_world", "version": "1.0.0", "main": "index.js", "scripts": { "start": "node index.js", "test": "echo \"エラー: テストが指定されていません\" && exit 1" }, "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } } -
nano エディタを終了し(Ctrl+X)、ファイルを保存します(Y)。
-
パッケージの依存関係をインストールする
npm install 予想される出力:
added 140 packages, and audited 141 packages in 9s 27 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
タスク 2. 関数をデプロイする
このラボでは、--trigger-topic
に cf_demo
を指定します。
Cloud Functions はイベント ドリブンであるため、トリガーのタイプを指定する必要があります。新しい関数をデプロイする場合、`--trigger-topic`、`--trigger-bucket`、`--trigger-http` が一般的なトリガー イベントです。既存の関数にアップデートをデプロイすると、特に指定のない限り、その関数は既存のトリガーを維持します。
-
helloPubSub 関数を cf-demo という名前の pub/sub トピックにデプロイします。
gcloud functions deploy nodejs-pubsub-function \ --gen2 \ --runtime=nodejs20 \ --region={{{ project_0.default_region | REGION }}} \ --source=. \ --entry-point=helloPubSub \ --trigger-topic cf-demo \ --stage-bucket {{{ project_0.project_id | PROJECT_ID }}}-bucket \ --service-account cloudfunctionsa@{{{ project_0.project_id | PROJECT_ID }}}.iam.gserviceaccount.com \ --allow-unauthenticated 注:
サービス アカウント serviceAccountTokenCreator 通知を受け取った場合は、「n」を選択します。 -
関数のステータスを確認します。
gcloud functions describe nodejs-pubsub-function \ --region={{{ project_0.default_region | REGION }}} ACTIVE ステータスは、関数がデプロイされたことを表しています。
予想される出力:
BuildConfig: automaticUpdatePolicy: {} build: projects/630521560493/locations/{{{ project_0.default_region | REGION }}}/builds/7ff9d415-50d9-4557-9bcd-5afad42a6390 dockerRegistry: ARTIFACT_REGISTRY dockerRepository: projects/{{{ project_0.project_id | PROJECT_ID }}}/locations/{{{ project_0.default_region | REGION }}}/repositories/gcf-artifacts entryPoint: helloPubSub ... State: ACTIVE ... UpdateTime: '2024-08-05T13:51:05.317298824Z' Url: https://{{{ project_0.default_region | REGION }}}-{{{ project_0.project_id | PROJECT_ID }}}.cloudfunctions.net/nodejs-pubsub-function
トピックにメッセージが配信されるたびに関数の実行がトリガーされ、メッセージの内容が入力データとして送信されます。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。 タスクが正常に完了すると、評価スコアが提供されます。
タスク 3. 関数をテストする
関数をデプロイしてそれがアクティブになっていることを確認したら、関数がイベントを検出してメッセージをクラウドログに書き込むかどうかをテストします。
-
いくつかのデータを使用して Pub/Sub を呼び出します。
gcloud pubsub topics publish cf-demo --message="Cloud Function Gen2" 出力例:
messageIds: - '11927162971409664'
該当するログを表示して、その実行 ID のログメッセージが存在することを確認します。
タスク 4. ログを表示する
-
該当のログを開き、ログ履歴の中に対象のメッセージがあることを確認します。
gcloud functions logs read nodejs-pubsub-function \ --region={{{ project_0.default_region | REGION }}} 注:
ログが表示されるまでに 10 分ほどかかることがあります。別の方法として、[ロギング] > [ログ エクスプローラ] を選択してログを表示することもできます。Cloud Functions の関数は、次のような情報を出力します。
LEVEL: NAME: nodejs-pubsub-function EXECUTION_ID: h4v6akxf4sxt TIME_UTC: 2024-08-05 15:15:25.723 LOG: Hello, Cloud Function Gen2! LEVEL: I NAME: nodejs-pubsub-function EXECUTION_ID: TIME_UTC: 2024-08-05 15:15:25.711 LOG: LEVEL: NAME: nodejs-pubsub-function EXECUTION_ID: h4oxfjn7zlyu TIME_UTC: 2024-08-05 15:10:34.303 LOG: Hello, Friend! LEVEL: I NAME: nodejs-pubsub-function EXECUTION_ID: TIME_UTC: 2024-08-05 15:10:34.291 LOG: LEVEL: NAME: nodejs-pubsub-function EXECUTION_ID: h4fjhyfxua3k TIME_UTC: 2024-08-05 15:03:16.342 LOG: Hello, "SGVsbG8gZnJvbSB0aGUgY29tbWFuZCBsaW5l"!
これでアプリケーションのデプロイ、テスト、ログの表示が完了しました。
タスク 5. 理解度チェック
-
今回のラボで学習した内容の理解を深めていただくため、以下の多肢選択式問題を用意しました。正解を目指して頑張ってください。
お疲れさまでした
Google Cloud コンソールでコマンドラインを使用して Cloud Functions の関数を作成、デプロイ、テストしました。
次のラボを受講する
このラボは、Google Cloud の多くの機能を体験できる「Qwik Start」と呼ばれるラボシリーズの一部です。ラボカタログで「Qwik Start」を検索し、興味のあるラボを探してみてください。
次のステップと詳細情報
- このラボでは、コマンドラインを使用して Cloud Functions の関数を起動する方法を学習しました。次は「Cloud Functions: Qwik Start - コンソール」ラボに進み、Cloud コンソールから Cloud Functions の関数を起動してみましょう。
- トリガーを作成して関数に関連付ける方法について詳しくは、Cloud Functions ガイドのイベントとトリガーのセクションをご覧ください。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 8 月 5 日
ラボの最終テスト日: 2024 年 8 月 5 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。