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

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

デプロイ プロセスでは、ソースコードと構成設定を取得し、関数に対するリクエストを処理するために Cloud Functions で自動的に管理される実行可能なイメージをビルドします。

デプロイの基本

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

gcloud CLI または Google Cloud コンソールを使用して関数をデプロイする手順のタブを選択します。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. 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 は、デプロイされた関数の名前です。関数名は、先頭を文字にし、その後に 62 文字以下の文字、数字、ハイフン、アンダースコアを続けます。末尾は文字または数字にする必要があります。

    • --gen2 フラグは、Cloud Functions(第 2 世代)にデプロイすることを指定します。このフラグは、第 2 世代の関数を初めてデプロイするときに必要です。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. Google Cloud コンソールで Cloud Functions の概要ページに移動します。

    Cloud Functions に移動

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

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

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

  4. [関数名] フィールドに、関数の名前を入力します。関数名は、先頭を文字にし、その後に 62 文字以下の文字、数字、ハイフン、アンダースコアを続けます。末尾は文字または数字にする必要があります。

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

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

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

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

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

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

  11. [ソースコード] フィールドで、関数のソースコードの提供に適したオプションを選択します。詳しくは、以下のセクションをご覧ください。

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

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

Cloud コンソールでデプロイされた関数

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

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

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

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

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

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

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

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

コンソール

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

Cloud Storage からデプロイする

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

Cloud Functions が Cloud Storage バケットから読み取るには、デプロイ エージェントに storage.objects.get 権限があることを確認してください。

  • Cloud Functions(第 1 世代)では、デプロイを行うアカウントにこの権限を付与する必要があります。
  • Cloud Functions(第 2 世代)では、Cloud Functions サービス エージェントにこの権限が必要です。ソースバケットが関数と同じプロジェクトにある場合、自動的に付与されます。バケットが別のプロジェクトにある場合は、手動でサービス エージェントに付与する必要があります。

バケットへのアクセスの制御については、Cloud Storage ドキュメントの IAM 権限の使用をご覧ください。

この権限により、Cloud Storage から関数をデプロイできるようになりました。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

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

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

コンソール

  1. Google Cloud コンソールで上記のデプロイ手順を行い、[ソースコード] フィールドに移動します。
  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

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

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

Google Cloud コンソールのインライン エディタからデプロイする

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

  1. Google Cloud コンソールで上記のデプロイ手順を行い、[ソースコード] フィールドに移動します。
  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 を使用します。
  • ソースコードは Cloud Storage のパスにあります。gs://my-bucket/my_function_source.zip
  • コードのエントリ ポイントは 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 という名前です。

リージョン asia-northeast1my-storage-function という名前で関数を Cloud Functions(第 2 世代)にデプロイし、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"

次のステップ