700 以上のラボとコースにアクセス

Cloud Run functions: Qwik Start

ラボ 1時間 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

GSP1089

Google Cloud セルフペース ラボのロゴ

概要

Cloud Run functions は、Google Cloud の Functions as a Service ソリューションです。Cloud RunEventarc を活用した高度な機能セットを備えているため、パフォーマンスとスケーラビリティを高度な方法で制御し、関数ランタイムをきめ細かく制御し、90 以上のイベントソースをトリガーとして利用できます。

このラボでは、Cloud Run functions で、HTTP 呼び出しに応答する関数、Cloud Storage イベントをトリガーとする関数、Cloud Audit Logs をトリガーとする関数を作成します。また、複数のリビジョンの Cloud Run 関数をデプロイし、新しい設定をいくつか試してみます。

最新情報

この新しいバージョンである Cloud Run functions は、Cloud Run、Cloud Build、Artifact Registry、Eventarc を利用した FaaS の拡張エクスペリエンスを提供します。

強化されたインフラストラクチャ

  • リクエストの処理時間の延長: Cloud Run 関数は、デフォルトの 5 分よりも長く実行できるため、Cloud Storage や BigQuery からの大量のデータ ストリームの処理など、時間のかかるリクエストのワークロードを実行しやすくなります。HTTP 関数の場合、タイムアウトは最長 60 分です。イベント ドリブン関数の場合、現時点ではタイムアウトは最長 10 分です。
  • インスタンスの拡張: Cloud Run 関数では最大 16 GB の RAM と 4 つの vCPU を利用できるので、コンピューティング負荷が高い大規模なインメモリのワークロードを、より高い並列度で実行できるようになります。
  • 同時実行: 単一の関数インスタンスで最大 1,000 件の同時リクエストを処理し、コールド スタートを最小限に抑え、スケーリング時のレイテンシを改善します。
  • 最小インスタンス数: アプリケーションのブートストラップ時間がアプリケーションのパフォーマンスに影響しないように、事前にウォームアップされたインスタンスを用意して、コールド スタートを最小限に抑えています。
  • トラフィック分割: 複数のバージョンの関数をサポートしているため、異なるバージョン間でトラフィックを分割し、関数を以前のバージョンにロールバックできます。

広範なイベント カバレッジと CloudEvents のサポート

  • Eventarc の統合: Cloud Run functions に Eventarc のネイティブ サポートが含まれるようになりました。これにより、Cloud Audit Logs で 125 以上のイベントソース(BigQuery、Cloud SQL、Cloud Storage など)が利用可能になります。もちろん、Cloud Run functions は、Cloud Pub/Sub に直接パブリッシュすることで、カスタムソースからのイベントも引き続きサポートします。
  • CloudEvent 形式: すべてのイベント ドリブン関数は、ソースに関係なく業界標準の CloudEvents(cloudevents.io)に準拠しているため、一貫したデベロッパー エクスペリエンスが保証されます。ペイロードは、cloudevent.data ペイロードを含む構造化 CloudEvent を介して送信され、CloudEvent 標準を実装しています。

目標

このラボでは、次のタスクの実行方法について学びます。

  • HTTP 呼び出しに応答する関数を作成する。
  • Cloud Storage イベントに応答する関数を作成する。
  • Cloud Audit Logs に応答する関数を作成する。
  • 複数のリビジョンの Cloud Run 関数をデプロイする。
  • 最小インスタンス数を設定してコールド スタートを回避する。
  • 同時実行数を設定する。

設定と要件

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

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、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 をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • Cloud Shell 情報ウィンドウで操作を進めます。
    • Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。

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

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

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

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

出力:

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

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. API を有効にする

Cloud Run 関数を作成する前に、関連する API を有効にする必要があります。

  • 次のコマンドを実行して、必要なサービスをすべて有効にします。
gcloud services enable \ artifactregistry.googleapis.com \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ pubsub.googleapis.com

Cloud Shell IDE で Gemini Code Assist を有効にする

Cloud Shell などの統合開発環境(IDE)で Gemini Code Assist を使用して、コードに関するガイダンスを受けたり、コードの問題を解決したりできます。使用を開始する前に、Gemini Code Assist を有効にする必要があります。

  1. Cloud Shell で、次のコマンドを使用して Gemini for Google Cloud API を有効にします。
