Résolution du problème lorsque Azure Functions a cessé de fonctionner en Java

J'ai pu l'exécuter localement, mais lorsque je l'ai déployé, une erreur s'est produite. Les détails des contre-mesures sont décrits.

** PostScript 6/15 ** Il semble que le plug-in Maven, etc. ait été publié après la rédaction de cet article.

Qu'est-il arrivé

Comme mentionné ci-dessus, cela fonctionne correctement localement à l'aide du plug-in Maven, mais lorsque je le déploie sur Azure et l'exécute, j'obtiens l'erreur suivante:

502-Bad Gateway The specified CGI application encountered an error and the server terminated the process.

Cause

D'après ce qui suit, il semble que l'ancien code ait cessé de fonctionner en raison de la sortie du nouveau Runtime. https://stackoverflow.com/questions/50615746/azure-java-function-502-bad-gateway https://github.com/Azure/app-service-announcements/issues/112

Cela fonctionne localement avec l'ancien Runtime, donc ça va, mais quand je le déploie, il s'exécute sur le nouveau Runtime, donc il semble qu'une erreur s'est produite.

Faire face

J'aimerais le réparer pour qu'il fonctionne avec le nouveau Runtime, mais à partir du 14 juin 2018, je ne peux pas encore gérer cela. En effet, le plugin azure-functions-maven-plugin qui prend en charge cela n'a pas encore été publié.

Par conséquent, nous appliquerons ce qui suit à titre de mesure provisoire.

Spécifiez la version de Runtime

Spécifiez la version d'exécution sur Azure. Ouvrez les «Paramètres d'application» de l'application de fonction à partir du portail Azure. Remplacez FUNCTIONS_EXTENSION_VERSION par 2.0.11776-alpha. (Il devrait être bêta par défaut.)

無題.png

De plus, cette version est valable jusqu'à fin juin.

~~ (Pour référence) ~~ Comment prendre en charge le nouveau Runtime

~~ Maven Plugin n'a pas été publié, mais les autres parties qui doivent être traitées sont les suivantes. De plus, comme ce sera une réponse à moitié terminée, ce sera un environnement qui ne fonctionnera même pas localement. ~~

** PostScript 6/15 ** Le plugin Maven correspondant a été publié, donc le support suivant est OK.

Modifier pom.xml

Il est supposé que le projet a été créé à partir de Maven Archetype, donc si vous le personnalisez, veuillez le lire comme il convient. ~~ De plus, lorsque azure-functions-maven-plugin est publié, il semble nécessaire de modifier la version spécifiée dans la gestion des plugins. ~~

Modifier la dépendance

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-functions-java-core</artifactId>
  <version>1.0.0-beta-3</version>
</dependency>
<dependency>
  <groupId>com.microsoft.azure.functions</groupId>
  <artifactId>azure-functions-java-library</artifactId>
  <version>1.0.0-beta-4</version>
</dependency>

Modifier les paramètres de maven-dependency-plugin

Ici, le paramètre est fait pour ajouter le fichier jar défini par pom au dossier lib. À l'origine, azure-functions-java-core a été défini pour être exclu, alors modifiez-le comme suit pour exclure azure-functions-java-library.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>3.0.2</version>
  <executions>
    <execution>
      <id>copy-dependencies</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
      <configuration>
        <outputDirectory>${stagingDirectory}/lib</outputDirectory>
        <overWriteReleases>false</overWriteReleases>
        <overWriteSnapshots>false</overWriteSnapshots>
        <overWriteIfNewer>true</overWriteIfNewer>
        <includeScope>runtime</includeScope>
        <excludeArtifactIds>azure-functions-java-library</excludeArtifactIds> <!--ici-->
      </configuration>
    </execution>
  </executions>
</plugin>

Modification de la version d'azure-maven-plugin (6/15 postscript)

Changez la version en 1.0.0-beta-2.

<plugin>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-functions-maven-plugin</artifactId>
  <version>1.0.0-beta-2</version> <!--ici-->
</plugin>

Code de correction

Le package a changé et doit être corrigé.

import com.microsoft.azure.serverless.functions.annotation.*;
import com.microsoft.azure.serverless.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

