练习 - 部署扩展资源并使用现有资源
你已为研发团队创建了要使用的数据库,接下来需要确保对该数据库的访问被记录下来。 你有一个现有的 Log Analytics 工作区,希望将这些日志发送到该工作区。 你还需要将日志从研发团队的存储帐户发送到同一 Log Analytics 工作区。 在此练习中,你将更新 Bicep 文件以满足这些要求。
在此过程中,你将:
- 创建 Log Analytics 工作区。
- 更新 Bicep 文件,以将诊断设置添加到 Cosmos DB 帐户。
- 创建存储帐户。
- 在 Bicep 文件中,更新存储帐户的诊断设置。
- 部署模板并验证结果。
创建 Log Analytics 工作区
创建一个 Log Analytics 工作区来模拟组织中已创建的工作区。 请使用 Azure CLI 而不是 Bicep。
在终端中,运行以下 Azure CLI 命令:
az monitor log-analytics workspace create \
--workspace-name ToyLogs \
--location eastus
创建一个 Log Analytics 工作区来模拟组织中已创建的工作区。 使用 Azure PowerShell 而不是 Bicep。
在终端中,运行以下 Azure PowerShell 命令:
New-AzOperationalInsightsWorkspace `
-Name ToyLogs `
-Location eastus
备注
本示例将 Log Analytics 工作区部署到与其他资源相同的订阅和资源组中。 在许多情况下,你将 Log Analytics 工作区存储在与应用程序资源不同的资源组中。 Bicep 仍可引用它们。
为 Azure Cosmos DB 添加诊断设置
研发团队需要将所有请求记录到 Azure Cosmos DB 帐户。 你决定使用适用于 Azure Cosmos DB 的 Azure Monitor 集成来收集 DataPlaneRequests 日志,其中包括有关 Azure Cosmos DB 请求的信息。
创建好了模拟的预先存在的 Log Analytics 工作区后,可以从 Bicep 模板中引用它作为现有资源。 可以将它用作 Azure Cosmos DB 日志的目标。
若要添加诊断设置,请遵循以下步骤:
在 Visual Studio Code 中,在编辑器中打开 main.bicep 文件,然后在现有变量定义下,添加以下代码:
var logAnalyticsWorkspaceName = 'ToyLogs' var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
在文件底部的资源定义下,添加以下代码:
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' existing = { name: logAnalyticsWorkspaceName }
请注意,此资源定义使用
existing
关键字,并且你特意省略了通过此 Bicep 模板部署 Log Analytics 工作区时通常指定的其他属性。在刚添加的代码下面,添加以下代码:
resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { scope: cosmosDBAccount name: cosmosDBAccountDiagnosticSettingsName properties: { workspaceId: logAnalyticsWorkspace.id logs: [ { category: 'DataPlaneRequests' enabled: true } ] } }
请注意,此代码将部署扩展资源。 它使用
scope
关键字来指示 Bicep 应将资源附加到 Azure Cosmos DB 帐户。 此代码还使用logAnalyticsWorkspace
现有资源的id
属性,以便 Azure 了解将 Azure Cosmos DB 日志发送到何处。
为玩具设计文档创建存储帐户
创建 Azure 存储帐户,以模拟研发团队已在组织中创建的存储帐户。 请使用 Azure CLI 而不是 Bicep。
在终端中,运行以下 Azure CLI 命令。 将 {storageaccountname}
替换为可能唯一的名称。 名称必须全部为小写,不超过 24 个字符,不能有空格或特殊字符。 记下名称以供稍后使用。
az storage account create \
--name {storageaccountname} \
--location eastus
创建 Azure 存储帐户,以模拟研发团队已在组织中创建的存储帐户。 使用 Azure PowerShell 而不是 Bicep。
在终端中,运行以下 Azure PowerShell 命令。 将 {storageaccountname}
替换为可能唯一的名称。 名称必须全部为小写,不超过 24 个字符,不能有空格或特殊字符。
New-AzStorageAccount `
-Name {storageaccountname} `
-Location eastus `
-SkuName Standard_LRS
为存储帐户添加诊断设置
你的研发团队希望你将所有成功的请求记录到他们创建的存储帐户中。 你决定将 Azure 存储集成与 Azure Monitor 日志结合使用,以达到此目标。 你决定将 Blob 存储中的所有读取、写入和删除活动记录在研发团队的存储帐户中。
你需要更新 Bicep 模板,以引用在上一步中创建的存储帐户。
在 main.bicep 文件顶部附近的参数定义下,添加以下参数定义:
param storageAccountName string
在变量定义下,添加以下变量定义:
var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
在文件底部的资源定义下,添加以下定义:
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' existing = { name: storageAccountName resource blobService 'blobServices' existing = { name: 'default' } }
请注意,这两个资源都使用
existing
关键字。在文件底部,在上一步中添加的存储帐户定义下方,添加以下代码:
resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { scope: storageAccount::blobService name: storageAccountBlobDiagnosticSettingsName properties: { workspaceId: logAnalyticsWorkspace.id logs: [ { category: 'StorageRead' enabled: true } { category: 'StorageWrite' enabled: true } { category: 'StorageDelete' enabled: true } ] } }
请注意,此扩展资源已将其
scope
设置为嵌套现有资源。 Bicep 知道它应将扩展资源附加到blobServices
子资源。完成后,完整的 Bicep 模块应如下所示:
param cosmosDBAccountName string = 'toyrnd-${uniqueString(resourceGroup().id)}' param cosmosDBDatabaseThroughput int = 400 param location string = resourceGroup().location param storageAccountName string var cosmosDBDatabaseName = 'FlightTests' var cosmosDBContainerName = 'FlightTests' var cosmosDBContainerPartitionKey = '/droneId' var logAnalyticsWorkspaceName = 'ToyLogs' var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics' var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics' resource cosmosDBAccount 'Microsoft.DocumentDB/databaseAccounts@2024-11-15' = { name: cosmosDBAccountName location: location properties: { databaseAccountOfferType: 'Standard' locations: [ { locationName: location } ] } } resource cosmosDBDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2024-11-15' = { parent: cosmosDBAccount name: cosmosDBDatabaseName properties: { resource: { id: cosmosDBDatabaseName } options: { throughput: cosmosDBDatabaseThroughput } } resource container 'containers' = { name: cosmosDBContainerName properties: { resource: { id: cosmosDBContainerName partitionKey: { kind: 'Hash' paths: [ cosmosDBContainerPartitionKey ] } } options: {} } } } resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' existing = { name: logAnalyticsWorkspaceName } resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { scope: cosmosDBAccount name: cosmosDBAccountDiagnosticSettingsName properties: { workspaceId: logAnalyticsWorkspace.id logs: [ { category: 'DataPlaneRequests' enabled: true } ] } } resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' existing = { name: storageAccountName resource blobService 'blobServices' existing = { name: 'default' } } resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { scope: storageAccount::blobService name: storageAccountBlobDiagnosticSettingsName properties: { workspaceId: logAnalyticsWorkspace.id logs: [ { category: 'StorageRead' enabled: true } { category: 'StorageWrite' enabled: true } { category: 'StorageDelete' enabled: true } ] } }
保存对文件所做的更改。
将模板部署到 Azure
在终端中,运行以下 Azure CLI 命令。 将 {storageaccountname}
替换为之前在本练习中创建的存储帐户的名称。
az deployment group create \
--template-file main.bicep \
--parameters storageAccountName={storageaccountname}
在终端中,运行以下 Azure PowerShell 命令。 将 {storageaccountname}
替换为之前在本练习中创建的存储帐户的名称。
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-storageAccountName {storageaccountname}
检查你的部署
在浏览器中返回到 Azure 门户。 转到你的资源组。 你仍然会看到一个成功的部署,因为该部署使用了与第一个部署相同的名称。
选择“1 个成功”链接。
选择名为“main”的部署,然后选择“部署详细信息”以展开已部署的资源列表。
请注意,列出了两个类型为
Microsoft.Insights/diagnosticSettings
的资源。 这些资源是你部署的扩展资源。 其中一个资源附加到存储帐户,另一个附加到 Azure Cosmos DB 帐户。 现在,你可以验证 Azure Cosmos DB 诊断设置是否配置正确。选择 Azure Cosmos DB 帐户资源。 门户会打开 Azure Cosmos DB 帐户。
在左上角的“搜索”框中,输入“诊断设置”,然后选择“诊断设置”菜单项。
Azure 门户可能会提示你启用对日志记录的全文查询支持。 本练习不会用到它,因此请选择“以后再说”。
请注意,有一个名为“route-logs-to-log-analytics”的诊断设置,它被配置为将日志路由到“ToyLogs”工作区。
如果需要,还可以验证存储帐户是否为 Blob 存储启用了类似的诊断设置。