Azure App ServiceでZIPデプロイのクイックスタートを決め、数日かけてやっと完走 “Hello World!”見るために:山市良のうぃんどうず日記(253)
最初に断っておきますが、筆者はアプリ開発者ではありません。クラウドの開発系サービスを評価、検証する必要があるときは、公式(今回はMicrosoft)が用意したサンプルアプリをクイックスタートガイドに従って試してみることはあります。Azure App ServiceにZIPパッケージを使用する方法でコードをデプロイする必要があったのですが、すぐに終わると思ったのに、随分と回り道してしまいました。
クイックスタートガイドに不備あり?
Microsoftは「Azure App Service」のコードによるWebアプリのデプロイ環境を、オンプレミスや他社クラウドのKubernetesクラスタ上に実装できる「Azure Arc対応App Service(プレビュー)」(以下、「App Service Kubernetes環境」)を提供しています。
オンプレミスにKubernetesクラスタを導入する方法の一つは、Azure Stack HCIクラスタやWindows Serverに「Azure Kubernetes Service(AKS)」を実装する「AKSハイブリッド」があります。最近、このAKSハイブリッドとApp Service Kubernetes環境をセットアップし、評価、検証する機会がありました。
今回試した「クイックスタートガイド」には、Node.jsの「Hello Worldサンプル」をデプロイする4行のコマンドラインがありました。しかし、これを実行してもアプリ用のKubernetesポッドがクラッシュループを繰り返し、解消するにはワークロード用のKubernetesクラスタを作り直すしかありませんでした。Kubernetesクラスタを削除して、再作成し、再びApp Service Kubernetes環境を準備するのに1時間ほどかかってしまいます。
結論から言うと、ZIPデプロイを利用するには「az webapp deployment」コマンドを実行する前に、Azureポータルまたは「az webapp config」コマンドを使用してアプリのビルド自動化を有効にしておく必要があったのです。しかし、その手順がクイックスタートガイドの一連のコードに含まれていなかったことが、デプロイ失敗の原因でした(画面1)。
エラーの原因を見つけるまでの長い回り道
App Service Kubernetes環境で何度か失敗を繰り返した後、オリジナルのAzure App Serviceで問題解決に取り組んだ方が効率が良いことに気が付きました。ランタイムとしてNode.jsを選択してLinuxベースのWebアプリを作成し、同じ方法でZIPデプロイを実行したところ、「:( Application Error」になります(画面2)。
リポジトリに「web.config」があるので、このサンプルはWindows Node.js用なのではと疑い(このときは一瞬疑ってしまいましたが、LinuxとWindowsのどちらにも対応しています)、LinuxベースのWebアプリを作成して同じようにZIPデプロイを実行したところ、こちらは「HTTP ERROR 500」のエラーになります(画面3)。
エラー状態だったLinuxベースのWebアプリへの「SSH」接続はできませんでしたが、WindowsベースのWebアプリには「コンソール」接続できたので、そのコンソールのコマンドプロンプトアプリのルートで「node.exe index.js」コマンドを実行してみたところ、「Error: Cannot find module 'express'」のエラーを確認しました(画面4)。
画面4 コンソール接続して「node.exe index.js」を実行すると、必要なモジュールが見つからないというエラーが。本来であれば、「package.json」にある依存関係の定義に従ってデプロイ時にインストールされるはず
インターネットを検索して解消方法を探し(筆者はNode.jsについては全くの素人です)、「npm install express」「npm install body-parser」「npm install cors」を実行して依存関係のあるモジュールを手動でインストールしていったところ、ようやくWebブラウザの表示に「Hello World!」を目にすることができました。
必要だったのはZIPデプロイのための「ビルド自動化の有効化」
こんな面倒な操作は本来必要なはずはないので、どうすれば自動的に依存関係のモジュールがインストールされるのかを探していたところ、別のPythonサンプルアプリにZIPデプロイのためのビルド自動化を有効化する方法について書かれていました(az webapp upコマンドの処理の一部として。今回試しているApp Service Kubernetes環境はaz webapp upに対応していない)。
- クイックスタート:Python(DjangoまたはFlask)WebアプリをAzure App Serviceにデプロイする(Microsoft Learn)
これでようやくデプロイ失敗の原因が判明したわけです。Webアプリに対してビルド自動化を有効化してからZIPデプロイを実行すると、LinuxベースのWebアプリでも、同じくLinuxベースのApp Service Kubernetes環境でも、すんなりコードをデプロイすることができました(画面5)。
ZIPデプロイの自動化は、おそらくZIPデプロイを日常的に行っている人には常識的なことだと思いますが、クイックスタートガイドに従って、意味を考えることなく、コピーしたコマンドラインをそのまま実行する筆者のような人には分かりようがありません。
実は、問題のクイックスタートガイドに記載されたコードのすぐ上にある「ZIPデプロイ」のリンク先(以下の部分)に答えがあったというオチでした。
az webapp config appsettings set --resource-group myResourceGroup --name --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
この点についてMicrosoftにフィードバックしたところ、数日後には英語版ドキュメントで、この追加のコマンドラインが反映されています(画面6)。
筆者紹介
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP 2008 to 2023(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Windows 11登場! 11で変わること、思ったほど変わらないこと
新しいWindows OS「Windows 11」の正式出荷が2021年10月5日に開始された。Windows 10からの無償アップグレードが可能であるため、どのような新機能が実装されたのか気になる人も多いのではないだろうか。そこで、本稿ではWindows 11の新機能、削除された機能などを簡単にまとめてみた。 - Windows 11一般提供開始、企業での導入/展開時に注意すべきポイントは?
MicrosoftはWindowsデスクトップOSの最新バージョンである「Windows 11」を正式にリリースし、Windows 11対応ハードウェアを搭載したWindows 10デバイスに対して、無料アップグレードの段階的なロールアウトを開始しました。 - 買って、試して分かったWindows 365(契約・セットアップ編)
Microsoftからクラウド上でWindows 10が動く「クラウドPC」の利用可能なサブスクリプションサービス「Windows 365」の提供が開始された。早速、サブスクリプションを契約し、クラウドPCの設定を行ってみた。契約からセットアップまでで見えてきた便利な点、不便な点などをまとめてみた。 - いよいよ完全終了へ。Internet Explorer(IE)サポート終了スケジュール
長らくWindows OSに標準装備されてきたInternet Explorer(IE)。その「寿命」は各種サポートの終了時期に左右される。Windows OSごとにIEのサポート終了時期を分かりやすく図示しつつ、見えてきた「終わり」について解説する。