gcloud services enable cloudaicompanion.googleapis.com
  1. Cloud Shell ツールバーの [エディタを開く] をクリックします。
注: Cloud Shell エディタを開くには、Cloud Shell ツールバーの [エディタを開く] をクリックします。必要に応じて、[エディタを開く] または [ターミナルを開く] をクリックして、Cloud Shell とコードエディタを切り替えることができます。
  1. 左側のペインで [設定] アイコンをクリックし、[設定] ビューで「Gemini Code Assist」を検索します。

  2. [Geminicodeassist: Enable] のチェックボックスがオンになっていることを確認し、[設定] を閉じます。

  3. 画面下部のステータスバーで [Cloud Code - No Project] をクリックします。

  4. 指示に従ってプラグインを承認します。プロジェクトが自動的に選択されない場合は、[Google Cloud プロジェクトを選択する] をクリックして を選択します。

  5. ステータスバーの Cloud Code ステータス メッセージに Google Cloud プロジェクト()が表示されていることを確認します。

タスク 2. HTTP 関数を作成する

最初に、HTTP リクエストに応答する認証済みの Node.js 関数を作成し、タイムアウトを 10 分に設定して、HTTP リクエストに対する関数の応答時間を延長できることを確認します。

作成

  1. Cloud Shell ターミナルで次のコマンドを実行して、アプリのフォルダとファイルを作成し、そのフォルダに移動します。
mkdir ~/hello-http && cd $_ touch index.js && touch package.json
  1. Cloud Shell のツールバーで [エディタを開く] ボタンをクリックします。

  2. 単に HTTP リクエストへの応答だけを行う次のコードを hello-http/index.js ファイルに追加します。

const functions = require('@google-cloud/functions-framework'); functions.http('helloWorld', (req, res) => { res.status(200).send('HTTP with Node.js in GCF 2nd gen!'); });
  1. hello-http/package.json ファイルに次の内容を追加して、依存関係を指定します。
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }
  1. ファイル エクスプローラで、index.js ファイルを開きます。この操作によって Gemini Code Assist が有効になり、エディタの右上隅に Gemini Code Assist: Smart Actions アイコンが表示されます。

  2. Gemini Code Assist: Smart Actions アイコン Gemini Code Assist: Smart Actions をクリックし、[この内容を説明] を選択します。

  3. Gemini Code Assist は、「Explain this」というプロンプトが事前入力されたチャットペインを開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[送信] をクリックします。

あなたは Cymbal AI のエキスパート クラウド デベロッパーです。新しいチームメンバーは、この Cloud Functions の実装に慣れていません。「hello-http」フォルダ内の「index.js」ファイルと「package.json」ファイルについて、アプリケーション コードで使用されている主要なコンポーネントごとに詳しく説明してください。 改善案があってもこれらのファイルは更新しないでください。

index.jspackage.json のコードに関する詳しい説明が、Gemini Code Assist のチャットに表示されます。

デプロイ

  1. Cloud Shell ターミナルで次のコマンドを実行して関数をデプロイし、「未認証の呼び出し」ポップアップで「y」と入力します。
gcloud functions deploy nodejs-http-function \ --gen2 \ --runtime nodejs22 \ --entry-point helloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --timeout 600s \ --max-instances 1 注: 権限エラーが表示された場合は、数分待ってからデプロイを再試行してください。API が有効になるまで数分かかります。

この手順では必須ではありませんが、タイムアウトを 600 秒に設定しています。これにより、関数が HTTP リクエストに応答できるタイムアウトを延長できます。

  1. 関数がデプロイされたら、検索バーに「Cloud Run functions」と入力して結果をクリックします。そうすると、Cloud Run コンソールにリダイレクトされます。関数が正常にデプロイされたことを確認します。

関数がデプロイされたことを確認する

テスト

  • 次のコマンドを使用して関数をテストします。
gcloud functions call nodejs-http-function \ --gen2 --region {{{project_0.default_region|Region}}}

次のようなメッセージがレスポンスとして表示されます。

HTTP with Node.js in GCF 2nd gen!

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 HTTP 関数を作成する

