Azure Monitor の閉域化 (AMPLS) - Application Insights編
はじめに
以前に Azure Monitor の閉域化 (AMPLS) -LAW編 をアップしましたが、今回は Application Insights (App Insights) を閉域化する手順について書きたいと思います
※ App Insights を閉域化する場合も LAW と同様に AMPLS を利用します
※ AMPLSって何ぞや?という方は LAW編 の記事をご参照ください
検証環境の構成図
作成の流れ
- AMPLS の作成
- App Insights の作成
- Private Endpoint の作成
- AMPLS への接続 (App Insights, LAW)
- Azure Functions の作成 + vNet統合
- ログ収集の状況確認
1. AMPLS の作成
1-1. AMPLS を新規作成する
1-2. AMPLS が作成されたことを確認する
2. App Insights の作成
2-1. Azure Monitor にアクセスする
2-2. App Insights の作成
2-3. App Insights が作成されたことを確認する
3. Private Endpoint の作成
3-1. Private Endpoint を新規作成する
※プライベート DNS ゾーンについての詳細は公式サイトをご参照ください
3-3. Private Endpoint と プライベート DNS ゾーンが作成されたことを確認する
3-4. プライベート DNSゾーンを Spoke-VNet にリンクする
※ 全てのプライベート DNS ゾーンで Spoke1-VNet との紐づけを行う
4. Azure Monitor リソースの接続 (App Insights / LAW)
4-1. 作成した AMPLS へ App Insights と LAW を接続する
4-2. Azure Monitor リソースが接続されたことを確認する (App Insights / LAW)
4-3. Azure Monitor リソースに対してアクセス制限を設定する (App Insights / LAW)
本環境では 「検索は Internet から実施可、受け取るデータは AMPLS 経由のみ」 という構成にしています。本設定は Azure Monitor リソースの「ネットワーク分離」にて行います
5. Azure Functions の作成 + vNet統合
作成手順や各プランで何が出来るか?についての詳細は公式サイトをご参照ください
5-1. Azure Functions の作成画面に移動する
5-2. Azure Functions を作成する
5-3. HTTP Triger を作成する
5-4. HTTP Triger のコードを修正する
ログ検索をしやすくするために、実行時に出力されるメッセージを追加します
# Log the completion of the function
Write-Host "Function execution completed. (This message has been added by takutsu.)“
5-5. VNet統合の設定
パブリックネットワークではなく、プライベートネットワーク(仮想ネットワーク)経由で Azure Functions からログを送付する設定を行います
6. ログ収集の状況確認
App Insights にて Functions のログが転送されていることを確認します
traces
|where message contains “INFORMATION"
補足1:HTTP Triger のコードについて
サンプルのコードは以下の通りです
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
$name = $Request.Body.Name
}
$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
# Log the completion of the function
Write-Host "Function execution completed. (This message has been added by takutsu.)"
各コードの説明を ChatGPT に作成してもらったので補足として載せておきます
細かくはチェックしてませんが、合っているような気がします。が、間違っていたらこそっと教えてください:-)
コード | 説明 |
---|---|
using namespace System.Net |
System.Net 名前空間を使用することを宣言し、HttpStatusCode などのクラスを利用可能にします。 |
param($Request, $TriggerMetadata) |
Azure Functionsの入力バインディングを受け取るためのパラメータブロックです。$Request はHTTPリクエストを、$TriggerMetadata はトリガーに関するメタデータを表します。 |
Write-Host "PowerShell HTTP trigger function processed a request." |
関数がリクエストを処理したことをログに出力します。 |
Write-Host "Request received. Processing the request." |
カスタムログメッセージで、リクエストが受信され処理が開始されたことを示します。 |
$name = $Request.Query.Name |
HTTPリクエストのクエリパラメータからName を取得し、変数$name に格納します。 |
if (-not $name) { $name = $Request.Body.Name } |
クエリパラメータにName が存在しない場合、リクエストボディからName を取得します。 |
if ($name) { Write-Host "Name parameter received: $name" } else { Write-Host "Name parameter not found in query or body." } |
取得した名前をログに出力します。名前が見つからない場合もその旨をログに出力します。 |
$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response." |
デフォルトのレスポンスメッセージを変数$body に設定します。 |
if ($name) { $body = "Hello, $name. This HTTP triggered function executed successfully." } |
$name が存在する場合、パーソナライズされたレスポンスメッセージを設定します。 |
Write-Host "Response body set to: $body" |
設定されたレスポンスボディをログに出力します。 |
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::OK; Body = $body }) |
HTTPレスポンスのステータスコードを200 OK に設定し、レスポンスボディを$body に設定します。 |
Write-Host "Function execution completed. (This message has been added by takutsu.)" |
関数の実行が完了したことをログに出力します。 |
補足2:App Insights へのパブリックからのアクセスを制限したい場合
項番4-3の「Azure Monitor リソースに対してアクセス制限を設定する (App Insights / LAW)」の設定を以下の様に変更することで、パブリックから App Insight へのアクセスを制限することができます
- 設定変更箇所
- アクセス確認
まとめ
以前の AMPLS の 記事 では LAW と DCE を対象としていましたが、今回は App Insights を対象として検証を実施しました。Azure Functions を作成したのは初めてだったので AMPLS より Azure Functions の作成に時間が掛かりました。。インフラエンジニアの方はあまり Azure Functions の作成などは経験が無いと思いますが、その部分の手順を分かりやすく纏めたつもりです。本記事が App Insights の検証の際に少しでもお役に立てば幸いです
Appendix
公式Docs
Zennの記事
Discussion