Verwenden Sie Java 11 mit Google Cloud-Funktionen

Einführung

Im Mai 2020 unterstützten Google Cloud Functions Java 11 in der Beta. Hier In diesem Artikel wird erläutert, wie eine Java 11-Anwendung bereitgestellt wird, die durch eine HTTP-Anforderung ausgelöst wird.

Cloud Shell wird für den Vorgang verwendet.

Vorbereitung für Maven

Bereiten Sie zunächst die für Maven erforderliche POM-Datei vor. Abhängigkeiten von Funktionen-Framework-API erforderlich, um mit Cloud-Funktionen ausgeführt zu werden Beschreiben des Plug-Ins, das für die lokale Ausführung erforderlich ist.

pom.xml


<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>example</groupId>
  <artifactId>functions-hello-world</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <properties>
    <maven.compiler.target>11</maven.compiler.target>
    <maven.compiler.source>11</maven.compiler.source>
  </properties>

  <dependencies>
    <!--Setzen Sie das Functions Framework für Java als Abhängigkeit-->
    <dependency>
      <groupId>com.google.cloud.functions</groupId>
      <artifactId>functions-framework-api</artifactId>
      <version>1.0.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <!--Fügen Sie das Plug-In Function Maven hinzu, um die lokale Ausführung zu ermöglichen-->
        <groupId>com.google.cloud.functions</groupId>
        <artifactId>function-maven-plugin</artifactId>
        <version>0.9.3</version>
        <configuration>
          <functionTarget>CloudFunctionsForJava</functionTarget>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Programm

Bereiten Sie als nächstes das Programm vor. Wenn Sie eine HTTP-Anforderung als Auslöser verwenden, wird die Funktionen-Framework-API "com.google.cloud.functions.HttpFunction" verwendet Sie müssen die Schnittstelle implementieren. Die einzige zu implementierende Methode ist die "service" -Methode und beschreibt den Inhalt, den Sie in dieser Methode verarbeiten möchten.

In diesem Artikel handelt es sich um eine Anwendung, die das Ergebnis zurückgibt, wenn meine Benutzer-ID mit der Qiita-API erreicht wird. Ich habe die Typinferenz für lokale Variablen so oft wie möglich verwendet, damit sie wie Java11 aussieht, und Anforderungen mit "java.net.http.HttpRequest" übersprungen.

Die Anforderungsparameter beim Aufrufen von Cloud-Funktionen werden in "com.google.cloud.functions.HttpRequest" gespeichert, was das Argument der "service" -Methode ist. In ähnlicher Weise können Sie die Antwort an den Aufrufer zurückgeben, indem Sie den Wert in den Parameter "com.google.cloud.functions.HttpResponse" schreiben.

CloudFunctionsForJava.java


import com.google.cloud.functions.HttpFunction;
import com.google.cloud.functions.HttpRequest;
import com.google.cloud.functions.HttpResponse;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;

public class CloudFunctionsForJava implements HttpFunction {

  @Override
  public void service(HttpRequest request, HttpResponse response)
      throws IOException, InterruptedException {
    
    //Bereit zum Aufrufen der Qiita-API
    var httpClient = HttpClient.newHttpClient();
    var requestFromGCF = java.net.http.HttpRequest
            .newBuilder(URI.create("https://qiita.com/api/v2/users/shuichiro"))
            .header("Content-Type", "application/json; charset=utf-8")
            .build();

    //Einen Anruf tätigen
    var responseFromQiita
        = httpClient.send(requestFromGCF,java.net.http.HttpResponse.BodyHandlers.ofString());
    
    //Content-Geben Sie die Einstellung ein, um Japanisch anzuzeigen
    response.setContentType("application/json; charset=utf-8");

    //Der von der Qiita-API erhaltene Wert wird an die Person gesendet, die die Cloud-Funktion aufgerufen hat.
    var writer = response.getWriter();
    writer.write(responseFromQiita.body());
  }
}

Der Speicherort des erstellten Programms und des POM ist wie folgt.

$ tree
.
├── pom.xml
└── src
    └── main
        └── java
            └── CloudFunctionsForJava.java

Prüfung

Zuerst kompilieren.

$ mvn compile

Es wird einige Zeit dauern, aber wenn Sie "BUILD SUCCESS" sagen, sind Sie erfolgreich. Führen Sie es nach dem Kompilieren in Ihrer lokalen Umgebung aus.

$ mvn function:run

