Azure App Service へのアプリのデプロイ

この記事は、Web アプリ、モバイル アプリ バックエンド、または API アプリのファイルを Azure App Service にデプロイする際の最適なオプションを特定するのに役立ちます。また、選択したオプションに固有の手順が記載された適切なリソースも紹介しています。

Azure App Service のデプロイの概要

Azure App Service では、アプリケーション フレームワーク (ASP.NET、PHP、Node.js など) を自動的に保持します。 既定で有効化されるフレームワークもあれば、有効にするために簡単なチェックマークによる構成が必要なフレームワーク (Java や Python など) もあります。 また、PHP のバージョンやランタイムのビット数など、アプリケーション フレームワークをカスタマイズすることもできます。 詳細については、「 Azure App Service での Web アプリの構成」をご覧ください。

Web サーバーやアプリケーション フレームワークを気にする必要がないため、アプリを App Service にデプロイするときは、コード、バイナリ、コンテンツ ファイル、それぞれのディレクトリ構造を、Azure の /site/wwwroot ディレクトリ (WebJobs の場合は /site/wwwroot/App_Data/Jobs/ ディレクトリ) にデプロイすることが重要になります。 App Service では、3 つの異なるデプロイ プロセスをサポートしています。 この記事のデプロイ方法はすべて、次のいずれかのプロセスを使用します。

  • FTP または FTPS: FileZilla から NetBeans などのフル機能を備えた IDE まで、好みの FTP または FTPS 対応ツールを使用して、ファイルを Azure に移動します。 これは、厳密なファイル アップロード プロセスです。 App Service からバージョン管理やファイル構造管理などの追加サービスは提供されません。
  • Kudu (Git/Mercurial または OneDrive/Dropbox): Kudu は App Service のデプロイ エンジンです。 任意のリポジトリから Kudu にコードを直接プッシュします。 Kudu では、コードをプッシュしたときに、継続的なデプロイと他の自動タスクのための追加サービス (バージョン管理、パッケージの復元、MSBuild、 Web フック など) も提供されます。 Kudu デプロイ エンジンでは、次の 3 つの異なる種類のデプロイ ソースをサポートしています。

    • OneDrive および Dropbox からのコンテンツの同期
    • GitHub、Bitbucket、および Visual Studio Team Services からの自動同期によるリポジトリ ベースの継続的なデプロイ
    • ローカル Git からの手動での同期によるリポジトリ ベースのデプロイ
  • Web Deploy: Visual Studio など、好きな Microsoft ツールから、IIS サーバーへのデプロイを自動化するのと同じツールを使用して、直接 App Service にコードをデプロイします。 このツールは、差分のみのデプロイ、データベースの作成、接続文字列の変換などをサポートします。Web Deploy は、Azure にデプロイする前にアプリケーション バイナリがビルドされる点で Kudu とは異なります。 FTP と同様に、App Service から追加サービスは提供されません。

一般的な Web 開発ツールでは、これらのデプロイメント プロセスを 1 つ以上サポートします。 選択したツールによって利用できるデプロイメント プロセスが決まりますが、自由に使える実際の DevOps 機能は、デプロイメント プロセスと選択したツールの組み合わせによって異なります。 たとえば、 Visual Studio と Azure SDKから Web Deploy を実行する場合、Kudu の自動化機能を利用できなくても、Visual Studio でパッケージの復元と MSBuild による自動化が提供されます。

注意

これらのデプロイ プロセスでは、実際には、アプリで必要な Azure リソースがプロビジョニング されるわけではありません。 ただし、リンクされている手順に関する記事のほとんどは、アプリをプロビジョニングし、コードをエンド ツー エンドでデプロイする方法を示しています。 また、「 コマンド ライン ツールを使用したデプロイの自動化 」では、Azure リソースをプロビジョニングするための追加オプションを紹介しています。

FTP を使用したファイルのアップロードによる手動デプロイ

Web コンテンツを Web サーバーに手動でコピーすることに慣れている場合は、エクスプローラーや FileZilla などの FTP ユーティリティを使用してファイルをコピーできます。

