本記事では App Service on Linux において 組み込みイメージおよびカスタム Linux コンテナー(Web App for Containers) がどのように起動確認が行われるのかについて解説します。
起動確認に用いられるリクエスト (GET /robots933456.txt)
App Service on Linux において、組み込みイメージおよびカスタムイメージはプラットフォーム上で、docker コマンドによって起動されます。App Service のプラットフォームは、docker コマンドで起動したコンテナが動作可能な状態であるかの確認のため、アプリケーションに対して、GET /robots933456.txt リクエストを実行します。 このリクエストに応答ができない場合、コンテナ起動失敗とみなされ、コンテナのリサイクルが行われます。 なお、GET /robots933456.txt に対しては、必ずしも 200 応答を返す必要はありません。
/robots933456.txt は、コンテナーが要求を処理できるかどうかを調べるために App Service が使用するダミーの URL パスです。 404 応答は、パスが存在しないことを示すだけですが、コンテナーが正常であり、要求に応答できる状態であることを App Service に知らせます。
これは、組み込みイメージの言語や、カスタム Linux コンテナーに共通の仕組みとなっています。公式ドキュメントにおいても、下記の記事が各構成向けの資料にインクルードされているものとなります。
2023-03-07T02:49:57.774Z INFO - 18-lts_20221208.1.tuxprod Pulling from appsvc/node 2023-03-07T02:49:57.776Z INFO - Digest: sha256:0213c7471d5f274a1ecd012920a26e9f5ed76dc3008981c3c46e0fc98a124e79 2023-03-07T02:49:57.777Z INFO - Status: Image is up to date for mcr.microsoft.com/appsvc/node:18-lts_20221208.1.tuxprod 2023-03-07T02:49:57.894Z INFO - Pull Image successful, Time taken: 0 Minutes and 0 Seconds 2023-03-07T02:49:58.150Z INFO - Starting container for site 2023-03-07T02:49:58.151Z INFO - docker run -d -p 8020:8080 --name jpazpaas-blog-examples-linuxnodeapp-20230307_0_3ab3e0bf -e WEBSITE_SITE_NAME=jpazpaas-blog-examples-linuxnodeapp-20230307 -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=jpazpaas-blog-examples-linuxnodeapp-20230307.azurewebsites.net -e WEBSITE_INSTANCE_ID=60c176d165cff1190180ffa3f443f64d8269bd82832141c75f0f4d8dee36c586 -e HTTP_LOGGING_ENABLED=1 -e NODE_OPTIONS=--require /agents/node/build/src/Loader.js -e WEBSITE_USE_DIAGNOSTIC_SERVER=True appsvc/node:18-lts_20221208.1.tuxprod
2023-03-07T02:50:12.665Z INFO - Initiating warmup request to container jpazpaas-blog-examples-linuxnodeapp-20230307_0_3ab3e0bf for site jpazpaas-blog-examples-linuxnodeapp-20230307 2023-03-07T02:50:35.733Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_3ab3e0bf. Elapsed time = 23.0750703 sec 2023-03-07T02:50:52.895Z INFO - Container jpazpaas-blog-examples-linuxnodeapp-20230307_0_3ab3e0bf for site jpazpaas-blog-examples-linuxnodeapp-20230307 initialized successfully and is ready to serve requests.
今回注目すべき内容は以下となります。
02:49:58.151 に docker run -d -p 8020:8080 <~省略~>にてイメージを起動開始処理実行
02:50:12.665 に warmup requestを開始
02:50:35.733 に Waiting for response to warmup にて、23秒経過
すなわち、App Service のプラットフォームとしては、docker コマンドで起動したアプリケーションコンテナが、/robots933456.txt に対して応答を返すことではじめて、アプリケーションが応答可能な状態(ready to server requests)となり、実際のユーザーからのリクエストがルーティングされることになります。
2023-03-07T03:15:19.987Z INFO - Initiating warmup request to container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a for site jpazpaas-blog-examples-linuxnodeapp-20230307 2023-03-07T03:15:39.033Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 18.2989576 sec 2023-03-07T03:16:09.103Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 49.1164098 sec 2023-03-07T03:16:26.012Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 66.0247886 sec 2023-03-07T03:16:42.828Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 82.8346583 sec 2023-03-07T03:17:00.479Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 100.4923859 sec 2023-03-07T03:17:18.697Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 118.710235 sec 2023-03-07T03:17:34.987Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 135.0003789 sec 2023-03-07T03:17:51.299Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 151.3122307 sec 2023-03-07T03:18:07.801Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 167.8145076 sec 2023-03-07T03:18:23.440Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 183.4531577 sec 2023-03-07T03:18:39.558Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 199.5713445 sec 2023-03-07T03:18:56.582Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a. Elapsed time = 216.5952289 sec 2023-03-07T03:19:10.099Z ERROR - Container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a for site jpazpaas-blog-examples-linuxnodeapp-20230307 did not start within expected time limit. Elapsed time = 230.1068051 sec 2023-03-07T03:19:10.206Z ERROR - Container jpazpaas-blog-examples-linuxnodeapp-20230307_0_e642bb9a didn't respond to HTTP pings on port: 8080, failing site start. See container logs for debugging. 2023-03-07T03:19:10.240Z INFO - Stopping site jpazpaas-blog-examples-linuxnodeapp-20230307 because it failed during startup.
プラットフォーム側はアプリケーションが特定のポートを listen していることを想定してリクエストを実行します。 そのため、アプリケーション側がそのポートを利用して Web サーバーを起動していない場合 GET /robots933456.txt に疎通することができず、コンテナ起動に失敗と判定されます。 組み込みイメージの場合は、基本的には予め設定されている環境変数の PORT を使用する必要があります。カスタムイメージの場合はアプリケーション設定 WEBSITES_PORT を利用して変更することも可能です。
2023-03-07T03:36:39.677370883Z > jpazpaas-blog-examples-linuxnodeapp-20230307@1.0.0 start /home/site/wwwroot 2023-03-07T03:36:39.677377183Z > node index.js 2023-03-07T03:36:39.677381183Z 2023-03-07T03:36:49.323864062Z index.js started with process.env.PORT=8080 2023-03-07T03:40:44.477611509Z Server started
2023-03-07T03:36:26.055Z INFO - Initiating warmup request to container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304 for site jpazpaas-blog-examples-linuxnodeapp-20230307 2023-03-07T03:36:44.797Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 18.7491015 sec 2023-03-07T03:37:01.130Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 35.078963 sec 2023-03-07T03:37:16.867Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 50.8190484 sec 2023-03-07T03:37:33.695Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 67.6477506 sec 2023-03-07T03:37:49.107Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 83.0596245 sec 2023-03-07T03:38:09.202Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 103.1545329 sec 2023-03-07T03:38:25.324Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 119.276316 sec 2023-03-07T03:38:40.633Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 134.5835292 sec 2023-03-07T03:38:56.333Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 150.2849426 sec 2023-03-07T03:39:11.863Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 165.8133384 sec 2023-03-07T03:39:27.593Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 181.5454235 sec 2023-03-07T03:39:43.395Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 197.3478286 sec 2023-03-07T03:39:58.961Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 212.9132567 sec 2023-03-07T03:40:20.483Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 234.4350637 sec 2023-03-07T03:40:36.400Z INFO - Waiting for response to warmup request for container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304. Elapsed time = 250.3523063 sec 2023-03-07T03:40:45.837Z INFO - Container jpazpaas-blog-examples-linuxnodeapp-20230307_0_c320e304 for site jpazpaas-blog-examples-linuxnodeapp-20230307 initialized successfully and is ready to serve requests.