📚
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