Cloud Functions の関数をデプロイする

このガイドでは、ソースコードから Cloud Functions の関数をデプロイする方法について説明します。

デプロイ プロセスでは、ソースコードと構成設定を使用して、Cloud Functions が自動的に管理する実行可能なイメージをビルドし、関数へのリクエストを処理します。

デプロイの基本

Cloud Functions をデプロイするユーザーには、Cloud Functions デベロッパー IAM ロール、または同じ権限を含むロールが必要です。デプロイの追加構成もご覧ください。

以下の手順では、gcloud CLI または Google Cloud Console を使用して関数をデプロイします。

gcloud

gcloud functions deploy コマンドを使用して、関数をデプロイします。

gcloud functions deploy YOUR_FUNCTION_NAME \
[--gen2] \
--region=YOUR_REGION \
--runtime=YOUR_RUNTIME \
--source=YOUR_SOURCE_LOCATION \
--entry-point=YOUR_CODE_ENTRYPOINT \
TRIGGER_FLAGS

最初の引数 YOUR_FUNCTION_NAME は、デプロイする関数の名前です。小文字、数字、ハイフン、アンダースコアを使用できます。

  • --gen2 フラグは、Cloud Functions(第 2 世代)にデプロイすることを指定します。このフラグを省略すると、Cloud Functions(第 1 世代)にデプロイされます。Cloud Functions(第 1 世代)と Cloud Functions(第 2 世代)の比較については、Cloud Functions バージョンの比較をご覧ください。

  • --region フラグは、関数をデプロイするリージョンを指定します。Cloud Functions でサポートされているリージョンの一覧については、ロケーションをご覧ください。

  • --runtime フラグは、関数で使用する言語ランタイムを指定します。Cloud Functions は複数のランタイムをサポートしています。詳しくは、ランタイムをご覧ください。

  • --source フラグは、関数のソースコードの場所を指定します。詳しくは、以降のセクションをご覧ください。

  • --entry-point フラグは、ソースコード内の関数へのエントリ ポイントを指定します。これは、関数の実行時に実行されるコードです。このフラグの値は、ソースコードに存在する関数名または完全修飾クラス名にする必要があります。詳細については、関数のエントリ ポイントをご覧ください。

  • 関数のトリガーを指定するには、使用するトリガーに応じて、追加のフラグ(上記の TRIGGER_FLAGS として表されます)が必要です。

トリガーフラグ トリガーの説明
--trigger-http HTTP(S) リクエストを使用して関数をトリガーします。詳細については、HTTP トリガーをご覧ください。
--trigger-topic=YOUR_PUBSUB_TOPIC 指定した Pub/Sub トピックにメッセージが公開されると、関数がトリガーされます。詳細については、Pub/Sub トリガーをご覧ください。
--trigger-bucket=YOUR_STORAGE_BUCKET 指定した Cloud Storage バケットにオブジェクトが作成されるか、上書きされると、関数をトリガーします。詳しくは、 Cloud Storage トリガーをご覧ください。
--trigger-event-filters=EVENTARC_EVENT_FILTERS (第 2 世代のみ)指定したフィルタに一致するイベントが発生したときに Eventarc で関数をトリガーします。--gen2 フラグを指定する必要があります。詳細とその他のオプションについては、 Eventarc トリガーをご覧ください。
--trigger-event=EVENT_TYPE
[--trigger-resource=RESOURCE]
(第 1 世代のみ)指定したイベントが発生したときに関数をトリガーします。一部のイベントタイプでは、リソースを指定する必要があります。詳細については、 Cloud Functions(第 1 世代)でサポートされるトリガーをご覧ください。

必要に応じて、関数をデプロイする際に、追加の構成ネットワーキングセキュリティのオプションを指定できます。

デプロイ コマンドとそのフラグの詳細については、gcloud functions deploy のドキュメントをご覧ください。

デプロイ コマンドの例については、コマンドラインの例をご覧ください。

