Es gibt zwei Methoden zum Erstellen von Container-Images mit Buildpacks:
- Erstellen Sie einen lokalen Build mit der
pack
-Befehlszeile, um Ihre Funktion lokal zu testen und vor der Bereitstellung schnell Prototypen für Änderungen zu erstellen. - Build per Remotezugriff ausführen mit Cloud Build. Das Erstellen mit Cloud Build ist nützlich für Funktionen, die ressourcenintensive Build-Prozesse haben und kann auch zum Schutz Ihrer Softwarelieferkette beitragen.
Projekt zum Erstellen von Funktionen konfigurieren
So erstellen Sie Funktionen mit Buildpacks:
Fügen Sie die Functions Framework-Bibliothek ein.
Legen Sie die Umgebungsvariable
GOOGLE_FUNCTION_TARGET
auf den Namen der Funktion fest, die Sie als Einstiegspunkt verwenden. Dazu müssen Sie eineproject.toml
in denselben Ordner wie Ihren Quellcode einfügen. Die Dateiproject.toml
muss die folgende Konfiguration haben:
[[build.env]]
name = "GOOGLE_FUNCTION_TARGET"
value = "ENTRY_POINT"
Ersetzen Sie ENTRY_POINT durch die Funktionsmethode.
Weitere Informationen zur Verwendung von Umgebungsvariablen mit Cloud Run Functions finden Sie unter Dienste für Cloud Run Functions konfigurieren.
Lokale Builds
Pack ist ein CLI-Tool, das vom CNB-Projekt verwaltet wird, um die Verwendung von Buildpacks zu unterstützen. Verwenden Sie die pack
-Befehlszeile, um Ihre Funktionen lokal in einem Container-Image zu erstellen.
Vorbereitung
- Installieren Sie die Docker Community Edition (CE) auf Ihrer Workstation. Docker wird von
pack
als OCI-Image-Builder verwendet. - Installieren Sie die Pack-Befehlszeile.
- Installieren Sie das Tool Git Source Control, um die Beispielanwendung von GitHub herunterzuladen.
Funktion lokal erstellen
Verwenden Sie den pack build
-Befehl und geben Sie den Standard-Builder --builder=gcr.io/buildpacks/builder
an, um Ihre Container-Images lokal zu erstellen.
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
Ersetzen Sie IMAGE_NAME durch den Namen Ihres Container-Images.
Sie können das Container-Image anpassen. Dazu erweitern Sie die Build- und Ausführungs-Images.
Beispielfunktion lokal erstellen
Die folgenden Beispiele zeigen, wie Sie ein Beispiel lokal erstellen.
- Klonen Sie das Beispiel-Repository auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Wechseln Sie in das Verzeichnis, das den Workflows-Beispielcode enthält:
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
- Erstellen Sie die Beispielfunktion mit
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
- Führen Sie das Image mit
docker
aus: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
- Um die ausgeführte Funktion auszuführen, rufen Sie localhost:8080 auf.
Remote-Builds
Verwenden Sie Cloud Build, um Ihre Funktion in einem Container-Image zu erstellen, und Artifact Registry als Container-Repository, von dem aus Sie die einzelnen Images speichern und bereitstellen.
Hinweise
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
- Prüfen Sie, ob Ihr Google Cloud -Projekt Zugriff auf ein Container-Image-Repository hat.
So konfigurieren Sie den Zugriff auf ein Docker-Repository in Artifact Registry:
- Erstellen Sie ein neues Docker-Repository am selben Speicherort wie Ihr Google Cloud -Projekt.
Ersetzen Sie:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
REPO_NAME
durch den Namen, den Sie für Ihr Docker-Repository wählen.REGION
durch einen Standort direkt im oder maximal nahe am Google Cloud -Projekt.DESCRIPTION
mit einer Beschreibung Ihrer Wahl.
Beispiel: Um ein
docker
-Repository inus-west2
mit der Beschreibung "Docker repository" zu erstellen, führen Sie folgenden Befehl aus:gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- Prüfen Sie, ob das Repository erstellt wurde:
gcloud artifacts repositories list
Der Name, den Sie für Ihr Docker-Repository wählen, sollte in der Liste angezeigt werden.
- Erstellen Sie ein neues Docker-Repository am selben Speicherort wie Ihr Google Cloud -Projekt.
LOCATION
durch den Namen der Region Ihres Container-Repositorys, z. B.us-west2
PROJECT_ID
durch die ID Ihres Google Cloud -Projekts.REPO_NAME
durch den Namen des Docker-Repositorys.IMAGE_NAME
durch den Namen Ihres Container-Images- Erstellen Sie eine YAML-Datei mit dem Namen
cloudbuild.yaml
, die den URI Ihres Container-Image-Repositorys enthält. LOCATION
durch den Namen der Region Ihres Container-Repositorys, z. B.us-west2
.PROJECT_ID
durch die ID Ihres Google Cloud -Projekts.REPO_NAME
durch den Namen des Docker-Repositorys.IMAGE_NAME
durch den Namen Ihres Container-ImagesErstellen Sie die Anwendung.
Wenn Sie Ihre Konfigurationsdatei
cloudbuild.yaml
genannt haben, können Sie folgenden Befehl ausführen:gcloud builds submit .
- Klonen Sie das Beispiel-Repository auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Wechseln Sie in das Verzeichnis, das den Workflows-Beispielcode enthält:
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
- Verwenden Sie
gcloud
, um den Anwendungsquellcode an Cloud Build zu senden: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
Ersetzen Sie:
LOCATION
durch den Namen der Region Ihres Container-Repositorys. Beispiel:us-west2-docker.pkg.dev
PROJECT_ID
durch die ID Ihres Google Cloud -Projekts.REPO_NAME
durch den Namen des Docker-Repositorys.
-
Prüfen Sie, ob die Beispielfunktion erfolgreich in
REPO_NAME
veröffentlicht wurde:gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
Ersetzen Sie:
LOCATION
durch den Namen der Region Ihres Container-Repositorys, z. B.us-west2
.PROJECT_ID
durch die ID Ihres Google Cloud -Projekts.REPO_NAME
durch den Namen des Docker-Repositorys.
- Stellen Sie das Funktions-Image in Cloud Run bereit.
- Umgebungsvariablen festlegen
- Build-Images konfigurieren
- Builds mit Cache-Images beschleunigen
Funktion per Remotezugriff erstellen
Mit dem gcloud builds submit
-Befehl können Sie Ihr Container-Image erstellen und in Ihr Repository hochladen.
Sie können das Container-Image entweder im Befehl selbst oder in einer Konfigurationsdatei angeben.
Mit Befehl erstellen
Für die Erstellung ohne Konfigurationsdatei geben Sie das image
-Flag an:
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Ersetzen Sie:
Beispiel:
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo
Mit Konfigurationsdateien erstellen
Sie können eine Konfigurationsdatei verwenden, um die Konfigurationsdetails für Ihr Image-Repository zu definieren und so den Build-Befehl zu vereinfachen. Die Konfigurationsdatei verwendet das YAML-Dateiformat und muss einen Build-Schritt enthalten, der die pack
-Befehlszeile verwendet.
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
Ersetzen Sie:
Beispiel: Beispiel-Funktion per Remotezugriff erstellen
In folgenden Beispielen wird gezeigt, wie Sie ein Beispiel für einen Remote-Build erstellen und dann prüfen, ob das Container-Image per Push in Ihr Repository in Artifact Registry übertragen wurde.