タスク 3. Cloud Storage 関数を作成する

このセクションでは、Cloud Storage バケットからのイベントに応答する Node.js 関数を作成します。

設定

  • Cloud Storage の関数を使用するには、まず次のコードを実行して、Cloud Storage サービス アカウントに pubsub.publisher という IAM ロールを付与します。
PROJECT_NUMBER=$(gcloud projects list --filter="project_id:{{{ project_0.project_id | PROJECT_ID }}}" --format='value(project_number)') SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER) gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/pubsub.publisher

作成

  1. 次のコマンドを実行して、アプリのフォルダとファイルを作成し、そのフォルダに移動します。
mkdir ~/hello-storage && cd $_ touch index.js && touch package.json
  1. Cloud Shell のツールバーで [エディタを開く] ボタンをクリックします。

  2. 単に Cloud Storage イベントへの応答だけを行う次のコードを hello-storage/index.js ファイルに追加します。

const functions = require('@google-cloud/functions-framework'); functions.cloudEvent('helloStorage', (cloudevent) => { console.log('Cloud Storage event with Node.js in GCF 2nd gen!'); console.log(cloudevent); });
  1. hello-storage/package.json ファイルに次の内容を追加して、依存関係を指定します。
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }
  1. ファイル エクスプローラで、「hello-storage」フォルダ内の index.js ファイルを開きます。この操作によって Gemini Code Assist が有効になり、エディタの右上隅に Gemini Code Assist: Smart Actions アイコンが表示されます。

  2. Gemini Code Assist: Smart Actions アイコン Gemini Code Assist: Smart Actions をクリックし、[この内容を説明] を選択します。

  3. Gemini Code Assist は、「Explain this」というプロンプトが事前入力されたチャットペインを開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[送信] をクリックします。

あなたは Cymbal AI のエキスパート クラウド デベロッパーです。新しいチームメンバーは、この Cloud Functions の実装に慣れていません。「hello-storage」フォルダ内の「index.js」ファイルと「package.json」ファイルについて、アプリケーション コードで使用されている主要なコンポーネントごとに詳しく説明してください。改善案があってもこれらのファイルは更新しないでください。

index.jspackage.json のコードに関する詳しい説明が、Gemini Code Assist のチャットに表示されます。

デプロイ

  1. まず、次のコマンドを実行して、イベントの作成に使用する Cloud Storage バケットを作成します。
BUCKET="gs://gcf-gen2-storage-{{{ project_0.project_id | PROJECT_ID }}}" gsutil mb -l {{{project_0.default_region|Region}}} $BUCKET
  1. 次のコマンドを実行して、関数をデプロイします。
gcloud functions deploy nodejs-storage-function \ --gen2 \ --runtime nodejs22 \ --entry-point helloStorage \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-bucket $BUCKET \ --trigger-location {{{project_0.default_region|Region}}} \ --max-instances 1 注: 前の手順と同様に、権限エラーが表示された場合は、数分待ってからデプロイを再試行してください。API が有効になるまで数分かかることがあります。
  1. 関数がデプロイされたら、Cloud Run コンソールで関数が表示されることを確認します。

2 つの関数

テスト

  1. 関数をテストするために、次のコマンドを実行してファイルをバケットにアップロードします。
echo "Hello World" > random.txt gsutil cp random.txt $BUCKET/random.txt
  1. 以下のコマンドを実行します。受信した CloudEvent がログに表示されます。
gcloud functions logs read nodejs-storage-function \ --region {{{project_0.default_region|Region}}} --gen2 --limit=100 --format "value(log)" 注: ログの生成には 1 分ほどかかることがあります。

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

