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

このガイドでは、関数のソースコードで Buildpack を使用してコンテナ イメージを作成する方法について説明します。たとえば、Buildpack を使用して Cloud Run にデプロイする Cloud Functions の関数を作成します。

Buildpack を使用してコンテナ イメージをビルドする方法は 2 つあります。

  • pack CLI を使用してローカルでビルドし、関数をローカルでテストします。また、デプロイ前に変更のプロトタイプを迅速に作成します。
  • Cloud Build を使用してリモートでビルドします。Cloud Build を使用したビルドは、リソースを大量に消費するビルドプロセスを含む関数に有用です。また、ソフトウェア サプライ チェーンの保護にも役立ちます。

関数を作成するようにプロジェクトを構成する

Buildpack を使用して関数を作成するには、Functions Framework ライブラリを使用します。GOOGLE_FUNCTION_TARGET 環境変数に、エントリポイントとして使用する関数の名前を設定する必要があります。Cloud Functions で環境変数を使用する方法については、Cloud Functions サービスを構成するをご覧ください。

ローカルビルド

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. アプリケーションのサンプルコードが含まれているディレクトリに移動します。

    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. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud Build and Artifact Registry API を有効にします。

    API を有効にする

  5. Google Cloud CLI をインストールします。
  6. gcloud CLI を初期化するには:

    gcloud init
  7. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  8. Google Cloud プロジェクトで課金が有効になっていることを確認します

  9. Cloud Build and Artifact Registry API を有効にします。

    API を有効にする

  10. Google Cloud CLI をインストールします。
  11. gcloud CLI を初期化するには:

    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 コマンドと 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

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

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

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

    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 リポジトリの名前に置き換えます。

次のステップ