スキップしてコンテンツを表示

App RunnerでSpring bootのプロジェクトをデプロイしたいが、ヘルスチェックでエラーが発生する。

0

こんにちは! App Runnerを使って、作成済みのSpring bootのプロジェクトをデプロイしたいのですが、エラーが発生しうまくいきません…。アドバイスをお願いします。

デプロイしようとしたときのログを見ると、ビルドまでは完了しているのですが、Health Checkでエラーが発生しているように見えます。ログにはポートを確認しなさいという指示があるのですが、どう設定するのが正しいのかわからず…。

App Runnerイベントログ

[AppRunner] Health check failed on protocol `HTTP`[Path: '/'], [Port: '8080']. Check your configured port number. For more information, see the application logs.

デプロイログ

(前略)
[AppRunner] Successfully built your application source code.
[AppRunner] Failed to deploy your application source code.

イベントログに"see the application logs"とあるのでアプリケーションログを確認しましたが、エラーメッセージは出ていません。最後のアプリケーションログは以下の通りです。

[INFO] Compiling 1083 source files to /app/target/classes

プロジェクトに関する情報

フレームワーク:Spring boot
言語:Java11
ビルドツール:Maven

App Runnerの設定

リポジトリタイプ:ソースコードリポジトリ
apprunner.yaml:使用していない

DBの設定

使用DB:RDS Oracle
application.propertiesにて、直接接続設定をしています。(spring.datasource.url、spring.datasource.username、spring.datasource.password)
ローカルで立ち上げたアプリケーションから、RDSに接続できることを確認済みです。

疑わしい箇所等ご指摘いただけますと幸いです。よろしくお願いいたします。

質問済み 1年前509ビュー
2回答
0
承認された回答

アプリケーションは8080番ポートでリッスンしているのでしょうか?
apprunner.yamlを使用している場合はどのような設定になっていますか?
実行セクションの「network」内にある「port」でアプリケーションがリッスンするポート番号を設定できます。(デフォルトは8080になっています。)
https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/config-file-ref.html#config-file-ref.run

作成済みのコンテナを使用する方法だと以下のようなブログの出順で作成できるはずです。
https://zenn.dev/sre_holdings/articles/be6f0099674739

また、ヘルスチェックパスが「/」になっているようですが、こちらにアクセスした際にHTTPステータスコードで200を返すようにアプリケーションで作成されていますでしょうか?

作成済みのコンテナを使用している場合はコンテナを作成している環境のCPUアーキテクチャによって問題が発生することもあるので確認してみてください。
docker buildを実行する際にアーキテクチャを指定することが可能です。
https://nakamura196.hatenablog.com/entry/2022/03/20/073831

docker buildx build --platform=linux/amd64 -t <image-name> .
エキスパート
回答済み 1年前
  • 早速のご回答ありがとうございます! コンテナデプロイではなく、ソースコードデプロイを使用しています。 また、設定ファイルapprunner.yamlは使用していません。 ※情報が不足しており失礼しました、質問文に追記させていただきました。

    >アプリケーションは8080番ポートでリッスンしているのでしょうか? application.propertiesでは、特にserver.portの設定を行っていないため、デフォルトの8080になっていると思われます。

    >ヘルスチェックパスが「/」になっているようですが、こちらにアクセスした際にHTTPステータスコードで200を返すようにアプリケーションで作成されていますでしょうか? こちらをローカルで確認したところ、「/」から「/login」へリダイレクトされていることに気が付いたため、ヘルスチェックパスを「/login」に変更してみましたが、結果は同じでした。 (ローカルでは「/login」がHTTPステータスコード200が返していることを確認できました。)

    ちなみに、ヘルスチェックのプロトコルをTCPに変えても、同様のエラーが発生します。 Health check failed on protocol TCP [Port: '8080']. Check your configured port number. For more information, see the application logs.

    追加で確認すべき箇所がありましたらご指摘をお願いいたします。

  • 念のためですが、明示的に「server.port=8080」を追加してみてはいかがでしょうか?(これで動かなければ問題は別の個所になるかと思います) また、ヘルスチェックパスですが、こちらも明示的に「/health」のようなパスとHTTP200を返せるコンテンツを作成してヘルスチェックを行うようにしてみてください。(余計なリダイレクトなどが悪さをしていないかといった部分を確認したいです)

  • ・application.propertiesに「server.port=8080」を追加 ・「/health」というコンテンツを用意し、ヘルスチェックパスに設定 上記を行いましたが、エラー内容は変わらずだったので、別の箇所の問題のようです。

    DBの問題だったりしますでしょうか?DB接続に関する情報を質問に追記しましたので、合わせてアドバイスいただけますと幸いです。

  • ローカルで立ち上げたアプリケーションから、RDBに接続できることを確認済みです。

    上記の確認はRDSのパブリックアクセスを有効化して確認しているのでしょうか? また、AppRunnerはRDSと同じVPCに紐づいているのでしょうか? もし、以下のドキュメントの設定でAppRunnerからの送信の通信をVPCにルーティングしていてRDSのパブリックアクセスを有効化している場合は、RDSのパブリックアクセスを無効化してみてください。 https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/network-vpc.html
    可能であれば、ソースコードデプロイではなくコンテナデプロイの方でも問題が再現するか確認してみてください。

0

本件、解決しました。 そもそもmavenの構築コマンドと開始コマンドに誤りがあったことが原因でした。

【誤】 構築コマンド:./mvnw clean 開始コマンド:./mvnw spring-boot:run

【正】 構築コマンド:./mvnw package spring-boot:repackage 開始コマンド:java -jar hoge.jar

Riku_Kobayashiさん、つたない質問に根気強く回答いただきありがとうございました。おかげさまで次のステップに進めそうです。

回答済み 1年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

関連するコンテンツ