Buildpack を使用してコンテナ イメージをビルドする方法は 2 つあります。
pack
CLI を使用してローカルでビルドし、関数をローカルでテストします。また、デプロイ前に変更のプロトタイプを迅速に作成します。- Cloud Build を使用してリモートでビルドします。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 関数で環境変数を使用する方法については、Cloud Run 関数サービスを構成するをご覧ください。
ローカルビルド
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
- アプリケーションのサンプルコードが含まれているディレクトリに移動します。
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
次のように置き換えます。
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
- アプリケーションのサンプルコードが含まれているディレクトリに移動します。
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 リポジトリの名前に置き換えます。
次のステップ
- 関数イメージを Cloud Run にデプロイする。
- 環境変数を設定する。
- ビルドイメージを構成する。
- キャッシュ イメージを使用してビルドを高速化する。