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 を使用して、ローカルで関数をコンテナ イメージにビルドします。
始める前に
- Docker Community Edition(CE)をワークステーションにインストールします。
pack
は Docker を OCI イメージ ビルダーとして使用します。 - Pack CLI をインストールします。
- GitHub からサンプル アプリケーションを取得するために Git ソース管理ツールをインストールします。
ローカルで関数を作成する
pack build
コマンドを使用して、デフォルトのビルダー --builder=gcr.io/buildpacks/builder
を指定し、コンテナ イメージをローカルでビルドします。
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
IMAGE_NAME は、コンテナ イメージの名前に置き換えます。
ビルドイメージと実行イメージを拡張して、コンテナ イメージをカスタマイズすることもできます。
サンプル関数をローカルで作成する
次の例は、ローカルでサンプルを作成する方法を示しています。
- ローカルマシンにサンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- 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
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
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
- localhost:8080 を参照して、実行中の関数にアクセスします。
リモート ビルドシステムによるビルド
Cloud Build を使用して関数をコンテナ イメージにビルドし、コンテナ リポジトリとして Artifact Registry を使用してイメージの保存とデプロイを行います。
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Google Cloud プロジェクトがコンテナ イメージ リポジトリにアクセスできることを確認します。
Artifact Registry の Docker リポジトリへのアクセスを構成するには:
- 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-west2
にdocker
リポジトリを作成するには、次のコマンドを実行します。gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- リポジトリが作成されたことを確認します。
gcloud artifacts repositories list
Docker リポジトリに選択した名前がリストに表示されます。
- Google Cloud プロジェクトの同じロケーションに 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 を使用するビルドステップを含める必要があります。
- コンテナ イメージ リポジトリの 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
は、コンテナ イメージの名前に置き換えます。
アプリケーションをビルドします。
構成ファイルの名前が
cloudbuild.yaml
の場合は、次のコマンドを実行します。gcloud builds submit .
例: リモートでサンプル関数を作成する
次の例では、サンプルをリモートで作成し、コンテナ イメージが Artifact Registry のリポジトリに push されたことを確認する方法を示します。
- ローカルマシンにサンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- 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
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 リポジトリの名前に置き換えます。
-
サンプル関数が
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
など)に置き換えます。
次のステップ
- コンテナがビルドされた後、Cloud Run にデプロイする前にローカルでテストする。Cloud Run サービスをローカルでテストするをご覧ください。
- Cloud Run のコンテナの主な要件と動作について確認する。コンテナ契約をご覧ください。
- ビルドしたコンテナを Cloud Run にデプロイする。サービスをデプロイするをご覧ください。
- Cloud Build トリガーを使用して Cloud Run サービスのビルドとデプロイを自動化する。継続的デプロイの設定をご覧ください。
- Java アプリケーションに最適なコンテナビルドを実行する。Jib を使用して Java コンテナをビルドするをご覧ください。