Azure Functions を使用してカスタム可用性テストを作成して実行する
この記事では、独自のビジネス ロジックを使用して TimerTrigger
関数で指定された構成に従って定期的に実行される Azure 関数を TrackAvailability()
で作成する方法について説明します。 このテストの結果は、Application Insights リソースに送信されます。そこでは、可用性の結果データに対してクエリを実行し、アラートを生成することができます。 次に、ポータルでの可用性の監視を使用して実行できるものと同様のカスタマイズされたテストを作成できます。 カスタマイズされたテストを使用すると、次のことができます。
- ポータル UI を使用して可能なよりも複雑な可用性テストを作成します。
- Azure 仮想ネットワーク内のアプリを監視します。
- エンドポイント アドレスを変更します。
- この機能がリージョンで使用できない場合でも、可用性テストを作成します。
注意
この例は、Azure 関数内で TrackAvailability()
API 呼び出しが機能する仕組みを示すためだけに設計されています。 基になる HTTP テスト コードまたはビジネス ロジックを記述する方法を示すものではありません (それは、これを完全に機能する可用性テストにする場合に必要になります)。 既定で、この例を実行すると、基本的な可用性 HTTP GET テストが作成されます。
これらの手順に従うには、専用プランを使用して、App Service Editor でコードの編集を許可する必要があります。
タイマー トリガー関数を作成する
Azure Functions リソースを作成します。
Application Insights リソースが既にある場合:
既定では、Azure Functions によって Application Insights リソースが作成されます。 ただし、前に作成したリソースを使用する場合は、作成時にそれを指定する必要があります。
Azure Functions リソースの作成方法の手順を実行し、次の変更を行ってください。
[監視] タブで、Application Insights のドロップダウン ボックスを選択し、リソースの名前を入力または選択します。
タイマーによってトリガーされる関数用の Application Insights リソースをまだ作成していない場合:
- 既定では、Azure Functions アプリケーションを作成するときに、Application Insights リソースが自動的に作成されます。 Azure Functions リソースの作成方法の手順を実行します。
Note
関数は、従量課金、Premium、または App Service プランでホストできます。 仮想ネットワークの背後でテストする場合、または非パブリック エンドポイントをテストする場合は、従量課金プランの代わりに Premium プランを使用する必要があります。 [ホスティング] タブでプランを選択します。関数アプリの作成時に最新の .NET バージョンが選択されていることを確認します。
タイマー トリガー関数を作成します。
- 該当する関数アプリで、 [関数] タブを選択します。
- [追加] を選択します。 [関数の追加] ウィンドウで、次の構成を選択します。
- [開発環境]: [ポータルで開発]
- [テンプレートの選択]: [タイマー トリガー]
- [追加] を選択して、タイマー トリガー関数を作成します。
App Service Editor でコードを追加して編集する
デプロイした関数アプリに移動し、[開発ツール] で [App Service Editor] タブを選択します。
新しいファイルを作成するには、タイマー トリガー関数の下 (たとえば TimerTrigger1) を右クリックし、[新しいファイル] を選択します。 次に、ファイルの名前を入力し、Enter を押します。
function.proj という新しいファイルを作成し、次のコードを貼り付けます。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.ApplicationInsights" Version="2.15.0" /> <!-- Ensure you’re using the latest version --> </ItemGroup> </Project>
runAvailabilityTest.csx という新しいファイルを作成し、次のコードを貼り付けます。
using System.Net.Http; public async static Task RunAvailabilityTestAsync(ILogger log) { using (var httpClient = new HttpClient()) { // TODO: Replace with your business logic await httpClient.GetStringAsync("https://www.bing.com/"); } }
REGION_NAME
環境変数を有効な Azure 可用性の場所として定義します。Azure CLI で次のコマンドを実行して、使用可能なリージョンを一覧表示します。
az account list-locations -o table
次のコードを run.csx ファイルにコピーします。 (既存のコードを置き換えます)。
#load "runAvailabilityTest.csx" using System; using System.Diagnostics; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Channel; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; private static TelemetryClient telemetryClient; // ============================================================= // ****************** DO NOT MODIFY THIS FILE ****************** // Business logic must be implemented in RunAvailabilityTestAsync function in runAvailabilityTest.csx // If this file does not exist, please add it first // ============================================================= public async static Task Run(TimerInfo myTimer, ILogger log, ExecutionContext executionContext) { if (telemetryClient == null) { // Initializing a telemetry configuration for Application Insights based on connection string var telemetryConfiguration = new TelemetryConfiguration(); telemetryConfiguration.ConnectionString = Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING"); telemetryConfiguration.TelemetryChannel = new InMemoryChannel(); telemetryClient = new TelemetryClient(telemetryConfiguration); } string testName = executionContext.FunctionName; string location = Environment.GetEnvironmentVariable("REGION_NAME"); var availability = new AvailabilityTelemetry { Name = testName, RunLocation = location, Success = false, }; availability.Context.Operation.ParentId = Activity.Current.SpanId.ToString(); availability.Context.Operation.Id = Activity.Current.RootId; var stopwatch = new Stopwatch(); stopwatch.Start(); try { using (var activity = new Activity("AvailabilityContext")) { activity.Start(); availability.Id = Activity.Current.SpanId.ToString(); // Run business logic await RunAvailabilityTestAsync(log); } availability.Success = true; } catch (Exception ex) { availability.Message = ex.Message; throw; } finally { stopwatch.Stop(); availability.Duration = stopwatch.Elapsed; availability.Timestamp = DateTimeOffset.UtcNow; telemetryClient.TrackAvailability(availability); telemetryClient.Flush(); } }
可用性を確認する
すべてが動作していることを確認するには、Application Insights リソースの [可用性] タブでグラフを確認します。
注意
TrackAvailability()
で作成されたテスト名の横には、 [CUSTOM] と表示されます。
エンドツーエンドのトランザクションの詳細を表示するには、[詳細の表示] で [成功] または [失敗] を選択します。 次に、サンプルを選択します。 グラフでデータ ポイントを選択することにより、エンドツーエンドのトランザクションの詳細も取得できます。
Log Analytics のサンプル クエリ
Log Analytics を使用して、可用性の結果、依存関係、その他を見ることができます。 Log Analytics の詳細については、ログ クエリの概要に関するページを参照してください。