コンソール

  1. コンソールで Cloud Functions の概要ページに移動します。

    Cloud Functions に移動

    Cloud Functions をデプロイする Google Cloud プロジェクトが選択されていることを確認します。

  2. [関数の作成] をクリックします。

  3. [環境] フィールドで、[第 1 世代] または [第 2 世代] を選択します。Cloud Functions(第 1 世代)と Cloud Functions(第 2 世代)の比較については、Cloud Functions のバージョンの比較をご覧ください。

  4. [関数名] フィールドに、関数の名前を入力します。この名前には、小文字、数字、ハイフン、アンダースコアを使用できます。

  5. [リージョン] フィールドで、関数をデプロイするリージョンを選択します。

  6. [トリガー] セクションで、選択した環境に基づく手順に従います。

    • 第 1 世代
      1. [トリガーのタイプ] フィールドで、トリガーのタイプを選択します。詳細については、Cloud Functions(第 1 世代)でサポートされるトリガーをご覧ください。
      2. 選択したトリガータイプの追加フィールドを入力します。
      3. [保存] をクリックします。
    • 第 2 世代
      1. [HTTPS 認証] セクションで、関数の未認証呼び出しを許可するかどうかに応じて適切なオプションを選択します。すべての第 2 世代の関数には、HTTP(S) トリガーのエンドポイントがあります。デフォルトでは認証が必要です。詳しくは、呼び出しの認証をご覧ください。
      2. イベント ドリブン関数をデプロイするには、[Add Eventarc trigger] をクリックしてトリガーを追加します。詳細については、Eventarc トリガーをご覧ください。[Eventarc トリガー] ペインのフィールドを入力し、[トリガーを保存] をクリックします。
  7. 必要に応じて、ページの最後にある [ランタイム、ビルド...] セクションを展開して、追加の構成セキュリティオプションにアクセスします。

  8. [次へ] をクリックしてコードステップに進みます。

  9. [ランタイム] フィールドで、関数が使用する言語ランタイムを選択します。Cloud Functions は複数のランタイムをサポートしています。詳しくは、ランタイムをご覧ください。

  10. [エントリ ポイント] フィールドに、ソースコード内の関数へのエントリ ポイントを入力します。これは、関数の実行時に実行されるコードです。このフラグの値は、ソースコードに存在する関数名または完全修飾クラス名にする必要があります。詳細については、関数のエントリ ポイントをご覧ください。

  11. [ソースコード] フィールドで、関数のソースコードを提供する方法として適切なオプションを選択します。詳しくは、以降のセクションをご覧ください。

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

デプロイが正常に完了すると、コンソールの Cloud Functions の概要ページに関数が緑色のチェックマークで表示されます。

Cloud Console でデプロイされた関数

基盤となるインフラストラクチャがプロビジョニングされている間、関数の初期デプロイには数分かかることがあります。既存の関数の再デプロイは速くなり、受信トラフィックは最新バージョンに自動的に移行されます。

ローカルマシンからのデプロイ

このセクションでは、ローカルマシンにあるソースコードから関数をデプロイする方法について説明します。

gcloud

gcloud functions deploy コマンドを使用して、上記のデプロイ手順を行います。

--source フラグには、関数のソースコードのルート ディレクトリへのローカル ファイル システムのパスを指定します。ソース ディレクトリ構造をご覧ください。このフラグを省略すると、現在の作業ディレクトリが使用されます。

必要に応じて、--stage-bucket フラグを使用して Cloud Storage バケットを指定し、デプロイの一環としてソースコードをアップロードすることもできます。

ソースコードのアップロード中に、Cloud Functions は .gcloudignore ファイルを使用して不要なファイルを除外します。

コンソール

  1. コンソールを使用して、上記のデプロイ手順を行い、[ソースコード] フィールドに移動します。
  2. [ソースコード] フィールドで [ZIP アップロード] を選択します。
  3. [ZIP ファイル] フィールドで、[参照] をクリックして、ローカル ファイル システムからアップロードする ZIP ファイルを選択します。関数のソースファイルは、ZIP ファイルのルートに配置する必要があります。ソース ディレクトリ構造をご覧ください。
  4. [ステージ バケット] フィールドで、[参照] をクリックして、デプロイの一環としてソースコードをアップロードする Cloud Storage バケットを選択します。
  5. [デプロイ] をクリックします。

Cloud Storage からデプロイ

このセクションでは、Cloud Storage バケット内のソースコードから関数をデプロイする方法について説明します。ソースコードは ZIP ファイルとしてパッケージ化する必要があります。

gcloud

gcloud functions deploy コマンドを使用して、上記のデプロイ手順を行います。

--source フラグに、gs:// から始まる Cloud Storage パスを指定します。パス内のオブジェクトは、関数のソースコードを含む ZIP ファイルである必要があります。関数のソースファイルは、ZIP ファイルのルートに配置する必要があります。ソース ディレクトリの構造をご覧ください。

コンソール

  1. コンソールを使用して、上記のデプロイ手順を行い、[ソースコード] フィールドに移動します。
  2. [ソースコード] フィールドで [Cloud Storage の ZIP] を選択します。
  3. [Cloud Storage のロケーション] フィールドで、[参照] をクリックして Cloud Storage から ZIP ファイルを選択します。関数のソースファイルは、ZIP ファイルのルートに配置する必要があります。ソース ディレクトリ構造をご覧ください。
  4. [デプロイ] をクリックします。

ソース リポジトリからデプロイする

このセクションでは、Cloud Source Repositories にあるソースコードから関数をデプロイする方法について説明します。Cloud Source Repositories からデプロイすると、GitHub リポジトリまたは Bitbucket リポジトリでホストされているコードをデプロイすることもできます。

Cloud Source Repositories からコードをデプロイする前に、リポジトリを設定し、必要に応じて GitHub リポジトリまたは Bitbucket リポジトリに接続する必要があります。

Cloud Functions がソース リポジトリから読み取るには、Cloud Functions サービス エージェントに、リポジトリに対する Source Repository 読み取り(roles/source.reader)IAM ロールが必要です。ソース リポジトリが関数と同じプロジェクトにある場合、この権限は自動的に含まれます。ソース リポジトリが別のプロジェクトにある場合は、権限を手動で付与する必要があります。

次に、リポジトリから関数をデプロイできます。

gcloud