出力:

} traceparent: '00-c74cb472d1e78f7225b6f617a31d9c08-96f0380bb62be2c1-01' }, etag: 'CKOx1L3wofoCEAE=' crc32c: 'R1jUOQ==', mediaLink: 'https://storage.googleapis.com/download/storage/v1/b/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/o/random.txt?generation=1663625646643363&alt=media', md5Hash: '5Z/5eUEET4XfUpfhwwLSYA==', size: '12', timeStorageClassUpdated: '2022-09-19T22:14:06.657Z', storageClass: 'STANDARD', updated: '2022-09-19T22:14:06.657Z', timeCreated: '2022-09-19T22:14:06.657Z', contentType: 'text/plain', metageneration: '1', generation: '1663625646643363', bucket: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', name: 'random.txt', selfLink: 'https://www.googleapis.com/storage/v1/b/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/o/random.txt', id: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/random.txt/1663625646643363', kind: 'storage#object', data: { bucket: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', time: '2022-09-19T22:14:06.657124Z', subject: 'objects/random.txt', type: 'google.cloud.storage.object.v1.finalized', specversion: '1.0', source: '//storage.googleapis.com/projects/_/buckets/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', id: '5693030851428996', { Cloud Storage event with Node.js in GCF 2nd gen!

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Storage 関数を作成する

タスク 4. Cloud Audit Logs 関数を作成する

このセクションでは、Compute Engine VM インスタンスの作成時の Cloud Audit Log イベントを受け取る Node.js 関数を作成します。この関数は応答として、VM の作成者を示すラベルを、新しく作成された VM に追加します。

新しく作成された Compute Engine VM を特定する

Compute Engine は、VM の作成時に監査ログを 2 つ出力します。

1 つ目のログは VM の作成が開始されたときに出力され、次のような内容になります。

監査ログ 1

2 つ目のログは VM の作成が完了した後に出力され、次のような内容になります。

監査ログ 2

operation フィールドに first: truelast: true という値が入っていることに注目してください。2 つ目の監査ログには、インスタンスにラベルを付けるために必要な情報がすべて含まれているため、Cloud Run 関数では、last: true フラグを使用して 2 つ目のログを検出します。

設定

Cloud Audit Logs 関数を使用するには、Eventarc で監査ログを利用できるようにする必要があります。また、eventarc.eventReceiver ロールを持つサービス アカウントを使用する必要があります。

  1. ナビゲーション メニューから、[IAM と管理] > [監査ログ] に移動します。
注: resourcemanager.folders.getIamPolicy 権限がないという警告は無視してかまいません。
  1. Compute Engine API」を見つけて、その横にあるチェックボックスをオンにします。API が見つからない場合は、次のページで検索してください。

  2. 右側の情報ペインで、ログの種類の [管理読み取り]、[データ読み取り]、[データ書き込み] チェックボックスをオンにして、[保存] をクリックします。

[管理読み取り]、[データ読み取り]、[データ書き込み] のチェックボックスをオンにする

  1. 次のコマンドを実行して、デフォルトの Compute Engine サービス アカウントに eventarc.eventReceiver という IAM ロールを付与します。
gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver

コードを取得する

  1. 次のコードを実行して、アプリケーションが格納されているリポジトリのクローンを作成します。
cd ~ git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
  1. Cloud Shell のツールバーで [エディタを開く] ボタンをクリックします。

  2. ファイル エクスプローラで、eventarc-samples > gce-vm-labeler > gcf > nodejs > index.js に移動します。

  3. index.js ファイルを開きます。この操作によって Gemini Code Assist が有効になり、エディタの右上隅に Gemini Code Assist: Smart Actions アイコンが表示されます。

  4. Gemini Code Assist: Smart Actions アイコン Gemini Code Assist: Smart Actions をクリックし、[この内容を説明] を選択します。

  5. Gemini Code Assist は、「Explain this」というプロンプトが事前入力されたチャットペインを開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[送信] をクリックします。

あなたは Cymbal AI のエキスパート クラウド デベロッパーです。新しいチームメンバーは、この Cloud Functions の実装に慣れていません。「index.js」ファイルについて、アプリケーション コードで使用されている主要なコンポーネントごとに詳しく説明してください。改善案があってもこのファイルは更新しないでください。

index.js ファイルには、CloudEvent にラップされた監査ログを受け取るアプリケーション コードが含まれています。このコードはログを受け取ると、Compute Engine VM インスタンスの詳細情報を抽出し、VM インスタンスにラベルを設定します。index.js については、ご自身でさらに詳しく学習してみてください。

index.js コードに関する詳しい説明が、Gemini Code Assist のチャットに表示されます。

デプロイ

  1. Cloud Shell ターミナルで次のコマンドを実行して、アプリ ディレクトリに移動します。
