Spring Boot APIをAzureアプリサービスで動作させるのに問題があります。 https://docs.Microsoft.com/en-us/Java/Azure/spring-framework/deploy-spring-boot-Java-web-appのMicrosoftガイドに従っています-on-Azure が、今のところ運がありません。
アプリケーションは起動しますが(ログファイルでアプリの起動を確認できます)、アプリサービスのURLへのhttpリクエストは常にタイムアウトで終了します。
Azureアプリサービスは、ポート80または8080で実行される組み込みのTomcatサーバーのみを取得しますが、それでもうまくいきませんでした。
アプリはwwwルートにデプロイされ、適切なweb.configもデプロイされます。
アプリケーションサーバーを使用して、または使用せずにApp Serviceを実行しようとしましたが(TomcatおよびJetty、サーバーはアプリケーションに埋め込まれているため必要ありません)、どちらの方法も失敗しました。
他の構成パーツが不足していますか?または、これはazureで使用しているプランのタイプに関連している可能性がありますか?たぶん、リソースに問題がありますか?
ポインタはありますか?
THX、
バート
Azureリソースの問題であるという私の直感が正しかったことがわかりました。リソースメモリとCPUをアップスケールすることで問題は解決しました。
SpringとAzureコミュニティによって提供された次の手順を使用して、AzureにSpring Bootアプリをデプロイしてください。
1)pomファイルがあるappフォルダー内に移動して実行します
以下のプラグインがpomファイルにあることを確認してください
<?xml version="1.0" encoding="UTF-8"?>
<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>org.springframework</groupId>
<artifactId>gs-spring-boot</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- tag::actuator[] -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- end::actuator[] -->
<!-- tag::tests[] -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- end::tests[] -->
</dependencies>
<properties>
<Java.version>1.8</Java.version>
<maven.build.timestamp.format>yyyyMMddHHmmssSSS</maven.build.timestamp.format>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.Microsoft.Azure</groupId>
<artifactId>Azure-webapp-maven-plugin</artifactId>
<version>0.1.5</version>
<configuration>
<authentication>
<serverId>Azure-auth</serverId>
</authentication>
<resourceGroup>maven-plugin</resourceGroup>
<appName>maven-web-app-${maven.build.timestamp}</appName>
<region>westus</region>
<javaVersion>1.8</javaVersion>
<deploymentType>ftp</deploymentType>
<stopAppDuringDeployment>true</stopAppDuringDeployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<targetPath>/</targetPath>
<includes>
<include>*.jar</include>
</includes>
</resource>
<resource>
<directory>${project.basedir}</directory>
<targetPath>/</targetPath>
<includes>
<include>web.config</include>
</includes>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
注:Azureに同じ名前でWebアプリを作成したことを確認してください
maven-web-app-$ {maven.build.timestamp}
ルートに「web.config」という名前のファイルを作成し、jarをweb.comfigに追加します
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="%Java_HOME%\bin\Java.exe"
arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar "%HOME%\site\wwwroot\Azure-rest-example-app-0.1.0.jar"">
</httpPlatform>
</system.webServer>
</configuration>
アプリがローカルで正常に動作していることを確認します。
IDに関連付けられた複数のアカウントがある場合は、次のコマンドを使用します
azログイン
azアカウントリスト
azアカウントセット-サブスクリプションXXX-XXX-XXX-XXXXXXXXXXXX
ここで、「Microsoft Azureのサービスプリンシパル」を作成する必要があります
1)端末ウィンドウを開きます。
2)az loginと入力して、Azure CLIでAzureアカウントにサインインします
3)az ad sp create-for-rbac --name "vaquarkhan" --password "yourpassword"と入力して、Azureサービスプリンシパルを作成します(vaquarkhanはユーザー名、yourpasswordはサービスプリンシパルのパスワードです)。
az ad sp create-for-rbac --name "app-name" --password "password"
注:エラーが発生した場合は、設定を変更する必要があります---> ここ
「Azure.graphrbac.models.graph_error.GraphErrorException:ゲストユーザーはこのアクションを実行できません。」
成功した場合
Azureは、次のようなJSON応答を出力する必要があります。
{
"appId": "XXX-XXXX-XXX-XXX-XXXX",
"displayName": "vaquarkhan",
"name": "http://vaquarkhan",
"password": "yourpassword",
"tenant": "YYY-YYYY-YYY-YYY-YYYY"
}
Azureサービスプリンシパルを使用するようにMavenを構成します
1)Maven settings.xmlファイルをテキストエディターで開きます(通常は/etc/maven/settings.xmlまたは$ HOME/.m2/settings.xmlにあります)。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.Apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/SETTINGS/1.0.0
http://maven.Apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers>
<server>
<id>Azure-auth</id>
<configuration>
<client>ur key</client>
<tenant>ur tenant</tenant>
<key>YOUR PASSWORD</key>
<environment>Azure</environment>
</configuration>
</server>
</servers>
<proxies/>
<profiles>
<profile>
<id>hwx</id>
<repositories>
<repository>
<id>hwx</id>
<name>hwx</name>
<url>http://nexus-private.hortonworks.com/nexus/content/groups/public/</url>
</repository>
</repositories>
</profile>
</profiles>
<mirrors>
<mirror>
<id>public</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus-private.hortonworks.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<activeProfiles/>
</settings>
2)以下に示すように、このチュートリアルの前のセクションのAzureサービスプリンシパル設定を、settings.xmlファイルのコレクションに追加します。
<servers>
<server>
<id>Azure-auth</id>
<configuration>
<client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client>
<tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant>
<key>pppppppp</key>
<environment>Azure</environment>
</configuration>
</server>
</servers>
3)settings.xmlファイルを保存して閉じます。
アプリをビルドしてAzureにデプロイします
1)次のコマンドを実行します
Webアプリがデプロイされたら、Azureポータルにアクセスして管理します。 App Servicesにリストされます。
アプリケーションをクリックします。そこから、Webアプリの公開URLが[概要]セクションに表示されます
WebアプリのURLの決定このリンクをクリックして、Spring Bootアプリケーションにアクセスして操作できます。
Azure mavenプラグインドキュメント
注:ウェブサイト名はグローバルに一意である必要があり、アプリ名を使用して生成されます。名前が一意であることを確認してください。
公式チュートリアル のステップと実際の状況を組み合わせて、以下のチェックポイントを提供します。
ポイント1:mvn package
を使用して、pom.xml
ファイルがあるディレクトリにJARパッケージを作成しますあります。
ポイント2:web.configで設定されたjarパッケージ名が以下と同じであることを確認してくださいアップロードされたjarパッケージ名。
web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="%Java_HOME%\bin\Java.exe"
arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar "%HOME%\site\wwwroot\<your project name>"">
</httpPlatform>
</system.webServer>
</configuration>
ポイント3:FTPを使用して、KUDUのjar files
およびweb.config
をD:\home\site\wwwroot\
ディレクトリに公開してください。
ポイント4:ApplicationSettings
がjdk version
、Tomcat version
などのプロジェクトと一致していることを確認してください。
war
ファイルをデプロイする場合は、AzureポータルでアプリサービスのApplicationSettingsを構成してから、パスD:\home\site\wwwroot\webapps
にwarファイルをアップロードする必要があります。
さらに、KUDUでログファイルを確認することもできます:https://<your project name>.scm.azurewebsites.net/DebugConsole.
参考として、以下のドキュメントとスレッドを参照してください。
1 . Azure App ServiceでWebアプリを構成する
2 . Java Azure App ServiceでWebアプリを作成 を作成します
3 . Azure App ServiceへのSpringbootのデプロイ 。
お役に立てば幸いです。
Springbootアプリケーションを実行するには、JARファイルをアップロードしてweb.configファイルを追加する必要があります。
実行しようとしているものをサービスと通信するには、web.configファイルをappサービスのsite\wwwrootフォルダーに追加する必要があります。すでにweb.configファイルを作成しているので、Mavenを使用して以下を追加し、パッケージに動的に含まれるプロジェクト/リリースを取得します。
<build>
<resources>
<resource>
<directory>${project.basedir}/wwwroot</directory>
<filtering>true</filtering>
<targetPath>${basedir}/target</targetPath>
</resource>
</resources>
</build>
次に、jarファイルとweb.configをAzure App Service内に配置します。
以下のようにweb.configファイルを作成したかどうかを一度だけ確認できます。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="%Java_HOME%\bin\Java.exe"
arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar "%HOME%\site\wwwroot\@project.artifactId@[email protected]@.jar"">
</httpPlatform>
</system.webServer>
</configuration>