📚

AppServiceにデプロイできない?

に公開

はじめに

個人的な用事でNext製のアプリをデプロイする必要があったので、AzureのAppServiceを使ってデプロイをしようとしていました。

いつもは、コンテナベースの設定にしてAzure Container Registryを使用して、AppServiceでこのリソースをしてデプロイをしていましたが、今回はシンプルなアプリで、そこまでやる必要はなかったので、いつもと異なる手順でデプロイ作業を進めていました。
何も考えずにコマンドを打っていたので、2つの壁にぶつかりました。

デプロイコマンド

既にリソースグループは作成していて、AppService PlanとAppServiceプランの作成からのデプロイコマンドの手順が以下です。

npm run build

az login

az appservice plan create \
     --name <APP_SERVICE_PLAN_NAME> \
     --resource-group <RESOURCE_GROUP_NAME> \
     --sku B1 \
     --is-linux

az webapp create \
     --resource-group <RESOURCE_GROUP_NAME> \
     --plan <APP_SERVICE_PLAN_NAME> \
     --name <APP_SERVICE_NAME> \
     --runtime "NODE|20-lts"

zip -r app.zip .

az webapp deployment source config-zip \
     --resource-group <RESOURCE_GROUP_NAME> \
     --name <APP_SERVICE_NAME> \
     --src app.zip
     --timeout 600 

問題点その1

デプロイが終わらない

最後のコマンドでwebapp deploymentをしているのだが、時間がかかって全く終わらない。

このzipであげるものは基本的に全てのファイル/フォルダをあげるので、node_modulesの中身も上げてしまうそう。

重そうなフォルダは除外してデプロイ作業を進めてみる。

zip -r app.zip . -x "node_modules/*" ".next/*"

az webapp deployment source config-zip \
     --resource-group <RESOURCE_GROUP_NAME> \
     --name <APP_SERVICE_NAME> \
     --src app.zip
     --timeout 600 

問題点その2

デプロイ作業は進むが、ログストリームを見るとなんか依存関係のエラーが出ている。

node_modulesを丸ごと除外してZIPデプロイしていたことが原因。

node_modulesは除外してデプロイしたいので、AppServiceの設定を変えることにしました。
Azure に「展開後にビルド/npm install を走らせる」設定を有効化にします。

App Service の《構成》→ アプリケーション設定 に SCM_DO_BUILD_DURING_DEPLOYMENT=true を追加する。

🎉 これで無事デプロイしたものがちゃんと表示されました!
めでたし、めでたし

ヘッドウォータース

Discussion