cd ~/eventarc-samples/gce-vm-labeler/gcf/nodejs
  1. 前回と同様に、gcloud で次のコマンドを実行して、関数をデプロイします。この関数は、--trigger-event-filters フラグを使用して、Compute Engine の挿入に関する監査ログをフィルタリングしています。
gcloud functions deploy gce-vm-labeler \ --gen2 \ --runtime nodejs22 \ --entry-point labelVmCreation \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-event-filters="type=google.cloud.audit.log.v1.written,serviceName=compute.googleapis.com,methodName=beta.compute.instances.insert" \ --trigger-location {{{project_0.default_region|Region}}} \ --max-instances 1 : Cloud Audit Logs 関数のトリガーはすぐに作成されますが、トリガーが完全に機能するようになるまで 10 分ほどかかることがあります。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Audit Logs 関数を作成する

テスト

Cloud Audit Logs 関数をテストするには、Cloud コンソールで Compute Engine VM を作成する必要があります(gcloud でも VM は作成できますが、監査ログが生成されません)。

  1. ナビゲーション メニューから、[Compute Engine] > [VM インスタンス] に移動します。

  2. [インスタンスを作成] をクリックし、インスタンスの [名前] を「instance-1」に設定し、[ゾーン] を に設定します。

  3. 他のフィールドはすべてデフォルトのままにして、[作成] をクリックします。

VM の作成が完了すると、Cloud コンソールの VM の [基本情報] セクションに、追加された creator ラベルが表示されているはずです。

creator ラベル

  1. 次のコマンドを使用して確認します。
gcloud compute instances describe instance-1 --zone {{{project_0.default_zone | "Zone"}}}

出力に次の例のようなラベルが表示されます。

出力例:

... labelFingerprint: ULU6pAy2C7s= labels: creator: student-02-19b599a0f901 ...

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 VM インスタンスを作成する

  1. 次のコマンドを実行して、VM を削除します。プロンプトが表示されたら、「Y」と入力して確定します。
gcloud compute instances delete instance-1 --zone {{{project_0.default_zone | "Zone"}}}

タスク 5. さまざまなリビジョンをデプロイする

Cloud Run functions では、複数のリビジョンの関数がサポートされているため、トラフィックをリビジョン間で分割したり、関数を以前のバージョンにロールバックしたりできます。このセクションでは、2 つのリビジョンの Cloud Run 関数をデプロイします。

作成

  1. 次のコマンドを実行して、アプリのフォルダとファイルを作成し、そのフォルダに移動します。
mkdir ~/hello-world-colored && cd $_ touch main.py touch requirements.txt
  1. 次のコードを hello-world-colored/main.py ファイルに追加します。このコードには、色に関する環境変数を読み取り、その色の背景を持つ「Hello World」を返す Python 関数が含まれています。
import os color = os.environ.get('COLOR') def hello_world(request): return f'<body style="background-color:{color}"><h1>Hello World!</h1></body>'

デプロイ

  1. 次のコマンドを実行して、背景がオレンジ色の 1 つ目のリビジョンの関数をデプロイします。
COLOR=orange gcloud functions deploy hello-world-colored \ --gen2 \ --runtime python39 \ --entry-point hello_world \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --update-env-vars COLOR=$COLOR \ --max-instances 1

この時点で、ブラウザで HTTP トリガー(先ほど実行したデプロイ コマンドの URI の出力)を表示して関数をテストすると、背景がオレンジ色の「Hello World」が表示されます。

オレンジ色の Hello World

  1. [Cloud Run functions] ページに移動すると [Cloud Run] コンソールにリダイレクトされるので、そこで hello-world-colored 関数をクリックします。

  2. [新しいリビジョンの編集とデプロイ] をクリックします。

  3. すべてをデフォルトのままにして、下にスクロールし、[変数とシークレット] タブを選択します。[環境変数] セクションで、COLOR 環境変数を yellow に更新します。

関数のリビジョン

  1. [デプロイ] をクリックします。

これが最新のリビジョンであるため、関数をテストすると、黄色の背景の「Hello World」が表示されます。

黄色の Hello World

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 さまざまなリビジョンをデプロイする

タスク 6. 最小インスタンス数の設定

