Utiliser Java 11 avec Google Cloud Functions

introduction

En mai 2020, Google Cloud Functions a pris en charge Java 11 en version bêta. Ici Cet article explique comment déployer réellement une application Java 11 déclenchée par une requête HTTP.

Cloud Shell est utilisé pour l'opération.

Se préparer pour Maven

Tout d'abord, préparez le fichier pom requis pour Maven. Dépendances sur functions-framework-api requises pour s'exécuter avec Cloud Functions Décrivez le plug-in requis pour s'exécuter localement.

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>
    <!--Mettre Functions Framework for Java en tant que dépendance-->
    <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>
        <!--Incluez le plug-in Function Maven pour permettre une exécution locale-->
        <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>

programme

Ensuite, préparez le programme. Lors de l'utilisation d'une requête HTTP comme déclencheur, la fonction functions-framework-api com.google.cloud.functions.HttpFunction Vous devez implémenter l'interface. La seule méthode à implémenter est la méthode service, et décrivez le contenu que vous souhaitez traiter dans cette méthode.

Dans cet article, c'est une application qui retourne le résultat en frappant mon ID utilisateur avec l'API Qiita. J'ai utilisé autant que possible l'inférence de type pour les variables locales pour le faire ressembler à Java11, et j'ai ignoré les requêtes en utilisant java.net.http.HttpRequest.

Les paramètres de requête lors de l'appel de Cloud Functions sont stockés dans com.google.cloud.functions.HttpRequest, qui est l'argument de la méthode service. De même, en écrivant la valeur dans le paramètre com.google.cloud.functions.HttpResponse, vous pouvez renvoyer la réponse à l'appelant.

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 {
    
    //Prêt à appeler l'API Qiita
    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();

    //Passer un coup de téléphone
    var responseFromQiita
        = httpClient.send(requestFromGCF,java.net.http.HttpResponse.BodyHandlers.ofString());
    
    //Content-Paramètre de type, pour afficher le japonais
    response.setContentType("application/json; charset=utf-8");

    //La valeur obtenue à partir de l'API Qiita est envoyée à la personne qui a appelé la fonction Cloud.
    var writer = response.getWriter();
    writer.write(responseFromQiita.body());
  }
}

L'emplacement du programme créé et du pom est le suivant.

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

tester

Tout d'abord, compilez.

$ mvn compile

Cela prendra du temps, mais si vous dites «CONSTRUIRE LE SUCCÈS», vous réussissez. Une fois compilé, exécutez-le dans votre environnement local.

$ mvn function:run

Lorsque vous l'exécutez, le journal de démarrage sera affiché dans le terminal, alors ouvrez un autre terminal et exécutez curl.

$ curl localhost:8080
{"description":~~~ Abréviation ~~~~~"website_url":""}

Vous pouvez voir que le résultat de l'API Qiita est affiché.

Déployer

Enfin, déployez-le sur Cloud Functions. Déployez avec la commande suivante. Le déclencheur est une requête HTTP et il peut être exécuté sans authentification.

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

Après quelques minutes, le déploiement sera terminé, alors cliquez sur l'URL affichée au moment du déploiement.

$ curl https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/java-function 
{"description":~~~ Abréviation ~~~~~"website_url":""}

J'ai pu confirmer que l'application créée avec Java 11 pouvait être déployée sur Cloud Functions.

Recommended Posts

Utiliser Java 11 avec Google Cloud Functions
Créer des applications Java avec IBM Cloud Functions
Utiliser des couches Lambda avec Java
Utiliser Thymeleaf avec Azure Functions
Utilisez Ruby avec Google Colab
Utiliser SpatiaLite avec Java / JDBC
Utiliser java avec MSYS et Cygwin
Utiliser Microsoft Graph avec Java standard
Utiliser Azure Bing SpellCheck avec Java
Utilisez JDBC avec Java et Scala.
[Google Cloud] Premiers pas avec Docker
Travailler avec des feuilles de calcul Google à partir de Java
Google Cloud Platform avec Spring Boot 2.0.0
[JaCoCo (Java Code Coverage)] Utilisation avec NetBeans
format google java
[Java] Utilisez Collectors.collectingAndThen
Essayez d'utiliser Firebase Cloud Functions sur Android (Java)
Comment utiliser le framework Java avec AWS Lambda! ??
Je veux utiliser java8 forEach avec index
Comment utiliser l'API Java avec des expressions lambda
Utilisez Matplotlib depuis Java ou Scala avec Matplotlib4j
[Java] Obtenez des images avec l'API Google Custom Search
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
Comment utiliser LOG Java Producer d'Alibaba Cloud
S'entendre avec les conteneurs Java dans Cloud Run
[Android] [Java] Télécharger des images sur GCS (Google Cloud Storage) avec Stream à l'aide de Glide
Utilisez Fast Mapping Livery MapStruct avec Lombok et Java 11
Comment appeler des fonctions en bloc avec la réflexion Java
Utiliser ProGuard avec Gradle
Changer de siège avec Java
Installez Java avec Ansible
Fonctions Azure en Java
Utiliser Puphpeteer avec Docker
Utiliser la requête agrégée (nombre) avec le SDK Java Azure CosmosDB
Téléchargement confortable avec JAVA
Utilisez XVim2 avec Xcode 12.0.1
Utilisation de CentOS avec LXD
Jouez avec les nœuds de fonction Java qui peuvent utiliser Java avec Node-RED
Changer java avec direnv
Utiliser OpenCV avec Java
Résolution du problème lorsque Azure Functions a cessé de fonctionner en Java
Utiliser Webmock avec Rspec
Téléchargement Java avec Ansible
Raclons avec Java! !!
Utilisez java1.7 (zulu7) dans un répertoire spécifique avec jenv
Utiliser les WebJars avec Gradle
Construire Java avec Wercker
Utiliser PreparedStatement en Java
Utilisez jlink avec gradle
Java EE sans serveur à partir de Quarkus et Cloud Run
Conversion Endian avec JAVA
Utilisez Java inclus avec Android Studio pour créer React Native
Exécuter l'analyse avec OpenJDK11 Java Flight Recorder + Google Kubernetes Engine
Méthode de configuration initiale lors de la création d'Alexa Skill avec JAVA (Cloud 9)
Je veux implémenter diverses fonctions avec kotlin et java!
(Java) BDD facile avec Spectrum?
Créer un multi-projet Java avec Gradle
Premiers pas avec Java Collection
Utiliser GDAL avec Python avec Docker