Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren

Ich konnte es lokal ausführen, aber als ich es bereitstellte, trat ein Fehler auf. Die Einzelheiten der Gegenmaßnahmen werden beschrieben.

** 6/15 Nachschrift ** Es scheint, dass Maven Plug-In usw. nach dem Schreiben dieses Artikels veröffentlicht wurden.

Was ist passiert

Wie oben erwähnt, funktioniert es lokal mit dem Maven-Plug-In einwandfrei. Wenn ich es jedoch in Azure bereitstelle und ausführe, wird der folgende Fehler angezeigt:

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

Ursache

Demnach scheint der alte Code aufgrund der Veröffentlichung der neuen Runtime nicht mehr zu funktionieren. https://stackoverflow.com/questions/50615746/azure-java-function-502-bad-gateway https://github.com/Azure/app-service-announcements/issues/112

Es funktioniert lokal mit der alten Laufzeit, ist also in Ordnung, aber wenn ich es bereitstelle, wird es auf der neuen Laufzeit ausgeführt, sodass anscheinend ein Fehler aufgetreten ist.

Bewältigung

Ich möchte das Problem beheben, damit es mit der neuen Laufzeit funktioniert, aber ab dem 14. Juni 2018 kann ich mich noch nicht darum kümmern. Dies liegt daran, dass das Azure-Funktionen-Maven-Plugin, das dies unterstützt, noch nicht veröffentlicht wurde.

Daher werden wir Folgendes als vorläufige Maßnahme umsetzen.

Geben Sie die Version von Runtime an

Geben Sie die Laufzeitversion in Azure an. Öffnen Sie die "Anwendungseinstellungen" der Funktionsanwendung im Azure-Portal. Ändern Sie FUNCTIONS_EXTENSION_VERSION in 2.0.11776-alpha. (Es sollte standardmäßig Beta sein.)

無題.png

Darüber hinaus ist diese Version bis Ende Juni gültig.

~~ (als Referenz) ~~ So unterstützen Sie die neue Laufzeit

~~ Maven Plugin wurde nicht veröffentlicht, aber andere Teile, die behandelt werden müssen, sind wie folgt. Da es sich um eine halbfertige Antwort handelt, handelt es sich außerdem um eine Umgebung, die auch lokal nicht funktioniert. ~~

** 6/15 Nachschrift ** Das entsprechende Maven-Plugin wurde veröffentlicht, daher ist die folgende Unterstützung in Ordnung.

Ändern Sie pom.xml

Es wird davon ausgegangen, dass das Projekt aus Maven Archetype erstellt wurde. Wenn Sie es also anpassen, lesen Sie es bitte entsprechend. ~~ Wenn das Azure-Funktionen-Maven-Plugin veröffentlicht wird, muss außerdem die in der Plugin-Verwaltung angegebene Version geändert werden. ~~

Abhängigkeit ändern

<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>

Ändern Sie die Einstellungen für das Maven-Abhängigkeits-Plugin

Hier wird die Einstellung vorgenommen, um die von pom definierte JAR-Datei zum lib-Ordner hinzuzufügen. Ursprünglich war azure-functions-java-core so eingestellt, dass es ausgeschlossen wird. Ändern Sie es daher wie folgt, um die azure-functions-java-library auszuschließen.

<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> <!--Hier-->
      </configuration>
    </execution>
  </executions>
</plugin>

Die Version des Azure-Maven-Plugins (6/15 Postscript) wurde geändert.

Ändern Sie die Version in 1.0.0-beta-2.

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

Code korrigieren

Das Paket hat sich geändert und muss behoben werden.

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

Es scheint, dass Serverless weg ist.

Aktualisieren Sie Ihre lokale Laufzeit

Als es sich um ein Update handelte, konnte ich die Versionsspezifikation nicht herausfinden, daher habe ich es deinstalliert und neu installiert.

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

Als ich dachte, ich würde diesen Artikel schreiben, arbeiten Leute, die kürzlich damit begonnen haben, Azure-Funktionen auf Java auszuführen, nicht einmal lokal. (Wenn Sie dem Verfahren folgen, wird eine neue Laufzeit installiert.)

Für solche Leute ist es möglicherweise besser, die Version von Runtime zu verringern und zu installieren.

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

** 6/15 Nachschrift ** Da die entsprechende Version veröffentlicht wurde, ist es meiner Meinung nach besser, Korrekturen vorzunehmen, um die neue Laufzeit zu unterstützen, als die Version von Runtime zu verringern.

Recommended Posts

Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren
Azure funktioniert in Java
Erstellen Sie Azure-Funktionen in Java
Behandeln Sie große JSON mit Java Lambda
Lösung für NetBeans 8.2 funktioniert nicht in Java 9-Umgebung
Üben Sie die Arbeit mit Unicode-Ersatzpaaren in Java
Aufrufen von Funktionen in großen Mengen mit Java Reflection
Verwenden Sie Thymeleaf mit Azure-Funktionen
Lombok arbeitet nicht mit Gradle5
Ich habe versucht, Metaprogrammierung mit Java
Protokollaggregation und -analyse (Arbeiten mit AWS Athena in Java)
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Ich habe eine E-Mail in Java gesendet
Morphologische Analyse in Java mit Kuromoji
Ich habe ein PDF mit Java erstellt.
Ich kann in IntelliJ keine Java-Klasse mit einem bestimmten Namen erstellen
Verwenden Sie Azure Bing SpellCheck mit Java
[Java] Verwenden Sie nicht "+" im Anhang!
Ich habe versucht, mit Java zu interagieren
Verwenden Sie Java 11 mit Google Cloud-Funktionen
Ich habe Gordobachs Theorem in Java geschrieben
Was ich mit Java Gold gelernt habe
Ich habe eine Anmerkung in Java gemacht.
Ich habe versucht, JWT in Java zu verwenden
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Tweak Markdown mit Java Flexmark-Java
Was ich mit Java Silver gelernt habe
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich habe eine Lambda-Funktion in Java geschrieben und mit SAM bereitgestellt
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Parallelitätsmethode in Java mit grundlegendem Beispiel
Ich habe das neue Yuan-Problem in Java ausprobiert
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Lesen Sie die xlsx-Datei in Java mit Selenium
Ich habe die OpenCV-Kamerakalibrierung in Java durchgeführt
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Ich habe Step-Funktionen mit AWS CDK erstellt.
Holen Sie sich Zeitstempel mit dem Azure BlobStorage Java SDK
[* Java *] Ich habe am JJUG CCC 2019 Spring teilgenommen
Deklarieren Sie keine Variablen in List in Java
Erstellen Sie Java-Anwendungen mit IBM Cloud-Funktionen
In einigen Fällen habe ich Java-Code mit GraalVM nativ gemacht, ihn aber nicht beschleunigt.
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
[Java] Schreiben Sie die von mir in der Vergangenheit aus java.io.File erstellten Funktionen mit NIO.2 neu.
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich habe ein Programm zur Beurteilung von Primzahlen in Java erstellt
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Überarbeitetes GUI-Tool, das 2016 mit Java8 + JavaFX erstellt wurde
Ich möchte eine E-Mail in Java senden.
Führen Sie eine statische Code-Analyse mit Checkstyle mit Java + Gradle durch
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Ich möchte Java8 für jeden mit Index verwenden
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich habe ein Programm zur Beurteilung von Primzahlen in Java geschrieben
Textextraktion in Java aus PDF mit pdfbox-2.0.8
Ich habe ein Janken-Spiel in Java (CLI) gemacht.
rsync4j - Ich möchte rsync in Java berühren.