Cloud Run functions では、いつでもリクエストを処理できるようにウォーム状態に維持する関数インスタンスの最小数を指定できます。これは、コールド スタートの数を抑制するうえで有用です。このセクションでは、初期化に時間がかかる関数をデプロイしますが、コールド スタートの問題があることがわかっています。そのため、コールド スタートを回避するために、最小インスタンス数の値を 1 に設定して関数をデプロイします。

作成

  1. 次のコマンドを実行して、アプリのフォルダとファイルを作成し、そのフォルダに移動します。
mkdir ~/min-instances && cd $_ touch main.go touch go.mod
  1. min-instances/main.go ファイルに次のコードを追加します。この Go サービスでは、時間がかかる初期化をシミュレートするために、init 関数の中で 10 秒間スリープします。また、HTTP 呼び出しに応答する HelloWorld 関数も含まれています。
package p import ( "fmt" "net/http" "time" ) func init() { time.Sleep(10 * time.Second) } func HelloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Slow HTTP Go in GCF 2nd gen!") }
  1. min-instances/go.mod ファイルに次のコードを追加します。これは、モジュールパスと Go 言語のバージョンを指定しています。
module example.com/mod go 1.23

デプロイ

  1. 次のコマンドを実行して、最小インスタンス数のデフォルト値である 0 を使用して最初のリビジョンの関数をデプロイします。
gcloud functions deploy slow-function \ --gen2 \ --runtime go123 \ --entry-point HelloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --max-instances 4
  1. 次のコマンドで関数をテストします。
gcloud functions call slow-function \ --gen2 --region {{{project_0.default_region|Region}}}

初回の呼び出しでは、10 秒の遅延(コールド スタートの実行)の後に、以下のメッセージが表示されます。2 回目以降の呼び出しはすぐに返されます。

Slow HTTP Go in GCF 2nd gen!

最小インスタンス数の設定

最初のリクエストでコールド スタートが実行されるのを避けるために、次のように --min-instances フラグを 1 に設定して関数を再デプロイします。

  1. コンソールで [Cloud Run] ページに移動し、slow-function サービスをクリックします。

  2. [新しいリビジョンの編集とデプロイ] をクリックします。

  3. [リビジョン スケーリング] セクションで、[インスタンスの最小数] を 1 に、[インスタンスの最大数] を 4 に設定します。

  4. その他のフィールドはデフォルトのままにして、[デプロイ] をクリックします。

テスト

  • 次のコマンドを実行して、関数をもう一度テストします。
gcloud functions call slow-function \ --gen2 --region {{{project_0.default_region|Region}}}

最初のリクエストで 10 秒の遅延が発生しなくなります。最小インスタンス数を設定したおかげで、(長時間呼び出しがなかった後の)初回の呼び出しでコールド スタートが実行される問題が解消されました。詳細については、最小インスタンス数の使用に関するドキュメントをご覧ください。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 最小インスタンス数の設定

タスク 7. 同時実行数を設定して関数を作成する

Cloud Run functions では、関数インスタンスで同時に処理できるリクエスト数はデフォルトでは 1 つですが、同時に処理できるリクエスト数は指定できます。これにより並列リクエストごとに新しい関数インスタンスを作成する必要がなくなるので、コールド スタートを防ぎたい場合にも便利です。

このセクションでは、前の手順で作成した初期化に時間がかかる関数を使用します。10 個のリクエストを送信すると、それらのリクエストを処理するために新しい関数インスタンスの作成が必要になるため、コールド スタートの問題が再び発生します。

コールド スタートの問題を解決するために、同時実行数に 100 の値を設定した別の関数をデプロイします。10 個のリクエストを送信してもコールド スタートの問題が発生しなくなり、単一の関数インスタンスですべてのリクエストを処理できていることがわかります。

同時実行数を設定せずにテストする

  1. 次のインストール コマンドを使用して、Cloud Shell に hey をインストールします。
sudo apt install hey
  1. 次のコマンドを実行して関数の URL を取得し、環境変数として保存します。
