事例研究7 - Proseware, Inc.
背景
あなたはProseware社の開発者です。Proseware社の内部サービス、外部サービス、およびアプリケーションに一連のガバナンスポリシーを適用するアプリケーションを開発しています。このアプリケーションは、共通機能のための共有ライブラリも提供します。
要件
ポリシーサービス
「ポリシー サービス」という名前のステートフルな ASP.NET Core 2.1 Web アプリケーションを開発し、Azure App Service Web アプリにデプロイします。このアプリケーションは、Azure Event Grid からのイベントに反応し、それらのイベントに基づいてポリシー アクションを実行します。
アプリケーションは、すべての Application Insights テレメトリに Event Grid イベント ID フィールドを含める必要があります。
ポリシーサービスは、実行するポリシーアクションの数に応じて自動的にスケーリングするために、Application Insightsを使用する必要があります。
ポリシー
ログポリシー
すべての Azure App Service Web アプリは、ログを Azure Blob ストレージに書き込む必要があります。すべてのログ ファイルは、logdrop という名前のコンテナーに保存する必要があります。ログは、コンテナー内に 15 日間保持する必要があります。
認証イベント
認証イベントは、ユーザーのサインインとサインアウトを監視するために使用されます。すべての認証イベントは、ポリシーサービスによって処理される必要があります。サインアウトは、できるだけ迅速に処理されなければなりません。
ポリシーライブラリ
PolicyLib という名前の共有ライブラリがあり、このライブラリにはすべての ASP.NET Core Web サービスおよびアプリケーションに共通する機能が含まれています。PolicyLib ライブラリは次の要件を満たす必要があります。
* Application Insightsのテレメトリから、ユーザー以外の操作を除外します。
* Webサービスが自身をスケーリングできるようにするメソッドを提供する
* スケーリング操作がアプリケーションの使用を妨げないようにする
他の
異常検知サービス
ログ情報を分析して異常を検出する異常検知サービスがあります。これはAzure Machine Learningモデルとして実装されており、Webサービスとしてデプロイされています。
異常が検出された場合、HTTP Webhookを使用して管理者にメールを送信するAzure Functionが呼び出されます。
健康状態のモニタリング
すべてのWebアプリケーションとサービスは、/healthサービスエンドポイントでヘルスモニタリング機能を備えています。
保険金損失
ポリシーサービスをデプロイする際、デプロイ中に適用処理中だったポリシーは適用されない場合があります。
パフォーマンスの問題
負荷が高い場合、異常検知サービスは処理速度が低下し、接続を拒否します。
通知遅延
ユーザーからは、異常検知メールが異常検知から数分後に届くことがあるとの報告がある。
アプリファイルの関連部分を以下に示します。行番号は参考のために記載されており、各行番号には、該当するファイルを示す2文字の接頭辞が付いています。


アプリファイルの関連部分を以下に示します。行番号は参考のために記載されており、各行番号には、該当するファイルを示す2文字の接頭辞が付いています。

ドラッグアンドドロップ問題
PolicyLibの要件を満たしていることを確認する必要があります。
コードセグメントをどのように完成させればよいでしょうか?解答するには、適切なコードセグメントを正しい場所にドラッグしてください。各コードセグメントは、1回、複数回、または全く使用しない場合があります。コンテンツを表示するには、ペイン間の分割バーをドラッグするか、スクロールする必要がある場合があります。
注:正解ごとに1ポイントが加算されます。

正解:

Explanation:
* EventId is held by class EventGridController
* You can add properties to telemetry by implementing ITelemetryInitializer which defines the Initialize method.
* ITelemetry.Context.Properties is correct, but shouldn't be used any more as obsolete public class IncludeEventId : ITelemetryInitializer
{
public void Initialize (ITelemetry telemetry)
{
telemetry.Context.Properties["EventId"] = EventgridController.EventId.Value;
}
}
Reference:
https://docs.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics#sampling-filtering-and-processing-telemetry
https://docs.microsoft.com/en-us/dotnet/api/microsoft.applicationinsights.datacontracts.telemetrycontext.properties?view=azure- dotnet#Microsoft_ApplicationInsights_DataContracts_TelemetryContext_Properties