More Related Content
More from Yuta Matsumura (20)
.NET Core Generic Host のログをAzure Application Insights で見てみよう!
- 2. #vsucjp
松村 優大 (Yuta Matsumura)
Chief Technical Architect (C#, PHP, Azure)
Microsoft MVP (Development Technologies)
Fukuoka.NET Organizer
@tsubakimoto_s
Currently working for
- 4. #vsucjp
Webホスト と 汎用ホスト
.NET Core には 2つのホスト形式があります。
1. Web ホスト ... HTTP サーバーを起動するための構成
2. 汎用ホスト ... 上記以外のアプリを起動するための構成
→コンソールアプリ、バックグラウンドアプリ など
- 5. #vsucjp
Webホスト と 汎用ホスト
.NET Core には 2つのホスト形式があります。
1. Web ホスト ... HTTP サーバーを起動するための構成
2. 汎用ホスト ... 上記以外のアプリを起動するための構成
→コンソールアプリ、バックグラウンドアプリ など
- 6. #vsucjp
コンソールアプリのコードを比較 (Program.cs)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
class Program
{
static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
素のコンソールアプリ 汎用ホストのコンソールアプリ
- 7. #vsucjp
コンソールアプリのコードを比較 (Program.cs)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
class Program
{
static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
素のコンソールアプリ 汎用ホストのコンソールアプリ
- 9. #vsucjp
コンソールアプリのコードを比較 (Program.cs)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
class Program
{
static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
素のコンソールアプリ 汎用ホストのコンソールアプリ
- 14. #vsucjp
セットアップ
1. .NET Core コンソールアプリケーションの作成
2. NuGet パッケージのインストール
Microsoft.ApplicationInsights.WorkerService
3. 汎用ホストの構成に変更
4. appsettings.json の追加
+インストゥルメンテーションキーの追加
+プロジェクト設定
5. テレメトリクライアントを DI に登録
- 15. #vsucjp
$ dotnet new console -n VsCommuunitySample
$ cd VsCommuunitySample
$ dotnet add package Microsoft.ApplicationInsights.WorkerService
$ dotnet add package Microsoft.Extensions.Hosting
$ touch appsettings.json
- 25. #vsucjp
Q. バッチなら Azure Functions でいいのでは?
• コンテナー+汎用ホストアプリケーション
• 可搬性を保ちたい
• ファイル等のリソースを扱う (コンテナー実行後に破棄)
• Azure Functions でのバッチ
• 上記以外の場合
• トリガーが必要な場合
- 26. #vsucjp
Q. バッチなら Azure Functions でいいのでは?
• コンテナー+汎用ホストアプリケーション
• 可搬性を保ちたい
• ファイル等のリソースを扱う (コンテナー実行後に破棄)
• Azure Functions でのバッチ
• 上記以外の場合
• トリガーが必要な場合
- 29. #vsucjp※ Azure Cloud Shell で以下のコマンドを実行する
$ git clone https://github.com/tsubakimoto/vscommunity-sample.git
$ cd vscommunity-sample/VsCommuunitySample
$ az acr build --image generichostsample:v1 ¥
--registry {your-azure-container-registry-name} ¥
--file Dockerfile .
ACR Tasks
ソースコード及び Dockerfile を使って、
コンテナーイメージのビルドを自動化する機能
- 36. #vsucjp
まとめ
• .NET Core の汎用ホストには、コンソールアプリケーション
やバックグラウンドアプリケーションの用途で使える
• Application Insights でのテレメトリ収集には
Microsoft.ApplicationInsights.WorkerService を使う
• アプリケーション終了時に Task.Delay(n).Wait() が必要
• コンテナーイメージを作るパイプラインに ACR Tasks 便利
※ Azure Pipelines もオススメ