Visual Studio を使用した ASP.NET の Web 配置: 運用環境へのデプロイ
著者: Tom Dykstra
このチュートリアル シリーズでは、Visual Studio 2012 または Visual Studio 2010 を使用して、ASP.NET Web アプリケーションを Azure App Service Web Apps またはサードパーティのホスティング プロバイダーに配置 (発行) する方法について説明します。 このシリーズについては、シリーズの最初のチュートリアルをご覧ください。
概要
このチュートリアルでは、Microsoft Azure アカウントを設定し、ステージング環境と運用環境を作成した後、Visual Studio のワンクリック発行機能を使って ASP.NET Web アプリケーションをステージング環境と運用環境にデプロイします。
必要に応じて、サード パーティのホスティング プロバイダーにデプロイできます。 このチュートリアルで説明する手順のほとんどは、ホスティング プロバイダーでも Azure でも同じですが、アカウントと Web サイトの管理用のユーザー インターフェイスはプロバイダーごとに独自のものがあります。 Microsoft.com Web サイトのプロバイダーのギャラリーで、ホスティング プロバイダーを見つけることができます。
注意: チュートリアルを行っていて、エラー メッセージが表示されたり、うまくいかない場合は、このチュートリアル シリーズのトラブルシューティングに関するページを確認してください。
Microsoft Azure アカウントを取得する
Azure アカウントがまだない場合は、無料の試用アカウントを数分で作成できます。 詳細については、「Azure の無料試用版サイト」を参照してください。
ステージング環境を作成する
Note
このチュートリアルが書かれた後で、Azure App Service には、ステージングと運用の環境を作成するプロセスの多くを自動化するための新機能が追加されました。 Azure App Service での Web アプリ用ステージング環境の設定に関する記事をご覧ください。
テスト環境へのデプロイに関するチュートリアルで説明したように、最も信頼性の高いテスト環境は、運用 Web サイトと同じように設定された、ホスティング プロバイダーの Web サイトです。 多くのホスティング プロバイダーでは、この利点を大幅な追加コストと比較する必要がありますが、Azure では、ステージング アプリとして追加の無料 Web アプリを作成できます。 また、データベースも必要であり、運用データベースの費用に対するその追加費用は、ないか、または最小限です。 Azure では、データベースごとではなく、使用するデータベース ストレージの量に対して課金され、ステージングで使う追加ストレージの量は最小限になります。
テスト環境へのデプロイに関するチュートリアルで説明したように、ステージングと運用環境では、2 つのデータベースを 1 つのデータベースにデプロイします。 これらを分けておきたい場合のプロセスは同じですが、環境ごとに追加のデータベースを作成し、発行プロファイルを作成するときにデータベースごとに適切な発行文字列を選ぶ点が異なります。
チュートリアルのこのセクションでは、ステージング環境に使う Web アプリとデータベースを作成し、運用環境を作成してデプロイする前に、ステージングにデプロイしてテストします。
Note
次の手順では、Azure 管理ポータルを使って Azure App Service で Web アプリを作成する方法を示します。 最新バージョンの Azure SDK では、サーバー エクスプローラーを使うと、Visual Studio から離れずにこれを行うこともできます。 Visual Studio 2013 では、[発行] ダイアログから直接 Web アプリを作成することもできます。 詳しくは、Azure App Service での ASP.NET Web アプリの作成に関する記事をご覧ください。
Microsoft Azure の管理ポータルで、[Web サイト] をクリックしてから [新規] をクリックします。
[Web サイト] をクリックしてから、[カスタム作成] をクリックします。
[新しい Web サイト - カスタム作成] ウィザードが開きます。 カスタム作成ウィザードを使うと、Web サイトとデータベースを同時に作成できます。
ウィザードの [Web サイトの作成] ステップで、アプリケーションのステージング環境に対する一意の URL として使う文字列を [URL] ボックスに入力します。 たとえば、「ContosoUniversity-staging123」 (ContosoUniversity-staging が使用された場合に一意になるように、末尾に乱数を含めます) などと入力します。
ここに入力した文字列と、このテキスト ボックスの右側に表示されている文字列を組み合わせたものが実際の URL になります。
[リージョン] ドロップダウン リストで、最も近いリージョンを選びます。
この設定は、Web アプリが実行するデータ センターを指定します。
[データベース ] ドロップダウン リストで、[新しい SQL データベースを作成します] を選びます。
[DB 接続文字列名] ボックスでは、既定値の DefaultConnection をそのまま使います。
ボックスの下部にある右矢印をクリックします。
次の図は、[Web サイトの作成] ダイアログとサンプル値を示したものです。 ご自分で入力した URL とリージョンは異なります。
ウィザードの [データベースの設定の指定] 手順に進みます。
[名前] ボックスに、ContosoUniversity と一意にするためのランダムな値を入力します (例: ContosoUniversity123)。
[サーバー] ボックスで、[新しい SQL データベース サーバー] を選びます。
管理者名とパスワードを入力します。
ここには、既存の名前とパスワードは入力しません。 後でデータベースへのアクセス時に使用する、現在定義中の新しい名前とパスワードを入力します。
[リージョン] ボックスで、Web アプリ用に選んだのと同じリージョンを選びます。
Web サーバーとデータベース サーバーを同じリージョンにしておくと、最適なパフォーマンスが得られ、費用が最小限に抑えられます。
終了したら、ダイアログ ボックスの下部にあるチェック マークをクリックします。
次の図は、サンプル値を含む [データベースの設定の指定] ダイアログです。 ご自分で入力した値とは異なる場合があります。
管理ポータルは [Web サイト] ページに戻り、[状態] 列に Web アプリが作成されていることが示されます。 しばらくすると (通常は 1 分未満)、Web アプリが正常に作成されたことが [状態] 列に示されます。 左側のナビゲーション バーで、アカウントに含まれる Web アプリの数が [Web サイト] アイコンの横に表示され、データベースの数が [SQL データベース] アイコンの横に表示されます。
実際の Web アプリ名は、図のアプリの例とは異なります。
ステージングにアプリケーションをデプロイする
これで、ステージング環境用の Web アプリとデータベースを作成したので、それにプロジェクトをデプロイできます。
Note
以下の手順では、.publishsettings ファイルをダウンロードして発行プロファイルを作成する方法を示します。これは、Azure だけでなく、サード パーティのホスティング プロバイダーでも機能します。 最新の Azure SDK を使うと、Visual Studio から Azure に直接接続し、Azure アカウントに含まれる Web アプリの一覧から選ぶこともできます。 Visual Studio 2013 では、[Web 発行] ダイアログまたは [サーバー エクスプローラー] ウィンドウから Azure にサインインできます。 詳しくは、Azure App Service での ASP.NET Web アプリの作成に関する記事をご覧ください。
.publishsettings ファイルをダウンロードする
先に作成した Web アプリの名前をクリックします。
[ダッシュボード] タブの [概要] で、[発行プロファイルのダウンロード] をクリックします。
このステップでは、アプリケーションを Web アプリにデプロイするために必要なすべての設定を含むファイルをダウンロードします。 このファイルを Visual Studio にインポートすると、この情報を手動で入力する必要はありません。
Visual Studio からアクセスできるフォルダーに .publishsettings ファイルを保存します。
警告
セキュリティについて - publishsettings ファイルには、Azure のサブスクリプションとサービスを管理するために使われる (エンコードされていない) 資格情報が含まれます。 このファイルのセキュリティに関するベスト プラクティスは、このファイルをソース ディレクトリの外 (Libraries\Documents フォルダーなど) に一時的に保存し、インポートが完了したらそのファイルを削除することです。 悪意のあるユーザーが .publishsettings ファイルへのアクセス権を取得して、Azure サービスを編集、作成、削除する可能性があります。
発行プロファイルを作成する
Visual Studio のソリューション エクスプローラーで ContosoUniversity プロジェクトを右クリックし、コンテキスト メニューの [発行] を選びます。
Web の発行 ウィザードが開きます。
[プロファイル] タブをクリックします。
[インポート] をクリックします。
前にダウンロードした .publishsettings ファイルに移動して、[開く] をクリックします。
[接続] タブで、[接続の検証] をクリックして、設定が正しいことを確認します。
接続が検証されると、[接続の検証] ボタンの横に緑色のチェック マークが表示されます。
一部のホスティング プロバイダーでは、[接続の検証] をクリックすると、[証明書エラー] ダイアログ ボックスが表示されることがあります。 その場合は、サーバー名が予期したものであることを確認します。 サーバー名が正しい場合は、[Visual Studio の今後のセッションのためにこの証明書を保存する] を選んで、[承諾] をクリックします。 (このエラーは、デプロイ先の URL 用の SSL 証明書を購入する費用を回避することをホスティング プロバイダーが選んだことを意味します。有効な証明書を使ってセキュリティ保護された接続を確立することを望む場合は、ホスティング プロバイダーにお問い合わせください。)
次へ をクリックします。
[設定] タブで [ファイル発行オプション] を展開し、[App_Data フォルダーのファイルを除外する] を選びます。
[ファイル発行オプション] の他のオプションについては、IIS へのデプロイに関するチュートリアルをご覧ください。 このステップの結果と、後続のデータベース構成手順を示すスクリーンショットは、データベース構成手順の最後にあります。
[データベース] セクションの DefaultConnection で、メンバーシップ データベースに対するデータベースのデプロイを構成します。
-
[データベースの更新] を選択します。
DefaultConnection のすぐ下にある [リモート接続文字列] ボックスには、.publishsettings ファイルから接続文字列が入力されています。接続文字列には、.pubxml ファイルにプレーンテキストで格納されている SQL Server の資格情報が含まれます。 それらをそこにずっと格納しておきたくない場合は、データベースがデプロイされた後で発行プロファイルからそれらを削除し、代わりに Azure に格納できます。 詳しくは、Scott Hanselman のソースから Azure にデプロイするときに、ASP.NET データベース接続文字列をセキュリティで保護する方法に関するブログをご覧ください。 2. [データベースの更新の構成] をクリックします。 3. [データベースの更新の構成] ダイアログ ボックスで、[SQL スクリプトの追加] をクリックします。 4.[SQL スクリプトの追加] ボックスで、先ほどソリューション フォルダーに保存した aspnet-data-prod.sql スクリプトに移動して、[開く] をクリックします。 5.[データベースの更新の構成] ダイアログ ボックスを閉じます。
[データベース] セクション SchoolContext で、[Code First Migrations を実行する (アプリケーション開始時に実行)] を選びます。
Visual Studio で、
DbContext
クラスに対して [データベースの更新] ではなく、[Code First Migrations を実行する] が表示されます。DbContext
クラスを使ってアクセスするデータベースを、Migrations ではなく dbDacFx プロバイダーを使ってデプロイしたい場合は、MSDN の「Visual Studio および ASP.NET の Web 配置に関する FAQ」の「Migrations を使用しないで Code First データベースをデプロイする方法」をご覧ください。[設定] タブは、次の例のようになります。
次の手順のようにして、プロファイルを保存し、名前を Staging に変更します。
[プロファイル] タブをクリックして、[プロファイルの管理] をクリックします。
インポートにより、FTP 用と Web 配置用の 2 つの新しいプロファイルが作成されます。 Web 配置プロファイルを構成し、このプロファイルの名前を Staging に変更します。
[Web 発行プロファイルの編集] ダイアログ ボックスを閉じます。
[Web の発行] ウィザードを閉じます。
環境インジケーター用の発行プロファイルの変換を構成する
Note
このセクションでは、環境インジケーター用に Web.config の変換を設定する方法について説明します。 インジケーターは <appSettings>
要素内にあるため、Azure App Service にデプロイするときに変換を指定する別の方法があります。 詳しくは、「Azure での Web.config 設定の指定」をご覧ください。
ソリューション エクスプローラーで [プロパティ] を展開してから、[PublishProfiles] を展開します。
Staging.pubxml を右クリックして、[Config 変換を追加] をクリックします。
Visual Studio によって、Web.Staging.config 変換ファイルが作成されて開かれます。
Web.Staging.config 変換ファイルで、開始
configuration
タグの直後に次のコードを挿入します。<appSettings> <add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/> </appSettings>
Staging 発行プロファイルを使うと、この変換によって環境インジケーターが "Prod" に設定されます。 デプロイされた Web アプリで、"Contoso University" の H1 見出しの後に "(Dev)" や "(Test)" などのサフィックスは表示されません。
Web.Staging.config ファイルを右クリックして [変換のプレビュー] をクリックし、コーディングした変換によって期待される変更が生成されることを確認します。
[Web.config のプレビュー] ウィンドウに、Web.Release.config 変換と Web.Staging.config 変換の両方を適用した結果が表示されます。
テスト アプリの一般使用を禁止する
ステージング アプリについての重要な考慮事項は、インターネット上で動作するものの、一般ユーザーにはそれを使わせたくないということです。 ユーザーがそれを見つけて使う可能性を最小限に抑えるには、次の 1 つ以上の方法を使用できます。
- ステージング アプリへのアクセスを、ステージングのテストに使う IP アドレスからのみに許可するファイアウォール規則を設定します。
- 推測できない難読化された URL を使います。
- robots.txt ファイルを作って、検索エンジンがテスト アプリをクロールせず、検索結果でそれへのリンクを報告しないようにします。
最初の方法が最も効果的ですが、Azure App Service ではなく Azure クラウド サービスにデプロイする必要があるため、このチュートリアルでは説明しません。 Azure での Cloud Services と IP の制限について詳しくは、Azure によって提供されるコンピューティング ホスティング オプションに関する記事と、「特定の IP アドレスが Web ロールにアクセスするのをブロックする」をご覧ください。 サード パーティのホスティング プロバイダーにデプロイする場合、IP 制限を実装する方法については、プロバイダーに問い合わせてください。
このチュートリアルでは、robots.txt ファイルを作成します。
ソリューション エクスプローラーで ContosoUniversity プロジェクトを右クリックし、[新しい項目の追加] をクリックします。
robots.txt という名前の新しいテキスト ファイルを作成し、その内容に次のテキストを設定します。
User-agent: * Disallow: /
User-agent
行は、ファイル内の規則がすべての検索エンジン Web クローラー (ロボット) に適用されることを検索エンジンに通知し、Disallow
行はサイト上のページをクロールしてはならないことを指定します。検索エンジンに運用アプリをカタログ化させたいので、このファイルを運用環境のデプロイから除外する必要があります。 そのためには、運用発行プロファイルを作成するときにそこで設定を構成します。
ステージングへのデプロイ
Contoso University プロジェクトを右クリックして [発行] をクリックし、Web の発行ウィザードを開きます。
ステージング プロファイルが選ばれていることを確認します。
[発行] をクリックします。
出力 ウィンドウでは、実行されたデプロイ操作が表示され、デプロイが問題なく完了したことが報告されます。 既定のブラウザーで、デプロイされた Web アプリの URL が自動的に開かれます。
ステージング環境でテストする
環境インジケーターがない (H1 見出しの後に "(Test)" または "(Dev)" がない) ことに注意してください。これは、Web.config での環境インジケーターの変換が成功したことを示しています。
Students ページを実行して、デプロイされたデータベースに学生が含まれないことを確認します。
Instructors ページを実行し、Code First によってデータベースに講師データがシードされたことを確認します。
[Students] メニューから [Add Students] を選び、学生を追加してから、[Students] ページで新しい学生を表示して、データベースに正常に書き込めることを確認します。
[Courses] ページで [Update Credits] をクリックします。 [Update Credits] ページには管理者アクセス許可が必要であるため、[Log In] ページが表示されます。 前に作成した管理者アカウントの資格情報 ("admin" と "prodpwd") を入力します。 [Update Credits] ページが表示され、前のチュートリアルで作成した管理者アカウントがテスト環境に正しくデプロイされたことが確認されます。
無効な URL を要求して ELMAH が追跡するエラーを発生させてから、ELMAH エラー レポートを要求します。 サード パーティのホスティング プロバイダーにデプロイしている場合は、おそらく、前のチュートリアルと同じ理由で、レポートは空です。 ホスティング プロバイダーのアカウント管理ツールを使って、ELMAH がログ フォルダーに書き込めるよう、フォルダーのアクセス許可を構成する必要があります。
作成したアプリケーションは、運用環境で使うのとまったく同じように、クラウドの Web アプリ内で実行されるようになります。 すべてが正常に動作しているので、次のステップは運用環境にデプロイすることです。
運用環境への配置
運用 Web アプリを作成して運用環境にデプロイするプロセスは、ステージングの場合と同じですが、robots.txt をデプロイから除外する必要がある点が異なります。 これを行うには、発行プロファイル ファイルを編集します。
運用環境と運用発行プロファイルを作成する
ステージングに使ったのと同じ手順で、Azure で運用向けの Web アプリとデータベースを作成します。
データベースを作成するとき、前に作成したのと同じサーバーにデータベースを置くか、新しいサーバーを作成するかを選択できます。
.publishsettings ファイルをダウンロードします。
ステージングに使ったのと同じ手順で、運用 .publishsettings ファイルをインポートして発行プロファイルを作成します。
忘れずに、[設定] タブの [データベース] セクションの DefaultConnection で、データ デプロイ スクリプトを構成します。
発行プロファイルの名前を Production に変更します。
ステージングに使ったのと同じ手順で、環境インジケーターの発行プロファイル変換を構成します。
.pubxml ファイルを編集して robots.txt を除外する
発行プロファイル ファイルは、<プロファイル名>.pubxml という名前で、PublishProfiles フォルダーにあります。 PublishProfiles フォルダーは、C# Web アプリケーション プロジェクトでは Properties フォルダーの下、VB Web アプリケーション プロジェクトでは My Project フォルダーの下、Web アプリ プロジェクトでは App_Data フォルダーの下にあります。 各 .pubxml ファイルには、1 つの発行プロファイルに適用される設定が含まれています。 これらのファイルには Web の発行ウィザードで入力した値が格納され、Visual Studio UI では使用できない設定を作成または変更するために編集できます。
.pubxml ファイルは発行プロファイルを作成すると既定でプロジェクトに組み込まれますが、プロジェクトからそれを除外することができ、そのようにしても Visual Studio で使われます。 Visual Studio は、プロジェクトに含まれているかどうかに関係なく、PublishProfiles フォルダーで .pubxml ファイルを検索します。
.pubxml ファイル ごとに、1 つの .pubxml.user ファイルがあります。 [パスワードの保存] オプションを選んだ場合、.pubxml.user ファイルには暗号化されたパスワードが含まれており、既定ではそれはプロジェクトから除外されます。
.pubxml ファイルには、特定の発行プロファイルに関連する設定が含まれています。 すべてのプロファイルに適用される設定を構成したい場合は、.wpp.targets ファイルを作成できます。 ビルド プロセスでは、これらのファイルが .csproj または .vbproj プロジェクト ファイルにインポートされるため、プロジェクト ファイルで構成できるほとんどの設定を、これらのファイルで構成できます。 .pubxml ファイルと .wpp.targets ファイルについて詳しくは、「方法: Visual Studio の Web プロジェクトで発行プロファイル (.pubxml) ファイルと .wpp.targets ファイルの配置設定を編集する」をご覧ください。
ソリューション エクスプローラーで、[プロパティ]、[PublishProfiles] の順に展開します。
Production.pubxml を右クリックして、[開く] をクリックします。
Production.pubxml を右クリックして、[開く] をクリックします。
終了
PropertyGroup
要素の直前に次の行を追加します。<ExcludeFilesFromDeployment> robots.txt </ExcludeFilesFromDeployment>
.pubxml ファイルは、次の例のようになります。
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <WebPublishMethod>MSDeploy</WebPublishMethod> <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedPlatform>Any CPU</LastUsedPlatform> <SiteUrlToLaunchAfterPublish>http://contosou-staging.azurewebsites.net</SiteUrlToLaunchAfterPublish> <ExcludeApp_Data>True</ExcludeApp_Data> <MSDeployServiceURL>waws-prod-bay-001.publish.azurewebsites.windows.net:443</MSDeployServiceURL> <DeployIisAppPath>contosou-staging</DeployIisAppPath> <RemoteSitePhysicalPath /> <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer> <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod> <UserName>[username]</UserName> <_SavePWD>True</_SavePWD> <PublishDatabaseSettings> <!-- database settings removed --> </PublishDatabaseSettings> <ExcludeFilesFromDeployment> robots.txt </ExcludeFilesFromDeployment> </PropertyGroup> <ItemGroup> <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String"> <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue> </MSDeployParameterValue> <MSDeployParameterValue Include="$(DeployParameterPrefix)SchoolContext-Web.config Connection String"> <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue> </MSDeployParameterValue> </ItemGroup> </Project>
ファイルとフォルダーを除外する方法について詳しくは、MSDN の「Visual Studio および ASP.NET の Web 配置に関する FAQ」の「特定のファイルまたはフォルダーをデプロイから除外できますか?」をご覧ください。
運用環境への配置
Web の発行ウィザードを開き、Production 発行プロファイルが選ばれていることを確認してから、[プレビュー] タブの [プレビューの開始] をクリックして、robots.txt ファイルが運用アプリにコピーされないことを確認します。
コピーされるファイルの一覧を確認します。 .aspx.cs、.aspx.designer.cs、Master.cs、Master.designer.cs ファイルなど、すべての .cs ファイルが除外されていることがわかります。 このコードはすべて、bin フォルダーにある ContosoUniversity.dll と ContosoUniversity.pdb ファイルにコンパイルされています。 アプリケーションの実行には .dll のみが必要であり、アプリケーションの実行に必要なファイルのみをデプロイするように前に指定したため、.cs ファイルはデプロイ先の環境にコピーされませんでした。 obj フォルダーおよび ContosoUniversity.csproj と .csproj.user ファイルは、同じ理由で省略されています。
[発行] をクリックして運用環境にデプロイします。
ステージングに使ったのと同じ手順に従い、運用環境でテストします。
URL と、robots.txt ファイルがないことを除き、すべてがステージングと同じです。
まとめ
これで、Web アプリのデプロイとテストが正常に完了し、インターネット経由で公開されています。
次のチュートリアルでは、アプリケーションのコードを更新し、変更をテスト、ステージング、運用環境にデプロイします。
Note
アプリケーションが運用環境で使われるようになったら、復旧計画を実装する必要があります。 つまり、運用アプリからセキュリティで保護されたストレージの場所にデータベースを定期的にバックアップする必要があり、そのようなバックアップを数世代保持する必要があります。 データベースを更新するときは、変更の直前にバックアップ コピーを作成する必要があります。 このようにすれば、間違いを犯し、運用環境にデプロイするまで気付かなかった場合でも、データベースが破損する前の状態にデータベースを復旧できます。 詳細については、「 Azure SQL Database のバックアップと復元」を参照してください。
Note
このチュートリアルでデプロイ対象にしている SQL Server のエディションは Azure SQL Database です。 デプロイ プロセスは SQL Server の他のエディションでも似ていますが、実際の運用アプリケーションでは、一部のシナリオで Azure SQL Database 用に特別なコーディングが必要になる場合があります。 詳しくは、Azure SQL Database の操作および SQL Server と Azure SQL Database の選択に関する記事をご覧ください。