関数を作成する

Cloud Run functions 用に作成された関数は、Google Cloud の Buildpack を使用して作成できます。

このページでは、Cloud Run にデプロイする関数を作成する 2 つの方法について説明します。

  • pack CLI を使用する
  • リモート ビルドシステムとして Cloud Build を使用する

関数のエントリ ポイント

Buildpack を使用して関数を作成するには:

  • Functions Framework ライブラリを組み込みます。

  • GOOGLE_FUNCTION_TARGET 環境変数に、エントリポイントとして使用する関数の名前を設定します。これを行うには、ソースコードと同じフォルダに project.toml を含めます。project.toml ファイルは、次の構成でなければなりません。

[[build.env]]
    name = "GOOGLE_FUNCTION_TARGET"
    value =  "ENTRY_POINT"

ENTRY_POINT は、関数メソッドに置き換えます。

Cloud Run functions で環境変数を使用する方法については、Cloud Run functions サービスを構成するをご覧ください。

ビルダー

関数は、Google Cloud の Buildpack で管理され、公開されているベースイメージ上に作成されます。

ビルダーは、Buildpack とオペレーティング システム パッケージ(スタック)で構成されるイメージです。ビルダーは、関数のソースコードを実行中のコンテナに変換するために使用されます。

サポートされている Google Cloud Buildpack のビルダーのリストから選択できます。

pack を使用して作成する

Pack は、ビルドパックの使用をサポートするために CNB プロジェクトによって管理されている CLI ツールです。pack CLI を使用して、ローカルで関数をコンテナ イメージにビルドします。

始める前に

  1. Docker Community Edition(CE)をワークステーションにインストールします。pack は Docker を OCI イメージ ビルダーとして使用します。
  2. Pack CLI をインストールします。
  3. GitHub からサンプル アプリケーションを取得するために Git ソース管理ツールをインストールします。

ローカルで関数を作成する

pack build コマンドを使用して、デフォルトのビルダー --builder=gcr.io/buildpacks/builder を指定し、コンテナ イメージをローカルでビルドします。

pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME

IMAGE_NAME は、コンテナ イメージの名前に置き換えます。

ビルドイメージと実行イメージを拡張して、コンテナ イメージをカスタマイズすることもできます。

サンプル関数をローカルで作成する

次の例は、ローカルでサンプルを作成する方法を示しています。

  1. ローカルマシンにサンプル リポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. Workflows のサンプルコードが含まれているディレクトリに移動します。

    Go

    cd buildpack-samples/sample-functions-framework-go

    Java

    cd buildpack-samples/sample-functions-framework-java-mvn

    Node.js

    cd buildpack-samples/sample-functions-framework-node

    Python

    cd buildpack-samples/sample-functions-framework-python

    Ruby

    cd buildpack-samples/sample-functions-framework-ruby
  3. pack を使用してサンプル関数を作成します。

    Go

    pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-go

    Java

    pack build --builder gcr.io/buildpacks/builder:v1 sample-functions-java-mvn

    Node.js

    pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-node

    Python

    pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-python

    Ruby

    pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-ruby
  4. docker を使用してイメージを実行します。

    Go

    docker run -p8080:8080 sample-functions-framework-go

    Java

    docker run -it -ePORT=8080 -p8080:8080 sample-functions-java-mvn

    Node.js

    docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-node

    Python

    docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-python

    Ruby

    docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-ruby
  5. localhost:8080 を参照して、実行中の関数にアクセスします。

リモート ビルドシステムによるビルド

Cloud Build を使用して関数をコンテナ イメージにビルドし、コンテナ リポジトリとして Artifact Registry を使用してイメージの保存とデプロイを行います。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build and Artifact Registry APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Build and Artifact Registry APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Google Cloud プロジェクトがコンテナ イメージ リポジトリにアクセスできることを確認します。

    Artifact Registry の Docker リポジトリへのアクセスを構成するには:

    1. Google Cloud プロジェクトの同じロケーションに Docker リポジトリを新規作成します。
      gcloud artifacts repositories create REPO_NAME \
      --repository-format=docker \
      --location=REGION --description="DESCRIPTION"
      次のように置き換えます。
      • REPO_NAME は、Docker リポジトリに選択した名前に置き換えます。
      • REGION は、Google Cloud プロジェクトのロケーションに、またはそれに最も近いロケーションに置き換えます。
      • DESCRIPTION は選択した説明に置き換えます。

      たとえば、「Docker repository」という説明を使用して us-west2docker リポジトリを作成するには、次のコマンドを実行します。

      gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \
      --location=us-west2 --description="Docker repository"
    2. リポジトリが作成されたことを確認します。
      gcloud artifacts repositories list

      Docker リポジトリに選択した名前がリストに表示されます。

リモートで関数を作成する

gcloud builds submit コマンドを使用して、コンテナ イメージをビルドしてリポジトリにアップロードします。