SLOW_URL=$(gcloud functions describe slow-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
  1. hey というオープンソースのベンチマーク ツールを使用して、処理に時間のかかる関数に 10 個の同時リクエストを送信します。
hey -n 10 -c 10 $SLOW_URL

hey の出力から、時間がかかっているリクエストがあることがわかります。

出力:

Summary: Total: 10.9053 secs Slowest: 10.9048 secs Fastest: 0.4439 secs Average: 9.7930 secs Requests/sec: 0.9170 Total data: 310 bytes Size/request: 31 bytes Response time histogram: 0.444 [1] |■■■■ 1.490 [0] | 2.536 [0] | 3.582 [0] | 4.628 [0] | 5.674 [0] | 6.720 [0] | 7.767 [0] | 8.813 [0] | 9.859 [0] | 10.905 [9] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

これは、リクエストを処理するために作成される関数インスタンスが増えたことが原因です。関数のアクティブ インスタンス数を確認すると、ある時点で複数のインスタンスが作成され、その結果、コールド スタートの問題が発生したことがわかります。

アクティブなインスタンス数のグラフ

  1. 次のコマンドを実行して、関数を削除します。プロンプトが表示されたら、「Y」と入力して確定します。
gcloud run services delete slow-function --region {{{project_0.default_region | "Region"}}}

デプロイ

  • 次のコマンドを実行して、先ほどの関数と同じ新しい関数をデプロイします。デプロイした後に、同時実行数を増やします。
gcloud functions deploy slow-concurrent-function \ --gen2 \ --runtime go123 \ --entry-point HelloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --min-instances 1 \ --max-instances 4

同時実行数を設定する

関数の基盤となる Cloud Run サービスの同時実行数を 100 に設定します(最大 1,000 に設定できます)。これにより、単一の関数インスタンスで 100 個以上のリクエストを処理できるようになります。

  1. ナビゲーション メニューから、[Cloud Run] に移動します。

  2. slow-concurrent-function サービスをクリックします。

  3. [新しいリビジョンの編集とデプロイ] をクリックします。

  4. [リソース] セクションで、[CPU] を 1 に設定します。

  5. [リクエスト] で、[インスタンスあたりの最大同時リクエスト数] を 100 に設定します。

  6. [リビジョン スケーリング] の [インスタンスの最大数] を 4 に設定します。

  7. その他のフィールドはデフォルトのままにして、[デプロイ] をクリックします。

同時実行数を設定してテストする

  1. 関数がデプロイされたら、次のコマンドを実行して新しい関数の URL を取得し、環境変数として保存します。
SLOW_CONCURRENT_URL=$(gcloud functions describe slow-concurrent-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
  1. hey を使用して、10 個の同時リクエストを送信します。
hey -n 10 -c 10 $SLOW_CONCURRENT_URL

hey の出力から、すべてのリクエストが迅速に処理されていることがわかります。

出力:

Summary: Total: 0.0652 secs Slowest: 0.0651 secs Fastest: 0.0619 secs Average: 0.0636 secs Requests/sec: 153.3751 Total data: 280 bytes Size/request: 28 bytes Response time histogram: 0.062 [1] |■■■■■■■■■■■■■■■■■■■■ 0.062 [1] |■■■■■■■■■■■■■■■■■■■■ 0.063 [0] | 0.063 [0] | 0.063 [0] | 0.063 [1] |■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.065 [0] | 0.065 [1] |■■■■■■■■■■■■■■■■■■■■

同時実行数を増やしたおかげで、単一の関数インスタンスですべてのリクエストを処理できるようになり、コールド スタートの問題が解消されました。詳しくは、同時実行数に関するドキュメントをご覧ください。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 同時実行数を設定して関数を作成する

お疲れさまでした

このラボでは、HTTP 呼び出し、Cloud Storage イベント、Cloud Audit Logs に応答する複数の Cloud Run 関数をデプロイしました。また、関数を実行する複数のリビジョンの Cloud Run サービスをデプロイし、同時実行数の値を設定したり、最小インスタンス数を設定してコールド スタートを回避したりしました。

次のステップと詳細情報

Cloud Run functions の詳細については、以下をご覧ください。

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

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

マニュアルの最終更新日: 2025 年 8 月 19 日

ラボの最終テスト日: 2025 年 10 月 13 日

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

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

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

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

ありがとうございます。

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

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。