ファイルの手動コピーの利点は次のとおりです。

  • FTP ツールを使い慣れていて、複雑さが最小限で済みます。
  • ファイルのコピー先が正確にわかります。
  • FTPS を使用するとセキュリティが強化されます。

ファイルの手動コピーの欠点は次のとおりです。

  • App Service の適切なディレクトリにファイルをデプロイする方法を把握する必要があります。
  • エラーが発生したときにロールバックするためのバージョン管理が行われません。
  • デプロイに関する問題のトラブルシューティングに利用できる組み込みのデプロイ履歴がありません。
  • 多くの FTP ツールでは、差分のみのコピーは行われず、すべてのファイルがコピーされるため、デプロイ時間が長くなる可能性があります。

FTP を使用してファイルをアップロードする方法

Azure Portal では、FTP または FTPS を使用してアプリのディレクトリに接続するために必要な情報がすべて提供されます。

クラウド フォルダーとの同期によるデプロイ

ファイルの手動コピー に代わる優れた方法として、OneDrive や Dropbox などのクラウド ストレージ サービスから App Service にファイルとフォルダーを同期する方法があります。 クラウド フォルダーとの同期では、デプロイに Kudu プロセスを利用します (「 デプロイメント プロセスの概要」を参照してください)。

クラウド フォルダーとの同期の利点は次のとおりです。

  • デプロイのシンプルさ。 OneDrive や Dropbox などのサービスは、デスクトップ同期クライアントを提供するので、ローカルの作業ディレクトリもデプロイメント ディレクトリになります。
  • ワンクリックでデプロイできます。
  • Kudu デプロイ エンジンのすべての機能 (パッケージの復元、自動化など) を利用できます。

クラウド フォルダーとの同期の欠点は次のとおりです。

  • エラーが発生したときにロールバックするためのバージョン管理が行われません。
  • デプロイは自動化されず、手動で同期する必要があります。

クラウド フォルダーと同期してデプロイする方法

Azure ポータルでは、コンテンツを同期する OneDrive または Dropbox クラウド ストレージのフォルダーを指定し、そのフォルダー内でアプリのコードとコンテンツの作業を行い、ボタンをクリックするだけで App Service に同期できます。

クラウド ベースのソース管理サービスからの継続的なデプロイ

開発チームで Visual Studio Team ServicesGitHubBitBucket などのクラウド ベースのソース コード管理 (SCM) サービスを使用している場合、リポジトリと統合し、継続的にデプロイするように App Service を構成できます。

クラウド ベースのソース管理サービスからのデプロイの利点は次のとおりです。

  • バージョン管理により、ロールバックが有効になります。
  • Git (および該当する場合は、Mercurial) リポジトリの継続的なデプロイを構成できます。
  • 分岐固有のデプロイでは、個々の スロットにそれぞれ異なる分岐をデプロイできます。
  • Kudu デプロイ エンジンのすべての機能 (デプロイのバージョン管理、ロールバック、パッケージの復元、自動化など) を利用できます。

クラウド ベースのソース管理サービスからのデプロイの欠点は次のとおりです。

  • 各 SCM サービスの知識が必要です。

クラウド ベースのソース管理サービスから継続的にデプロイする方法

Azure ポータルでは、GitHub、Bitbucket、および Visual Studio Team Services からの継続的なデプロイを構成できます。

Azure Portal で一覧表示されていないクラウド リポジトリ (GitLab など) から継続的なデプロイを手動で構成する方法については、「Setting up continuous deployment using manual steps (手動による手順を使用した継続的デプロイの設定)」を参照してください。

ローカル Git からのデプロイ

開発チームで Git に基づくオンプレミスのローカル ソース コード管理 (SCM) サービスを使用している場合は、App Service へのデプロイ ソースとしてこれを構成できます。