gcloud functions deploy コマンドを使用して、上記のデプロイ手順を行います。

--source フラグには、関数のソースコードの場所を参照するソース リポジトリ参照を指定します。ソース ディレクトリ構造をご覧ください。Cloud Source Repositories の最も基本的なリファレンスは、次の形式です。

https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_NAME

上記のパスで、PROJECT_ID は Google Cloud プロジェクト ID、REPOSITORY_NAME はソース リポジトリの名前です。このパスでは、master というタグが付いたリビジョンのリポジトリのルート ディレクトリのソースコードが使用されます。

master 以外のリビジョンからデプロイするには、上記のパスに次のいずれかを追加します。

  • /revisions/REVISION_NAME
  • /moveable-aliases/MOVEABLE_ALIAS
  • /fixed-aliases/FIXED_ALIAS

リポジトリのルート以外のディレクトリからソースコードをデプロイするには、上記のリビジョン、移動可能なエイリアス、または固定されたエイリアスを指定して、/paths/PATH_TO_YOUR_SOURCE_DIRECTORY をパスに追加します。

コンソール

  1. コンソールを使用して、上記のデプロイ手順を行い、[ソースコード] フィールドに移動します。
  2. [ソースコード] フィールドで、[Cloud Source Repository のリポジトリ] を選択します。
  3. [リポジトリ] フィールドに、ソース リポジトリの名前を入力します。
  4. [ブランチ / タグ] フィールドで、デプロイ元に応じて [ブランチ] または [タグ] を選択します。
  5. 表示されているブランチ名またはタグ名を入力します。
  6. [ソースコードを含むディレクトリ] フィールドに、関数のソースコードを含むリポジトリ内のディレクトリのパスを入力します。ソース ディレクトリ構造をご覧ください。
  7. [デプロイ] をクリックします。

Console のインライン エディタからデプロイする

このセクションでは、付属のインライン エディタを使用して、コンソールから直接関数を作成してデプロイする方法について説明します。

  1. コンソールを使用して、上記のデプロイ手順を行い、[ソースコード] フィールドに移動します。
  2. [ソースコード] フィールドで [インライン エディタ] を選択します。
  3. 提供されたエディタを使用して、必要に応じてソースファイルを作成または編集します。ソース ディレクトリ構造をご覧ください。
    • 左側のペインにはソースファイルが表示され、ファイルの作成、名前変更、削除を行うことができます。
    • 右側のペインはテキスト エディタで、ファイルの内容を編集できます。
  4. [デプロイ] をクリックします。

コマンドラインの例

このセクションでは、デプロイ シナリオの例のデプロイコマンドを示します。

Cloud Functions でサポートされているさまざまなトリガーの詳細については、Cloud Functions のトリガーをご覧ください。

ローカル ソースコードからの HTTP 関数

次のような HTTP 関数があるとします。

  • Node.js 16 を使用する関数
  • ソースコードは現在の作業ディレクトリ(.)にあります。
  • コードのエントリ ポイントの名前は myHttpFunction です

リージョン us-central1my-http-function という名前の Cloud Functions(第 2 世代)に関数をデプロイするには、次のコマンドを使用します。

gcloud functions deploy my-http-function \
  --gen2 \
  --region=us-central1 \
  --runtime=nodejs16 \
  --source=. \
  --entry-point=myHttpFunction \
  --trigger-http

Cloud Storage のソースコードからの Pub/Sub 関数

次のようなイベント ドリブン関数があるとします。

  • この関数は Pub/Sub メッセージのパブリッシュ イベントを処理します。
  • この関数は Python 3.9 を使用します。
  • ソースコードはパス gs://my-bucket/my_function_source.zip のCloud Storage にあります。
  • コードのエントリ ポイントの名前は pubsub_handler です

europe-west1 リージョンに my-pubsub-function という名前の Cloud Functions(第 2 世代)に関数をデプロイし、Pub/Sub トピック my-topic のメッセージによって関数をトリガーするには、次のコマンドを使用します。

gcloud functions deploy my-pubsub-function \
  --gen2 \
  --region=europe-west1 \
  --runtime=python39 \
  --source=gs://my-bucket/my_function_source.zip \
  --entry-point=pubsub_handler \
  --trigger-topic=my-topic

ローカル ソースコードからの Cloud Storage 関数

次のようなイベント ドリブン関数があるとします。

  • この関数は、Cloud Storage オブジェクトの削除イベントを処理します。
  • この関数は Java 11 を使用します
  • ソースコードはパス ./functions/storage-function にあります。
  • コードのエントリ ポイントの名前は myproject.StorageFunction です

関数を Cloud Functions(第 2 世代)にデプロイし、リージョン asia-northeast1my-storage-function という名前を付け、Cloud Storage バケット my-bucket 内のイベントによって関数をトリガーするには、次のコマンドを使用します。

gcloud functions deploy my-storage-function \
  --gen2 \
  --region=asia-northeast1 \
  --runtime=java11 \
  --source=./functions/storage-function \
  --entry-point=myproject.StorageFunction \
  --trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
  --trigger-event-filters="bucket=my-bucket"

次のステップ