Kurzanleitung: Cloud Run-Funktion mit der gcloud CLI bereitstellen

Auf dieser Seite wird gezeigt, wie Sie eine HTTP-Cloud Run Functions-Funktion mit der gcloud CLI bereitstellen.

Hinweise

  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. Install the Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Create or select 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Wenn Sie für diese Anleitung ein vorhandenes Projekt verwenden, prüfen Sie, ob Sie die erforderlichen Berechtigungen haben. Wenn Sie ein neues Projekt erstellt haben, haben Sie bereits die erforderlichen Berechtigungen.

  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the Artifact Registry, Cloud Build, Cloud Run Admin API, and Cloud Logging APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com run.googleapis.com logging.googleapis.com
  9. Install the Google Cloud CLI.

  10. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  11. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Create or select 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  13. Wenn Sie für diese Anleitung ein vorhandenes Projekt verwenden, prüfen Sie, ob Sie die erforderlichen Berechtigungen haben. Wenn Sie ein neues Projekt erstellt haben, haben Sie bereits die erforderlichen Berechtigungen.

  14. Verify that billing is enabled for your Google Cloud project.

  15. Enable the Artifact Registry, Cloud Build, Cloud Run Admin API, and Cloud Logging APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com run.googleapis.com logging.googleapis.com
  16. So legen Sie das Standardprojekt für Ihren Cloud Run-Dienst fest:
     gcloud config set project PROJECT_ID
    Ersetzen Sie PROJECT_ID durch den Namen des Projekts, das Sie für diese Kurzanleitung erstellt haben.
  17. Wenn Sie einer Domaineinschränkung zur Organisation nicht eingeschränkter Aufrufe für Ihr Projekt unterliegen, müssen Sie auf Ihren bereitgestellten Dienst zugreifen, wie unter Private Dienste testen beschrieben.

  18. Cloud Run-Preise ansehen oder Kosten mit dem Preisrechner schätzen
  19. Erforderliche Rollen

    Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Kurzanleitung benötigen:

    Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

    Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

    Cloud Build-Dienstkonto Zugriff auf Ihr Projekt gewähren

    Cloud Build verwendet automatisch das Compute Engine-Standarddienstkonto als Standard-Cloud Build-Dienstkonto, um Ihren Quellcode und Ihre Cloud Run-Ressource zu erstellen, sofern Sie dieses Verhalten nicht überschreiben.

    Damit Cloud Build Ihre Quellen erstellen kann, weisen Sie dem Cloud Build-Dienstkonto die Rolle Cloud Run Builder (roles/run.builder) für Ihr Projekt zu:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \
        --role=roles/run.builder

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID und SERVICE_ACCOUNT_EMAIL_ADDRESS durch die E-Mail-Adresse des Cloud Build-Dienstkontos. Google CloudWenn Sie das Compute Engine-Standarddienstkonto als Cloud Build-Dienstkonto verwenden, verwenden Sie das folgende Format für die E-Mail-Adresse des Dienstkontos:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Ersetzen Sie PROJECT_NUMBER durch die Google CloudProjektnummer.

    Eine detaillierte Anleitung zum Ermitteln der Projekt-ID und der Projektnummer finden Sie unter Projekte erstellen und verwalten.

    Es dauert einige Minuten, bis die Zuweisung der Rolle „Cloud Run Builder“ übertragen wurde.

    Beispielfunktion schreiben

    So schreiben Sie eine Bewerbung:

    Node.js

    1. Erstellen Sie ein neues Verzeichnis mit dem Namen helloworld und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

         mkdir helloworld
         cd helloworld
      

    2. Erstellen Sie im Verzeichnis helloworld eine package.json-Datei, um Node.js-Abhängigkeiten anzugeben:

      {
        "name": "nodejs-docs-samples-functions-hello-world-get",
        "version": "0.0.1",
        "private": true,
        "license": "Apache-2.0",
        "author": "Google Inc.",
        "repository": {
          "type": "git",
          "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git"
        },
        "engines": {
          "node": ">=16.0.0"
        },
        "scripts": {
          "test": "c8 mocha -p -j 2 test/*.test.js --timeout=6000 --exit"
        },
        "dependencies": {
          "@google-cloud/functions-framework": "^3.1.0"
        },
        "devDependencies": {
          "c8": "^10.0.0",
          "gaxios": "^6.0.0",
          "mocha": "^10.0.0",
          "wait-port": "^1.0.4"
        }
      }
      
    3. Erstellen Sie im Verzeichnis helloworld eine index.js-Datei mit dem folgenden Node.js-Beispiel:

      const functions = require('@google-cloud/functions-framework');
      
      // Register an HTTP function with the Functions Framework that will be executed
      // when you make an HTTP request to the deployed function's endpoint.
      functions.http('helloGET', (req, res) => {
        res.send('Hello World!');
      });

    Python

    1. Erstellen Sie ein neues Verzeichnis mit dem Namen helloworld und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

         mkdir helloworld
         cd helloworld
      

    2. Erstellen Sie im Verzeichnis helloworld eine requirements.txt-Datei, um Python-Abhängigkeiten anzugeben:

      functions-framework==3.9.2
      flask==3.0.3
      google-cloud-error-reporting==1.11.1
      MarkupSafe==2.1.3
      

      Dadurch werden für das Beispiel erforderliche Pakete hinzugefügt.

    3. Erstellen Sie im Verzeichnis helloworld eine main.py-Datei mit dem folgenden Python-Beispiel:

      import functions_framework
      
      @functions_framework.http
      def hello_get(request):
          """HTTP Cloud Function.
          Args:
              request (flask.Request): The request object.
              <https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data>
          Returns:
              The response text, or any set of values that can be turned into a
              Response object using `make_response`
              <https://flask.palletsprojects.com/en/1.1.x/api/#flask.make_response>.
          Note:
              For more information on how Flask integrates with Cloud
              Functions, see the `Writing HTTP functions` page.
              <https://cloud.google.com/functions/docs/writing/http#http_frameworks>
          """
          return "Hello World!"
      
      

    Go

    1. Erstellen Sie ein neues Verzeichnis mit dem Namen helloworld und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

         mkdir helloworld
         cd helloworld
      

    2. Erstellen Sie eine go.mod-Datei, um das Go-Modul zu deklarieren:

      module github.com/GoogleCloudPlatform/golang-samples/functions/functionsv2/helloworld
      
      go 1.24.0
      
      require github.com/GoogleCloudPlatform/functions-framework-go v1.8.1
      
      require (
      	github.com/cloudevents/sdk-go/v2 v2.15.2 // indirect
      	github.com/google/go-cmp v0.6.0 // indirect
      	github.com/google/uuid v1.6.0 // indirect
      	github.com/json-iterator/go v1.1.12 // indirect
      	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
      	github.com/modern-go/reflect2 v1.0.2 // indirect
      	github.com/stretchr/testify v1.10.0 // indirect
      	go.uber.org/multierr v1.11.0 // indirect
      	go.uber.org/zap v1.27.0 // indirect
      	golang.org/x/time v0.9.0 // indirect
      )
      
    3. Erstellen Sie im Verzeichnis helloworld eine hello_http.go-Datei mit dem folgenden Go-Codebeispiel:

      
      // Package helloworld provides a set of Cloud Functions samples.
      package helloworld
      
      import (
      	"fmt"
      	"net/http"
      
      	"github.com/GoogleCloudPlatform/functions-framework-go/functions"
      )
      
      func init() {
      	functions.HTTP("HelloGet", helloGet)
      }
      
      // helloGet is an HTTP Cloud Function.
      func helloGet(w http.ResponseWriter, r *http.Request) {
      	fmt.Fprint(w, "Hello, World!")
      }
      

    Java

    1. Erstellen Sie ein neues Verzeichnis mit dem Namen helloworld und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

         mkdir helloworld
         cd helloworld
      

    2. Erstellen Sie die folgende Projektstruktur, die das Quellverzeichnis und die Quelldatei enthält.

      mkdir -p ~/helloworld/src/main/java/functions
      touch ~/helloworld/src/main/java/functions/HelloWorld.java
      
    3. Aktualisieren Sie die Datei HelloWorld.java mit dem folgenden Java-Codebeispiel:

      
      package functions;
      
      import com.google.cloud.functions.HttpFunction;
      import com.google.cloud.functions.HttpRequest;
      import com.google.cloud.functions.HttpResponse;
      import java.io.BufferedWriter;
      import java.io.IOException;
      
      public class HelloWorld implements HttpFunction {
        // Simple function to return "Hello World"
        @Override
        public void service(HttpRequest request, HttpResponse response)
            throws IOException {
          BufferedWriter writer = response.getWriter();
          writer.write("Hello World!");
        }
      }
    4. Erstellen Sie im Verzeichnis helloworld eine pom.xml-Datei und fügen Sie die folgenden Java-Abhängigkeiten hinzu:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <!--
        Copyright 2020 Google LLC
      
        Licensed under the Apache License, Version 2.0 (the "License");
        you may not use this file except in compliance with the License.
        You may obtain a copy of the License at
      
        http://www.apache.org/licenses/LICENSE-2.0
      
        Unless required by applicable law or agreed to in writing, software
        distributed under the License is distributed on an "AS IS" BASIS,
        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        See the License for the specific language governing permissions and
        limitations under the License.
      -->
      
      <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
      
        <groupId>com.example.functions</groupId>
        <artifactId>functions-hello-world</artifactId>
        <version>1.0.0-SNAPSHOT</version>
      
        <parent>
          <groupId>com.google.cloud.samples</groupId>
          <artifactId>shared-configuration</artifactId>
          <version>1.2.0</version>
        </parent>
      
        <dependencyManagement>
          <dependencies>
            <dependency>
              <artifactId>libraries-bom</artifactId>
              <groupId>com.google.cloud</groupId>
              <scope>import</scope>
              <type>pom</type>
              <version>26.32.0</version>
            </dependency>
          </dependencies>
        </dependencyManagement>
      
        <properties>
          <maven.compiler.target>11</maven.compiler.target>
          <maven.compiler.source>11</maven.compiler.source>
        </properties>
      
        <dependencies>
          <!-- Required for Function primitives -->
          <dependency>
            <groupId>com.google.cloud.functions</groupId>
            <artifactId>functions-framework-api</artifactId>
            <version>1.1.0</version>
            <scope>provided</scope>
          </dependency>
      
          <!-- The following dependencies are only required for testing -->
          <dependency>
            <groupId>com.google.truth</groupId>
            <artifactId>truth</artifactId>
            <version>1.4.0</version>
            <scope>test</scope>
          </dependency>
          <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava-testlib</artifactId>
            <scope>test</scope>
          </dependency>
          <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>5.10.0</version>
            <scope>test</scope>
          </dependency>
        </dependencies>
      
        <build>
          <plugins>
            <plugin>
              <!--
                Google Cloud Functions Framework Maven plugin
      
                This plugin allows you to run Cloud Functions Java code
                locally. Use the following terminal command to run a
                given function locally:
      
                mvn function:run -Drun.functionTarget=your.package.yourFunction
              -->
              <groupId>com.google.cloud.functions</groupId>
              <artifactId>function-maven-plugin</artifactId>
              <version>0.11.0</version>
              <configuration>
                <functionTarget>functions.HelloWorld</functionTarget>
              </configuration>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <!-- version 3.0.0-M4 does not load JUnit5 correctly -->
              <!-- see https://issues.apache.org/jira/browse/SUREFIRE-1750 -->
              <version>3.2.5</version>
              <configuration>
                <includes>
                  <include>**/*Test.java</include>
                </includes>
                <skipTests>${skipTests}</skipTests>
                <reportNameSuffix>sponge_log</reportNameSuffix>
                <trimStackTrace>false</trimStackTrace>
              </configuration>
            </plugin>
          </plugins>
        </build>
      </project>
      

    Ruby

    1. Erstellen Sie ein neues Verzeichnis mit dem Namen helloworld und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

         mkdir helloworld
         cd helloworld
      

    2. Erstellen Sie eine Datei mit dem Namen app.rb und fügen Sie den folgenden Code in diese ein:

      require "functions_framework"
      
      FunctionsFramework.http "hello_get" do |_request|
        # The request parameter is a Rack::Request object.
        # See https://www.rubydoc.info/gems/rack/Rack/Request
      
        # Return the response body as a string.
        # You can also return a Rack::Response object, a Rack response array, or
        # a hash which will be JSON-encoded into a response.
        "Hello World!"
      end
    3. Erstellen Sie eine Datei namens Gemfile und kopieren Sie Folgendes hinein:

      source "https://rubygems.org"
      
      gem "base64", "~> 0.2"
      gem "functions_framework", "~> 1.4"
    4. Wenn Bundler 2.0 oder höher nicht installiert ist, installieren Sie Bundler.

    5. Erstellen Sie mit diesem Befehl eine Gemfile.lock-Datei:

      bundle install
      

    PHP

    1. Erstellen Sie ein neues Verzeichnis mit dem Namen helloworld und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

         mkdir helloworld
         cd helloworld
      

    2. Erstellen Sie eine Datei mit dem Namen index.php und fügen Sie den folgenden Code in diese ein:

      
      use Psr\Http\Message\ServerRequestInterface;
      
      function helloGet(ServerRequestInterface $request): string
      {
          return 'Hello, World!' . PHP_EOL;
      }
      
    3. Wenn Sie Cloud Shell nicht verwenden, erstellen Sie eine composer.json-Datei und fügen Sie den folgenden Code ein:

      {
          "require": {
              "google/cloud-functions-framework": "^1.0"
          },
          "scripts": {
              "start": [
                 "Composer\\Config::disableProcessTimeout",
                 "FUNCTION_TARGET=helloGet php -S localhost:${PORT:-8080} vendor/google/cloud-functions-framework/router.php"
              ]
          }
      }
      

    .NET

    1. Installieren Sie das .NET SDK.

    2. Erstellen Sie über die Konsole mit dem Befehl "dotnet" ein neues, leeres Webprojekt.

      dotnet new web -o helloworld-csharp
      
    3. Ändern Sie das Verzeichnis in helloworld-csharp:

    4. Ersetzen Sie den Beispielcode in der Projektdatei helloworld-csharp.csproj durch Folgendes:

      <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
          <OutputType>Exe</OutputType>
          <TargetFramework>net8.0</TargetFramework>
        </PropertyGroup>
      
        <ItemGroup>
          <PackageReference Include="Google.Cloud.Functions.Hosting" Version="3.0.1" />
        </ItemGroup>
      </Project>
    5. Ersetzen Sie den Beispielcode in der Datei Program.cs durch Folgendes:

      
      using Google.Cloud.Functions.Framework;
      using Microsoft.AspNetCore.Http;
      using System.Threading.Tasks;
      
      namespace HelloWorld;
      
      public class Function : IHttpFunction
      {
          public async Task HandleAsync(HttpContext context)
          {
              await context.Response.WriteAsync("Hello World!", context.RequestAborted);
          }
      }

    Funktion implementieren

    So stellen Sie Ihre Cloud Run-Funktion bereit:

    1. Stellen Sie die Funktion bereit, indem Sie den folgenden Befehl in dem Verzeichnis ausführen, das den Beispielcode enthält:

      Node.js

      gcloud run deploy nodejs-http-function \
            --source . \
            --function helloGET \
            --base-image nodejs24 \
            --region REGION \
            --allow-unauthenticated
      

      Ersetzen Sie REGION durch die Google Cloud Region des Dienstes, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1

      Python

      gcloud run deploy python-http-function \
            --source . \
            --function hello_get \
            --base-image python313 \
            --region REGION \
            --allow-unauthenticated
      

      Ersetzen Sie REGION durch die Google Cloud Region des Dienstes, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1

      Go

      gcloud run deploy go-http-function \
             --source . \
             --function HelloGet \
             --base-image go125 \
             --region REGION \
             --allow-unauthenticated
      

      Ersetzen Sie REGION durch die Google Cloud Region des Dienstes, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1

      Java

      Führen Sie den folgenden Befehl in dem Verzeichnis aus, das die Datei pom.xml enthält:

      gcloud run deploy java-http-function \
             --source . \
             --function functions.HelloWorld \
             --base-image java21 \
             --region REGION \
             --allow-unauthenticated
      

      Ersetzen Sie REGION durch die Google Cloud Region des Dienstes, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1

      Ruby

      gcloud run deploy ruby-http-function \
             --source . \
             --function hello_get \
             --base-image ruby34 \
             --region REGION \
             --allow-unauthenticated
      

      Ersetzen Sie REGION durch die Google Cloud Region des Dienstes, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1

      PHP

      gcloud run deploy php-http-function \
             --source . \
             --function helloGet \
             --base-image php84 \
             --region REGION \
             --allow-unauthenticated
      

      Ersetzen Sie REGION durch die Google Cloud Region des Dienstes, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1

      .NET

      gcloud run deploy csharp-http-function \
            --source . \
            --function HelloWorld.Function \
            --base-image dotnet8 \
            --region REGION \
            --allow-unauthenticated
      

      Ersetzen Sie REGION durch die Google Cloud Region des Dienstes, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1

    2. Wenn die Bereitstellung abgeschlossen ist, wird in der Google Cloud CLI eine URL angezeigt, unter der der Dienst ausgeführt wird. Öffnen Sie die URL in Ihrem Browser, um die Ausgabe Ihrer Funktion zu sehen.

    Bereinigen

    Löschen Sie alle Ressourcen, die Sie mit dieser Kurzanleitung bereitgestellt haben, um zusätzliche Gebühren für Ihr Google Cloud -Konto zu vermeiden.

    Repository löschen

    Für Cloud Run fallen keine Kosten an, wenn Ihr bereitgestellter Dienst nicht verwendet wird. Das Speichern des Container-Images in Artifact Registry ist jedoch möglicherweise kostenpflichtig. Wenn Sie Artifact Registry-Repositories löschen möchten, folgen Sie der Anleitung unter Repositories löschen in der Artifact Registry-Dokumentation.

    Service löschen

    Für Cloud Run-Dienste fallen erst Kosten an, wenn sie Anfragen empfangen. So löschen Sie Ihren Cloud Run-Dienst:

    Console

    So löschen Sie einen Dienst:

    1. Rufen Sie in der Google Cloud Console die Seite Cloud Run-Dienste auf:

      Zu Cloud Run

    2. Klicken Sie in der Übersicht das Kästchen des zu löschenden Dienstes an.

    3. Klicken Sie auf Löschen. Dadurch werden alle Überarbeitungen des Dienstes gelöscht.

    gcloud

    Führen Sie den folgenden Befehl aus, um einen Dienst zu löschen:

    gcloud run services delete SERVICE --region REGION

    Ersetzen Sie Folgendes:

    • SERVICE: Name Ihres Dienstes.
    • REGION: Google Cloud Region des Dienstes.

    Testprojekt löschen

    Wenn Sie Ihr Google Cloud -Projekt löschen, wird die Abrechnung für alle Ressourcen in diesem Projekt beendet. So geben Sie alle Google Cloud Ressourcen in Ihrem Projekt frei:

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Nächste Schritte