ローカル Git からのデプロイの利点は次のとおりです。

  • バージョン管理により、ロールバックが有効になります。
  • 分岐固有のデプロイでは、個々の スロットにそれぞれ異なる分岐をデプロイできます。
  • Kudu デプロイ エンジンのすべての機能 (デプロイのバージョン管理、ロールバック、パッケージの復元、自動化など) を利用できます。

ローカル Git からのデプロイの欠点は次のとおりです。

  • 各 SCM システムの知識が必要です。
  • 継続的なデプロイのためのターンキー ソリューションがありません。

ローカル Git からデプロイする方法

Azure ポータルで、ローカル Git デプロイを構成できます。

IDE を使用したデプロイ

Visual StudioAzure SDKXcodeEclipseIntelliJ IDEA などの IDE スイートを既に使用している場合は、IDE 内から直接 Azure にデプロイできます。 このオプションは個人開発者に最適です。

Visual Studio は 3 つのデプロイ プロセス (FTP、Git、Web Deploy) をすべてサポートしていますが、FTP または Git と統合されていれば、他の IDE でも App Service にデプロイできます (「 デプロイメント プロセスの概要」を参照してください)。

IDE を使用したデプロイの利点は次のとおりです。

  • エンド ツー エンドのアプリケーション ライフ サイクルのために、ツールが最小限に抑えられる可能性があります。 IDE の外部に移動せずに、アプリの開発、デバッグ、追跡、Azure へのデプロイをすべて行うことができます。

IDE を使用したデプロイの欠点は次のとおりです。

  • ツールの複雑さが増します。
  • チーム プロジェクトの場合、ソース管理システムが引き続き必要になります。

Visual Studio と Azure SDK を使用したデプロイのその他の利点は次のとおりです。

  • Azure SDK により、Visual Studio で Azure リソースが主要リソースになります。 アプリの作成、削除、編集、起動、および終了、バックエンドの SQL データベースのクエリ、Azure アプリのライブ デバッグなどが可能です。
  • Azure でのコード ファイルのライブ編集。
  • Azure でのアプリのライブ デバッグ。
  • Azure エクスプローラーの統合。
  • 差分のみのデプロイ。

Visual Studio から直接デプロイする方法

Azure Toolkit for Eclipse や Azure Toolkit for IntelliJ IDEA を使用してデプロイする方法

Azure には、Azure Toolkit for EclipseAzure Toolkit for IntelliJ を使用することで、Eclipse や IntelliJ から直接 Web Apps をデプロイすることができます。 以下のチュートリアルでは、いずれかの IDE を使用して単純な "Hello" world Web App を Azure にデプロイする手順を説明しています。

コマンド ライン ツールを使用したデプロイの自動化

コマンド ライン ターミナルを開発環境として使用する場合は、コマンド ライン ツールを使用して App Service アプリのデプロイ タスクをスクリプト化できます。

コマンド ライン ツールを使用したデプロイの利点は次のとおりです。

  • スクリプト化されたデプロイ シナリオが可能になります。
  • Azure リソースのプロビジョニングとコードのデプロイを統合できます。
  • Azure のデプロイを既存の継続的な統合スクリプトに統合できます。

コマンド ライン ツールを使用したデプロイの欠点は次のとおりです。

  • GUI を好む開発者には適していません。

コマンド ライン ツールを使用してデプロイを自動化する方法

コマンド ライン ツールの一覧とチュートリアルへのリンクについては、「Automate deployment of your Azure app with command-line tools」(コマンド ライン ツールを使用した Azure アプリのデプロイの自動化) をご覧ください。

次のステップ

シナリオによっては、アプリをステージングと運用バージョンの間で簡単に切り替えることができる環境が必要です。 詳細については、 Web アプリのステージングされたデプロイに関するページをご覧ください。

バックアップと復元計画を策定することは、デプロイ ワークフローの重要な部分です。 App Service のバックアップと復元の機能については、 Web Apps のバックアップに関するページを参照してください。

Azure のロールベースのアクセス許可を使用して、App Service のデプロイへのアクセスを管理する方法については、 RBAC と Web Apps の公開に関するブログを参照してください。