Il semble que le serverless soit parti.

Mettez à niveau votre Runtime local

Quand il s'agissait d'une mise à jour, je ne pouvais pas comprendre la spécification de version, alors je l'ai désinstallée et réinstallée.

npm -g uninstall azure-functions-core-tools
npm -g install azure-functions-core-tools@core

Alors que je pensais écrire cet article, les personnes qui ont récemment commencé à exécuter Azure Functions sur Java ne travaillent même pas localement. (Parce que si vous suivez la procédure, un nouveau Runtime sera installé)

Pour ces personnes, il peut être préférable d'abaisser la version de Runtime et de l'installer.

npm -g uninstall azure-functions-core-tools
npm -g install [email protected]

** PostScript 6/15 ** Depuis la sortie de la version correspondante, je pense qu'il vaut mieux faire des corrections pour prendre en charge le nouveau Runtime au lieu d'abaisser la version de Runtime.

Recommended Posts

Résolution du problème lorsque Azure Functions a cessé de fonctionner en Java
Fonctions Azure en Java
Créer des fonctions Azure en Java
Gérez d'énormes JSON avec Java Lambda
La solution pour NetBeans 8.2 ne fonctionne pas dans l'environnement Java 9
Entraînez-vous à travailler avec des paires de substitution Unicode en Java
Comment appeler des fonctions en bloc avec la réflexion Java
Utiliser Thymeleaf avec Azure Functions
Lombok ne fonctionne pas avec Gradle5
J'ai essayé la métaprogrammation avec Java
Agrégation et analyse de journaux (utilisation d'AWS Athena en Java)
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je veux implémenter diverses fonctions avec kotlin et java!
J'ai envoyé un e-mail en Java
Analyse morphologique en Java avec Kuromoji
J'ai créé un PDF avec Java.
Je ne peux pas créer une classe Java avec un nom spécifique dans IntelliJ
Utiliser Azure Bing SpellCheck avec Java
[Java] N'utilisez pas "+" dans append!
J'ai essayé d'interagir avec Java
Utiliser Java 11 avec Google Cloud Functions
J'ai écrit le théorème de Gordobach en java
Ce que j'ai appris avec Java Gold
J'ai fait une annotation en Java.
J'ai essayé d'utiliser JWT en Java
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Tweak Markdown avec Java flexmark-java
Ce que j'ai appris avec Java Silver
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
J'ai écrit une fonction Lambda en Java et l'ai déployée avec SAM
Je veux ForEach un tableau avec une expression Lambda en Java
J'ai essayé d'utiliser l'API Elasticsearch en Java
Méthode de concurrence en Java avec exemple de base
J'ai essayé le nouveau yuan à Java
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
Lire le fichier xlsx en Java avec Selenium
J'ai fait l'étalonnage de la caméra OpenCV en Java
Diviser une chaîne avec ". (Dot)" en Java
J'ai créé des fonctions d'étape avec AWS CDK.
Obtenez des horodatages avec le SDK Java Azure BlobStorage
[* Java *] J'ai participé au JJUG CCC 2019 Spring
Ne déclarez pas de variables dans List en Java
Créer des applications Java avec IBM Cloud Functions
Dans certains cas, j'ai créé du code Java natif avec GraalVM mais je ne l'ai pas accéléré
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
[Java] Réécrire les fonctions créées par moi-même dans le passé à partir de java.io.File avec NIO.2.
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
J'ai créé un programme de jugement des nombres premiers en Java
Lire une chaîne dans un fichier PDF avec Java
J'ai essayé de faire une authentification de base avec Java
Outil GUI refactorisé réalisé avec Java8 + JavaFX en 2016
Je souhaite envoyer un e-mail en Java.
Analyse de code statique par Checkstyle avec Java + Gradle
Déployez des applications Web Java sur Azure avec maven
Je veux utiliser java8 forEach avec index
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
J'ai écrit un programme de jugement des nombres premiers en Java
Extraction de texte en Java à partir de PDF avec pdfbox-2.0.8
J'ai créé un jeu Janken en Java (CLI)
rsync4j --Je veux toucher rsync en Java.