2017年5月9日火曜日

ASP.NET Core WebアプリをBluemixにデプロイしてみた!

「Bluemix」って知ってますか?

アプリケーションを開発・実行する、IBMのクラウド・プラットフォームで、Java、Node.js、PHP、Python、Rubyなど
さまざまな言語で開発することができます。

今回は、Visual Studio 2017で作成したASP.NET Coreアプリを、Bluemixにデプロイしてみます。

ASP.NET Core Webアプリの作成


Visual Studio 2017でASP.NET Core Webアプリを作成します。

まず、「ASP.NET Core Web アプリケーション(.NET Core)」を選択し、プロジェクトを作成します。


























「Web API」を選択します。


これでプロジェクトが作成されました。
Getメソッドはデフォルトで文字列のコレクションを返すように実装されています。
デバッグ開始するとJSONデータのダウンロードとなってしまうのが煩わしいため、下記のように変更しました。
 
[HttpGet]
public string Get()
{
    return "value";
}


Bluemixへデプロイ


Bluemix上にデプロイします。


> cf push <アプリ名>


すると、アップロード完了後、下記のようなログが延々と表示されます。
どうやらアプリケーションの起動に失敗しているようです。


Uploading complete
Destroying container
Successfully destroyed container

0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
(ずっと続く)


ログを確認してみます。


> cf logs <アプリ名> --recent


ヘルスチェックに失敗しているようです。


2017-05-09T16:23:50.19+0900 [APP/0] OUT Now listening on: http://localhost:5000
2017-05-09T16:23:50.19+0900 [APP/0] OUT Application started. Press Ctrl+C to shut down.
2017-05-09T16:24:50.70+0900 [CELL/0] ERR Timed out after 1m0s: health check never passed.


仕方がないので、ヘルスチェックを無効にしてデプロイしてみます。


> cf push <アプリ名> -u none


デプロイに成功し、アプリケーションは正常に開始しましたが、アプリケーションのURLにアクセスするとエラーが発生しました。

 
502 Bad Gateway: Registered endpoint failed to handle the request.



Bluemixのスタートガイドに載っているGitHub上のサンプルアプリと見比べ、いろいろ試してみたところ、Mainメソッド内のホスト生成方法を変更すればよいことが分かりました。

まず、「Microsoft.Extensions.Configuration.CommandLine」をインストールします。






















そして、Mainメソッドを下記のように変更します。
これでデプロイすればOKです。
  
public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .AddCommandLine(args)
        .Build();
 
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .Build();
 
    host.Run();
}
 

(Bluemixへのデプロイとは直接関係ありませんが、この変更を行うとVisual Studio上でデバッグを開始して起動しなくなってしまいました。プロジェクト設定の「起動URL」に設定されている「api/values」を、絶対URLに変更すると起動するようになります。)






















またいつか、どこかで。

0 件のコメント:

コメントを投稿