FTP/S を使用した Azure App Service へのアプリのデプロイ
この記事では、FTP または FTPS を使用して、Web アプリ、モバイル アプリ バックエンド、または API アプリを Azure App Service にデプロイする方法について説明します。
アプリの FTP/S エンドポイントは既にアクティブです。 FTP/S デプロイを有効にするための構成は必要ありません。
Note
FTP 基本認証が無効になっている場合、FTP/S デプロイは機能せず、アプリのデプロイ センターで FTP 資格情報を表示できず、構成することもできません。
デプロイ資格情報を取得する
「Azure App Service のデプロイ資格情報の構成」の指示に従って、アプリケーション スコープの資格情報をコピーするか、ユーザー スコープの資格情報を設定します。 いずれかの資格情報を使用して、アプリの FTP/S エンドポイントに接続できます。
選択した資格情報のスコープに応じて、次の形式で FTP ユーザー名を作成します。
アプリケーション スコープ ユーザー スコープ <app-name>\$<app-name>
<app-name>\<deployment-user>
App Service では、FTP/S エンドポイントはアプリ間で共有されます。 ユーザー スコープの資格情報は特定のリソースにリンクされていないため、前述のように、ユーザースコープのユーザー名の前にアプリ名を付加する必要があります。
FTP/S エンドポイントを取得する
デプロイ資格情報をコピーしたアプリの同じ管理ページ ( [デプロイ センター]>[FTP 資格情報] ) で、FTPS エンドポイントをコピーします。
ファイルを Azure にデプロイする
- FTP クライアント (Visual Studio、Cyberduck、WinSCP など) から、収集した接続情報を使用してアプリに接続します。
- ファイルとそれぞれのディレクトリ構造を、Azure の /site/wwwroot ディレクトリ (WebJobs の場合は /site/wwwroot/App_Data/Jobs/ ディレクトリ) にコピーします。
- アプリの URL を参照して、アプリが正しく動作していることを確認します。
Note
Git ベースのデプロイやZip デプロイとは異なり、FTP デプロイでは次のようなビルド オートメーションはサポートされていません。
- 依存関係の復元 (NuGet、NPM、PIP、Composer の自動化など)
- .NET バイナリのコンパイル
- web.config の生成 (Node.js の例はこちら)
ローカル コンピューターでこれらの必要なファイルを手動生成した後、アプリと共にデプロイします。
FTPS を強制する
セキュリティを強化するには、FTP over TLS/SSL のみを許可する必要があります。 FTP デプロイを使用していない場合は、FTP と FTPS の両方を無効にすることもできます。
Azure portal のご使用のアプリのリソース ページで、左側のナビゲーションの [構成]>[全般設定] を選択します。
暗号化されていない FTP を無効にするには、 [FTP state](FTP の状態) で [FTPS のみ] を選択します。 FTP と FTPS の両方を完全に無効にするには、 [無効にする] を選択します。 終わったら、 [保存] を選択します。 [FTPS のみ] を使用する場合、Web アプリの [TLS/SSL 設定] ページに移動して TLS 1.2 以降を適用する必要があります。 TLS 1.0 と 1.1 は、[FTPS のみ] ではサポートされません。
使用しているアプリはデプロイ中にどうなりますか?
正式にサポートされているすべてのデプロイ メソッドは、アプリの /home/site/wwwroot フォルダー内のファイルに変更を加えます。 アプリの実行には、それらのファイルが使用されます。 したがって、ファイルがロックされていることにより、デプロイに失敗する可能性があります。 すべてのファイルが同時に更新されるわけではないため、アプリはデプロイ中に予期しない動作をすることもあります。 この動作は、顧客向けのアプリでは好ましくありません。 これらの問題を回避するにはいくつかの方法があります。
- 展開せずに ZIP パッケージから直接アプリを実行します。
- デプロイ中に、アプリを停止するか、またはアプリのオフライン モードを有効にします。 詳細については、「Dealing with locked files during deployment」 (デプロイ中にロックされているファイルに対処する) を参照してください。
- 自動スワップを有効にした状態で、ステージング スロットにデプロイします。
FTP デプロイのトラブルシューティング
- FTP デプロイをトラブルシューティングするには、どうすればよいですか。
- FTP 接続してコードを発行できません。 問題を解決するには、どうすればよいですか。
- パッシブ モードを使用して Azure App Service で FTP に接続するには、どうすればよいですか。
- 明示的な暗号化を使用して FTPS 経由で接続しようとすると接続が失敗するのはなぜですか?
- Azure App Service のデプロイに使用されたメソッドを確認するにはどうすればよいですか?
FTP デプロイをトラブルシューティングするには、どうすればよいですか。
FTP デプロイのトラブルシューティングを行うための最初の手順は、デプロイの問題を、ランタイム アプリケーションの問題から切り離すことです。
デプロイの問題が発生すると、通常、アプリにファイルがデプロイされなかったり、誤ったファイルがデプロイされたりします。 FTP のデプロイを調べるか、代替デプロイ パス (ソース コントロールなど) を選択することで、トラブルシューティングを行うことができます。
ランタイム アプリケーションの問題が発生した場合は、通常、お使いのアプリに正しいファイル セットがデプロイされますが、アプリが適切に動作しません。 実行時のコードの動作に注目して特定のエラーのパスを調べることで、トラブルシューティングを行うことができます。
デプロイの問題かランタイムの問題かを判断するには、「Deployment vs. runtime issues (デプロイの問題とランタイムの問題)」を参照してください。
FTP 接続してコードを発行できません。 問題を解決するには、どうすればよいですか。
入力したホスト名と資格情報が正しいことを確認してください。 また、使用しているマシン上の次の FTP ポートが、ファイアウォールによってブロックされていないことも確認します。
- FTP コントロール接続ポート: 21、990
- FTP データ接続ポート: 989、10001-10300
パッシブ モードを使用して Azure App Service で FTP に接続するには、どうすればよいですか。
Azure App Service では、アクティブ モードとパッシブ モードの両方を使用した接続がサポートされます。 お使いのデプロイ マシンは、通常、(オペレーティング システム内の、またはホーム ネットワークまたはビジネス ネットワークの一部として) ファイアウォールの内側にあるため、パッシブ モードをお勧めします。 WinSCP ドキュメントに記載された使用例をご覧ください。
明示的な暗号化を使用して FTPS 経由で接続しようとすると接続が失敗するのはなぜですか?
FTPS を使用すると、明示的または暗黙的な方法で TLS のセキュリティで保護された接続を確立できます。
- 暗黙的な暗号化で接続する場合、接続はポート 990 を介して確立されます。
- 明示的な暗号化で接続する場合、接続はポート 21 を介して確立されます。
使用する URL 形式は接続の成功に影響を与える可能性があります。接続の成功は、使用しているクライアント アプリケーションにも左右されます。 ポータルには URL が ftps://
として表示されますが、次の点に注意してください。
- 接続に使用する URL が
ftp://
で始まる場合、接続がポート 21 上にあることを意味します。 ftps://
で始まる場合、接続が暗黙的で、ポート 990 上にあることを意味します。
ftps://
への接続を試み、ポート 21 を使用するなど、両者を混在させないようにしてください。その場合、明示的な暗号化を行おうとしている場合でも、接続に失敗します。 これは、明示的な接続が AUTH メソッドの前にプレーン FTP 接続として開始されるためです。
Azure App Service のデプロイに使用されたメソッドを確認するにはどうすればよいですか?
アプリがどのようにデプロイされたかは、アプリケーションの設定を確認することで判断できます。 アプリが外部パッケージ URL を使用してデプロイされた場合、アプリケーション設定の WEBSITE_RUN_FROM_PACKAGE
設定と URL 値が表示されるはずです。 または、zip デプロイを使用してデプロイされた場合、WEBSITE_RUN_FROM_PACKAGE
設定と 1
値が表示されるはずです。 アプリが Azure DevOps を使用してデプロイされた場合、Azure DevOps ポータルにデプロイ履歴が表示されるはずです。 Azure Functions Core Tools を使用した場合、Azure portal に デプロイ履歴が表示されるはずです。