Wenn Sie es ausführen, wird das Startprotokoll im Terminal angezeigt. Öffnen Sie also ein anderes Terminal und führen Sie Curl aus.

$ curl localhost:8080
{"description":~~~ Abkürzung ~~~~~"website_url":""}

Sie können sehen, dass das Ergebnis der Qiita-API angezeigt wird.

Bereitstellen

Schließlich tatsächlich für Cloud-Funktionen bereitstellen. Stellen Sie mit dem folgenden Befehl bereit. Der Trigger ist eine HTTP-Anforderung und kann ohne Authentifizierung ausgeführt werden.

$ gcloud functions deploy java-function --entry-point CloudFunctionsForJava --runtime java11 --trigger-http --memory 512MB --allow-unauthenticated

Nach einigen Minuten ist die Bereitstellung abgeschlossen. Klicken Sie daher auf die zum Zeitpunkt der Bereitstellung angezeigte URL.

$ curl https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/java-function 
{"description":~~~ Abkürzung ~~~~~"website_url":""}

Ich konnte bestätigen, dass die mit Java 11 erstellte Anwendung für Cloud-Funktionen bereitgestellt werden kann.

Recommended Posts

Verwenden Sie Java 11 mit Google Cloud-Funktionen
Erstellen Sie Java-Anwendungen mit IBM Cloud-Funktionen
Verwenden Sie Lambda-Ebenen mit Java
Verwenden Sie Thymeleaf mit Azure-Funktionen
Verwenden Sie Ruby mit Google Colab
Verwenden Sie SpatiaLite mit Java / JDBC
Verwenden Sie Java mit MSYS und Cygwin
Verwenden Sie Microsoft Graph mit Standard-Java
Verwenden Sie Azure Bing SpellCheck mit Java
Verwenden Sie JDBC mit Java und Scala.
[Google Cloud] Erste Schritte mit Docker
Arbeiten Sie mit Google-Tabellen aus Java
Google Cloud Platform mit Spring Boot 2.0.0
[JaCoCo (Java Code Coverage)] Verwendung mit NetBeans
Google Java-Format
[Java] Verwenden Sie Collectors.collectingAndThen
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
Verwendung des Java-Frameworks mit AWS Lambda! ??
Ich möchte Java8 für jeden mit Index verwenden
Verwendung der Java-API mit Lambda-Ausdrücken
Verwenden Sie Matplotlib aus Java oder Scala mit Matplotlib4j
[Java] Holen Sie sich Bilder mit der Google Custom Search API
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
Verwendung des LOG Java Producer von Alibaba Cloud
Kommen Sie mit Java-Containern in Cloud Run zurecht
[Android] [Java] Laden Sie Bilder auf GCS (Google Cloud Storage) mit Stream mit Glide herunter
Verwenden Sie die schnelle Mapping-Bibliothek MapStruct mit Lombok und Java 11
Aufrufen von Funktionen in großen Mengen mit Java Reflection
Verwenden Sie ProGuard mit Gradle
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Azure funktioniert in Java
Verwenden Sie Puphpeteer mit Docker
Verwenden Sie die aggregierte Abfrage (Anzahl) mit dem Azure CosmosDB Java SDK
Bequemer Download mit JAVA
Verwenden Sie XVim2 mit Xcode 12.0.1
Verwenden von CentOS mit LXD
Spielen Sie mit Java-Funktionsknoten, die Java mit Node-RED verwenden können
Schalten Sie Java mit direnv
Verwenden Sie OpenCV mit Java
Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren
Verwenden Sie Webmock mit Rspec
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Verwenden Sie java1.7 (zulu7) in einem bestimmten Verzeichnis mit jenv
Verwenden Sie WebJars mit Gradle
Erstellen Sie Java mit Wercker
Verwenden Sie PreparedStatement in Java
Verwenden Sie jlink mit gradle
Serverloses Java EE beginnend mit Quarkus und Cloud Run
Endian-Konvertierung mit JAVA
Verwenden Sie Java, das in Android Studio enthalten ist, um React Native zu erstellen
Führen Sie die Analyse mit OpenJDK11 Java Flight Recorder + Google Kubernetes Engine aus
Ersteinstellungsmethode bei der Erstellung von Alexa Skill mit JAVA (Cloud 9)
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
(Java) Einfache BDD mit Spektrum?
Erstellen Sie mit Gradle ein Java-Multiprojekt
Erste Schritte mit Java Collection
Verwenden Sie GDAL mit Python mit Docker