我正在尝试创建一个函数应用程序,并通过 PowerShell 脚本将诊断设置更新到驻留在不同订阅中的现有 Log Analytics 工作区。但是,在更新时抛出错误,并出现以下错误,
错误:资源类型“/microsoft.operationalinsights/workspace”对于属性“properties.workspaceId”无效。预期类型为“microsoft.operationalinsights/workspaces”。
这与工作区 ID 有关,因为我注意到对工作区 ID 进行硬编码可以成功检索并更新诊断设置。
PowerShell 脚本:
[CmdLetBinding()]
参数(
[string] $SubscriptionId,
[string] $BusinessFunAppRGName,
[string] $BusinessFunAppName,
[string] $laWorkspaceRGName,
[string] $laWorkspaceName,
[string] $lawSubscriptionId
)
$ResourceId =“/subscriptions/$SubscriptionId/resourceGroups/$BusinessFunAppRGName/providers/Microsoft.Web/sites/$BusinessFunAppName”
$diagSettings = Get-AzDiagnosticSetting -ResourceId $ResourceId
if($diagSettings) { 写入主机“找到诊断设置” } 别的 { 写入主机“未找到诊断设置,正在应用设置...”
$metric = @()
$log = @()
$metric += New-AzDiagnosticSettingMetricSettingsObject -Enabled $true -Category AllMetrics
$log += New-AzDiagnosticSettingLogSettingsObject -Enabled $true -Category FunctionAppLogs
New-AzDiagnosticSetting -Name "DiagnosticSettings" `
-ResourceId $ResourceId `
-Log $log -Metric $metric `
-WorkspaceId "/subscriptions/$lawSubscriptionId/resourceGroups/$laWorkspaceRGName/providers/microsoft.operationalinsights/workspaces/$laWorkspaceName" `
Write-Host "Done"
}
工作流程文件示例:
- name: 'Update diagnostics settings'
uses: azure/powershell@v1
with:
azPSVersion: "latest"
inlineScript: |
arm-templates/business-subscription-afna/update-diagnostics.ps1 `
-SubscriptionId ${{ github.event.inputs.businessSubscriptionId }} `
-BusinessFunAppRGName ${env:parameters.resourceGroup.value} `
-BusinessFunAppName ${env:parameters.funcAppName.value} `
-laWorkspaceRGName ${env:parameters.mgmtlaWorkspaceRGName.value} `
-laWorkspaceName ${env:parameters.mgmtlaWorkspaceName.value} `
-lawSubscriptionId ${env:parameters.mgmtlawSubscriptionId.value}
failOnStandardError: $true
您看到的错误消息表明,workspaceId 属性未设置为
resource ID
的有效 Log Analytics workspace
。错误消息表明预期的资源类型是microsoft.operationalinsights/workspaces
,但实际的资源类型是/microsoft.operationalinsights/workspace
。
这里是更新的脚本,用于为
DiagnosticSetting
创建
Function App.
$RGName = "RG-Name"
$LAWName = "LAW Name"
$FunName = "FunctionAppName"
$FunctionApp = Get-AzWebApp -ResourceGroupName $RGName -Name $FunName
$Workspace = Get-AzOperationalInsightsWorkspace -Name $LAWName -ResourceGroupName $RGName
if (!$Workspace) {
Write-Host "Log Analytics Workspace not found in the specified subscription and resource group."
return
}
$DiagnosticSettings = Get-AzDiagnosticSetting -ResourceId $FunctionApp.Id
if ($DiagnosticSettings) {
Write-Host "Diagnostics Settings Found"
} else {
Write-Host "Diagnostics Settings Not Found, Applying settings..."
$MetricSettings = New-AzDiagnosticSettingMetricSettingsObject -Enabled $true -Category AllMetrics
$LogSettings = New-AzDiagnosticSettingLogSettingsObject -Enabled $true -Category FunctionAppLogs
$WorkspaceId = $Workspace.ResourceId
$Parameters = @{
Name = "DiagnosticSetting"
ResourceId = $FunctionApp.Id
Log = $LogSettings
Metric = $MetricSettings
WorkspaceId = $WorkspaceId
}
New-AzDiagnosticSetting @Parameters
Write-Host "Done"
}
输出:
运行脚本后,已为
Function App
创建诊断。
如果我再次运行相同的脚本,它会检测诊断并且不会再次创建新的脚本。