はじめに
こんにちは!重要な機能開発を任されて最近まで業務で手一杯だったなーがです。今回はBicepで作成したAzure FunctionsとApplication Insightsをリンクする方法について解説します。
Azure Functionsをデプロイした際、Azure PortalのFunctionsの画面から直接ログを確認したいというニーズは多いかと思います。しかし、Bicepでそれぞれを個別にデプロイしただけでは、Azure FunctionsのポータルからApplication Insightsのログを直接参照することができず、一手間かかってしまいます。
今回の設定を行うことで、Azure Functionsの管理画面からシームレスにログの確認ができるようになります。
課題:Azure FunctionsからApplication Insightsのログを直接確認できない
BicepでAzure FunctionsとApplication Insightsをデプロイしただけでは、Portal上のFunctionsのメニューからログを確認しようとしても、関連付けがされていないため、以下のように表示されてしまいます。この状態では、Application Insightsのリソースを直接開いてログを確認する必要があり、少し不便です。


解決方法
この問題は、Azure Functionsのアプリケーション設定に、Application Insightsの接続文字列を追加することで解決します。
具体的には、Azure FunctionsリソースのsiteConfig.appSettings
にAPPLICATIONINSIGHTS_CONNECTION_STRING
という名前のプロパティを追加し、その値としてApplication Insightsリソースのproperties.ConnectionString
を指定します。
公式ドキュメントによると、APPINSIGHTS_INSTRUMENTATIONKEY
またはAPPLICATIONINSIGHTS_CONNECTION_STRING
のいずれかを設定することで連携できます。しかし、APPINSIGHTS_INSTRUMENTATIONKEY
は2025年3月31日にサポートが終了しているため、今後はAPPLICATIONINSIGHTS_CONNECTION_STRING
の使用が推奨されます。
参照
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
name: 'application-insights'
location: location
kind: 'web'
~~ 省略 ~~
}
}
resource funcApp 'Microsoft.Web/sites@2023-12-01' = {
name: 'func-app'
~~ 省略 ~~
properties: {
siteConfig: {
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsights.properties.ConnectionString
}
]
}
}
}
この設定をデプロイ後、Azure Portalで確認すると、Azure FunctionsがApplication Insightsに正しく接続されていることが分かります。

これにより、Azure Functionsの「ログ」メニューから直接クエリを実行して、Application Insightsに送信されたログを確認できるようになります。

Function AppとApplication Insightsを関連付けると、Azureの内部ではtags
プロパティにhidden-link
という特殊なタグが作成されます。これは、Azure PortalなどのUI上でリソース間の関連付けを表現するために使用されるものです。
APPLICATIONINSIGHTS_CONNECTION_STRING
をアプリケーション設定に追加するだけで、通常はこのhidden-link
タグがAzureによって自動的に作成・管理されます。そのため、Bicepテンプレートで明示的にhidden-link
タグを記述する必要は基本的にありません。
このタグを手動で管理することは、サブスクリプションIDやリソースグループ名などをBicepファイルに含める必要があり、テンプレートの複雑性を増す要因にもなります。
そのため、推奨される方法はAPPLICATIONINSIGHTS_CONNECTION_STRING
の設定に任せて、hidden-link
の自動作成を利用することです。
参照:In bicep, how to property and securly set `hidden-link` in tags?
応用:複数のAzure Functionsを1つのApplication Insightsに紐付ける
複数のAzure Functionsのログを、1つのApplication Insightsでまとめて管理することも可能です。その場合も設定は同様で、各Azure FunctionsのappSettings
に、共通のApplication Insightsの接続文字列を追加するだけです。
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
name: 'application-insights'
location: location
kind: 'web'
~~ 省略 ~~
}
}
resource funcApp1 'Microsoft.Web/sites@2023-12-01' = {
name: 'func-app-1'
~~ 省略 ~~
properties: {
siteConfig: {
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsights.properties.ConnectionString
}
]
}
}
}
resource funcApp2 'Microsoft.Web/sites@2023-12-01' = {
name: 'func-app-2'
~~ 省略 ~~
properties: {
siteConfig: {
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsights.properties.ConnectionString
}
]
}
}
}
ログの識別性を高める
複数のFunctionsからログを集約すると、どのログがどのFunction Appから出力されたものか区別がつきにくくなる場合があります。
その際は、環境変数WEBSITE_CLOUD_ROLENAME
を設定することで、Application Insights上のログに表示されるクラウドロール名(cloud_RoleName
)を任意の名前に変更できます。これにより、ログの発生源を容易に特定できるようになります。
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
name: 'application-insights'
location: location
kind: 'web'
~~ 省略 ~~
}
}
resource funcApp1 'Microsoft.Web/sites@2023-12-01' = {
name: 'func-app-1'
~~ 省略 ~~
properties: {
siteConfig: {
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsights.properties.ConnectionString
}
{
name: 'WEBSITE_CLOUD_ROLENAME'
value: 'function-application-1'
}
]
}
}
}
resource funcApp2 'Microsoft.Web/sites@2023-12-01' = {
name: 'func-app-2'
~~ 省略 ~~
properties: {
siteConfig: {
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsights.properties.ConnectionString
}
{
name: 'WEBSITE_CLOUD_ROLENAME'
value: 'function-application-2'
}
]
}
}
}

WEBSITE_CLOUD_ROLENAME
を指定しない場合、cloud_RoleName
にはAzure Functionsのリソース名(この例では func-app-1
, func-app-2
)が自動的に使用されます。

おわりに
今回は、Bicepを利用してAzure FunctionsとApplication Insightsを連携させる方法についてご紹介しました。APPLICATIONINSIGHTS_CONNECTION_STRING
を設定するという簡単な手順で、開発や運用の効率を大きく向上させることができます。Bicepを利用してAzure FunctionsとApplication Insightsでリソースを管理する際には、ぜひこの設定を活用してみてください。
今回作成したリソースはこちら