このチュートリアルでは、単純な Node.js アプリケーションを作成し、Azure に発行するタスクについて説明します。
Node.js アプリケーションを Azure に発行する場合、いくつかのオプションがあります。 これには、Azure App Service、任意の OS を実行する VM、Kubernetes を使用した管理用の Azure Container Service (AKS)、Docker を使用したコンテナー インスタンスなどがあります。 これらの各オプションの詳細については、「 コンピューティング」を参照してください。
このチュートリアルでは、 Linux App Service にアプリをデプロイします。 Linux App Service は、(Windows 上の IIS の背後で Node.js アプリを実行する Windows App Service ではなく) Node.js アプリケーションを実行するために Linux Docker コンテナーをデプロイします。
このチュートリアルでは、Node.js Tools for Visual Studio でインストールされたテンプレートから始まる Node.js アプリケーションを作成し、GitHub 上のリポジトリにコードをプッシュした後、Azure Web ポータルを使用して Azure App Service をプロビジョニングして、GitHub リポジトリからデプロイできるようにする方法について説明します。 コマンド ラインを使用して Azure App Service をプロビジョニングし、ローカル Git リポジトリからコードをプッシュするには、「 Node.js App の作成」を参照してください。
Important
この記事の情報は、Node.js プロジェクトの種類 (.njsproj) にのみ適用されます。 この記事で使用するテンプレートは、Visual Studio 2022 バージョン 17.8 Preview 2 以降では使用できなくなりました。
このチュートリアルでは、以下の内容を学習します。
- Node.js プロジェクトを作成する
- コードの GitHub リポジトリを作成する
- Azure で Linux App Service を作成する
- Linux へのデプロイ
[前提条件]
Visual Studio がインストールされ、Node.js 開発ワークロードが必要です。
Visual Studio 2019 をまだインストールしていない場合は、 Visual Studio のダウンロード ページに移動して無料でインストールします。
ワークロードをインストールする必要があるが、既に Visual Studio がある場合は、[ ツール>Get Tools and Features...] に移動します。これで Visual Studio インストーラーが開きます。 Node.js 開発ワークロードを選択し、[変更] を選択します。
Node.js ランタイムがインストールされている必要があります。
インストールしていない場合は、 Node.js Web サイトから LTS バージョンをインストールします。 一般に、Visual Studio は、インストールされている Node.js ランタイムを自動的に検出します。 インストールされているランタイムが検出されない場合は、プロパティ ページでインストールされているランタイムを参照するようにプロジェクトを構成できます (プロジェクトを作成した後、プロジェクト ノードを右クリックして [プロパティ] を選択します)。
Azure で実行する Node.js プロジェクトを作成する
Visual Studio を開きます。
新しい TypeScript Express アプリを作成します。
Esc キーを押してスタート ウィンドウを閉じます。 Ctrl + Q キーを押して検索ボックスを開き、「Node.js」と入力し、[Create new Basic Azure Node.js Express 4 application (TypeScript)] を選択します。 表示されたダイアログボックスで、を選び、を作成します。
Basic Azure Node.js Express 4 アプリケーション プロジェクト テンプレートが表示されない場合は、Node.js 開発ワークロードを追加する必要があります。 詳細な手順については、「 前提条件」を参照してください。
Visual Studio によってプロジェクトが作成され、ソリューション エクスプローラー (右側のウィンドウ) で開きます。
F5 キーを押してアプリをビルドして実行し、すべてが想定どおりに実行されていることを確認します。
[ファイル]>[ソース管理に追加] を選択して、プロジェクトのローカル Git リポジトリを作成します。
この時点で、Express フレームワークを使用し、TypeScript で記述された Node.js アプリが動作し、ローカル ソース管理にチェックインされます。
次の手順に進む前に、必要に応じてプロジェクトを編集します。
Visual Studio から GitHub にコードをプッシュする
GitHub for Visual Studio を設定するには:
メニュー項目 Tools> を使用して、GitHub Extension for Visual Studio がインストールされ、有効になっていることを確認します。
メニューから 表示>、その他のウィンドウ>、GitHub を選択します。
GitHub ウィンドウが開きます。
GitHub ウィンドウに [作業の開始] ボタンが表示されない場合は、[ファイル] >[ソース管理に追加] をクリックし、UI が更新されるまで待ちます。
[ 作業の開始] をクリックします。
GitHub に既に接続している場合、ツールボックスは次の図のようになります。
発行する新しいリポジトリのフィールドに入力し、[ 発行] をクリックします。
しばらくすると、"リポジトリが正常に作成されました" というバナーが表示されます。
次のセクションでは、このリポジトリから Azure App Service on Linux に発行する方法について説明します。
Azure で Linux App Service を作成する
Azure portal にサインインします。
左側のサービスの一覧から [App Services ] を選択し、[ 追加] をクリックします。
必要に応じて、新しいリソース グループと App Service プランを作成して、新しいアプリをホストします。
図に示すように、 OS を Linux に設定し、 ランタイム スタック を必要な Node.js バージョンに設定してください。
[ 作成 ] をクリックして App Service を作成します。
デプロイには数分かかる場合があります。
展開後、[ アプリケーションの設定] セクションに移動し、
SCM_SCRIPT_GENERATOR_ARGSの名前と値が--nodeの設定を追加します。
Warnung
App Service デプロイ プロセスでは、一連のヒューリスティックを使用して、試行して実行するアプリケーションの種類を決定します。 デプロイされたコンテンツに .sln ファイルが検出されると、MSBuild ベースのプロジェクトがデプロイされていると見なされます。 上記で追加した設定は、このロジックをオーバーライドし、これが Node.js アプリケーションであることを明示的に指定します。 この設定がない場合、Node.js アプリケーションは展開に失敗します。sln ファイルは、App Service にデプロイされているリポジトリの一部です。
[ アプリケーションの設定] で、
WEBSITE_NODE_DEFAULT_VERSIONの名前と値が8.9.0の別の設定を追加します。デプロイが完了したら、App Service を開き、[ デプロイ オプション] を選択します。
[ ソースの選択] をクリックし、[ GitHub] を選択し、必要なアクセス許可を構成します。
発行するリポジトリとブランチを選択し、[ OK] を選択します。
同期中に デプロイ オプション ページが表示されます。
同期が完了すると、チェック マークが表示されます。
現在、サイトは GitHub リポジトリから Node.js アプリケーションを実行しており、Azure App Service 用に作成された URL (既定では、Azure App Service に指定された名前の後に
.azurewebsites.net) でアクセスできます。
アプリを変更して変更をプッシュする
行の後に
app.use('/users', users);に示すコードを追加します。 これにより、URL /api に REST API が追加されます。app.use('/api', (req, res, next) => { res.json({"result": "success"}); });コードをビルドしてローカルでテストし、チェックインして GitHub にプッシュします。
Azure portal では、GitHub リポジトリの変更を検出するまでに少し時間がかかり、デプロイの新しい同期が開始されます。 これは次の図のようになります。
デプロイが完了したら、パブリック サイトに移動し、 URL に /api を追加します。 JSON 応答が返されます。
トラブルシューティング
- node.exe プロセスが終了すると (つまり、ハンドルされない例外が発生します)、コンテナーが再起動します。
- コンテナーが起動すると、さまざまなヒューリスティックを実行して、Node.js プロセスを開始する方法を確認します。 実装の詳細については、generateStartupCommand.jsを参照 してください 。
- 調査のために SSH 経由で実行中のコンテナーに接続できます。 これは、Azure portal を使用して簡単に行うことができます。 App Service を選択し、[開発ツール] セクションで SSH に到達するまでツールの一覧を下にスクロールします。
- トラブルシューティングを支援するには、App Service の 診断ログ 設定に移動し、 Docker コンテナーのログ 設定を オフ から ファイル システムに変更します。 ログは /home/LogFiles/_docker.log*のコンテナーに作成され、SSH または FTP を使用してボックスでアクセスできます。
- 既定で割り当てられている *.azurewebsites.net URL ではなく、カスタム ドメイン名がサイトに割り当てられる場合があります。 詳細については、トピック「 カスタム ドメインのマップ」を参照してください。
- 運用環境に移行する前に、さらにテストするためにステージング サイトにデプロイすることをお勧めします。 これを構成する方法の詳細については、 ステージング環境の作成に関するトピックを参照してください。
- よく寄せられる質問については、 App Service on Linux に関する FAQ を参照してください。
次のステップ
このチュートリアルでは、Linux App Service を作成し、Node.js アプリケーションをサービスにデプロイする方法について説明しました。 Linux App Service の詳細については、こちらをご覧ください。