コマンドにコンテナ イメージを指定することも、構成ファイルを使用することもできます。

コマンドで作成する

構成ファイルなしで作成するには、image フラグを指定します。

gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME

次のように置き換えます。

  • LOCATION は、コンテナ リポジトリのリージョン名(us-west2 など)に置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
  • REPO_NAME は Docker リポジトリの名前に置き換えます。
  • IMAGE_NAME は、コンテナ イメージの名前に置き換えます。

例:

gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo

構成ファイルを使用してビルドする

構成ファイルを使用すると、ビルドコマンドだけでイメージ リポジトリの構成の詳細を定義できます。構成ファイルは YAML ファイル形式にして、pack CLI を使用するビルドステップを含める必要があります。

  1. コンテナ イメージ リポジトリの URI を含む YAML ファイル(ファイル名: cloudbuild.yaml)を作成します。
  options:
    logging: CLOUD_LOGGING_ONLY
    pool: {}
  projectId: PROJECT_ID
  steps:
  - name: gcr.io/k8s-skaffold/pack
    entrypoint: pack
    args:
    - build
    - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
    - --builder
    - gcr.io/buildpacks/builder:latest
    - --network
    - cloudbuild
  images:
  - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME

次のように置き換えます。

  • LOCATION は、コンテナ リポジトリのリージョン名(us-west2 など)に置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
  • REPO_NAME は Docker リポジトリの名前に置き換えます。
  • IMAGE_NAME は、コンテナ イメージの名前に置き換えます。
  1. アプリケーションをビルドします。

    構成ファイルの名前が cloudbuild.yaml の場合は、次のコマンドを実行します。

    gcloud builds submit .
    

例: リモートでサンプル関数を作成する

次の例では、サンプルをリモートで作成し、コンテナ イメージが Artifact Registry のリポジトリに push されたことを確認する方法を示します。

  1. ローカルマシンにサンプル リポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. Workflows のサンプルコードが含まれているディレクトリに移動します。

    Go

    cd buildpack-samples/sample-functions-framework-go

    Java

    cd buildpack-samples/sample-functions-framework-java-mvn

    Node.js

    cd buildpack-samples/sample-functions-framework-node

    Python

    cd buildpack-samples/sample-functions-framework-python

    Ruby

    cd buildpack-samples/sample-functions-framework-ruby
  3. gcloud を使用して、アプリケーションのソースコードを Cloud Build に送信します。

    Go

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-go

    Java

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-gradle

    Node.js

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-node

    Python

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-python

    Ruby

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-ruby

    次のように置き換えます。

    • LOCATION は、コンテナ リポジトリのリージョン名(us-west2-docker.pkg.dev など)に置き換えます。
    • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
    • REPO_NAME は Docker リポジトリの名前に置き換えます。

  4. サンプル関数が REPO_NAME に正常に公開されていることを確認します。
    gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME

    次のように置き換えます。

    • LOCATION は、コンテナ リポジトリのリージョン名(us-west2 など)に置き換えます。
    • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
    • REPO_NAME は Docker リポジトリの名前に置き換えます。

ベースイメージの自動更新関数を作成する

関数コンテナは scratch でビルドすることもできます。これにより、Cloud Run のセキュリティの自動更新と組み合わせて使用できます。

pack CLI

pack build IMAGE_NAME \
  --builder LOCATION.pkg.dev/serverless-runtimes/google-22-full/builder/LANGUAGE:latest
  --run-image LOCATION-docker.pkg.dev/serverless-runtimes/google-22/scratch/RUNTIME_ID:latest

次のように置き換えます。

  • LOCATION は、コンテナ リポジトリのリージョン名(us-west2 など)に置き換えます。
  • IMAGE_NAME は、コンテナ イメージの名前に置き換えます。
  • LANGUAGE: 関数の言語(nodejs など)。
  • RUNTIME_ID は、ランタイム ID(nodejs22 など)に置き換えます。

Cloud Build

options:
  logging: CLOUD_LOGGING_ONLY
  pool: {}
projectId: PROJECT_ID
steps:
- name: gcr.io/k8s-skaffold/pack
  entrypoint: pack
  args:
  - build
  - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
  - --builder
  - LOCATION-docker.pkg.dev/serverless-runtimes/google-22-full/builder/LANGUAGE:latest
  - --run-image
  - LOCATION-docker.pkg.dev/serverless-runtimes/google-22/scratch/RUNTIME_ID:latest
  - --network
  - cloudbuild
images:
- LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME

次のように置き換えます。

  • LOCATION は、コンテナ リポジトリのリージョン名(us-west2 など)に置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
  • REPO_NAME は Docker リポジトリの名前に置き換えます。
  • IMAGE_NAME は、コンテナ イメージの名前に置き換えます。
  • LANGUAGE: 関数の言語(nodejs など)。
  • RUNTIME_ID は、ランタイム ID(nodejs22 など)に置き換えます。

次のステップ