演習 - 拡張機能リソースをデプロイし、既存のリソースを使用する
R&D チームが使用するデータベースの作成が完了したので、データベースへのアクセスがログされていることを確認する必要があります。 これらのログの送信先となる既存の Log Analytics ワークスペースがあります。 また、R&D チームのストレージアカウントから同じ Log Analytics ワークスペースにログを送信する必要があります。 この演習では、これらの要件を満たすように Bicep ファイルを更新します。
このプロセスでは、次のことを行います。
- Log Analytics ワークスペースを作成します。
- Bicep ファイルを更新して、診断設定を Cosmos DB アカウントに追加します。
- ストレージ アカウントを作成します。
- Bicep ファイルで、ストレージ アカウントの診断設定を更新します。
- テンプレートをデプロイし、結果を確認します。
Log Analytics ワークスペースを作成する
Log Analytics ワークスペースを作成し、組織内に既に作成されているワークスペースをシミュレートします。 Bicep の代わりに Azure CLI を使用してください。
ターミナルで、次の Azure CLI コマンドを実行します。
az monitor log-analytics workspace create \
--workspace-name ToyLogs \
--location eastus
Log Analytics ワークスペースを作成し、組織内に既に作成されているワークスペースをシミュレートします。 Bicep の代わりに Azure PowerShell を使用します。
ターミナルで、次の Azure PowerShell コマンドを実行します。
New-AzOperationalInsightsWorkspace `
-Name ToyLogs `
-Location eastus
Note
この例では、Log Analytics ワークスペースを他のリソースと同じサブスクリプションとリソース グループにデプロイしています。 多くの場合、アプリケーション リソースとは異なるリソース グループに Log Analytics ワークスペースを格納します。 Bicep では引き続きそれらを参照できます。
Azure Cosmos DB の診断設定を追加する
R&D チームは、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
キーワードを使用して、リソースを Azure Cosmos DB アカウントにアタッチする必要があることを Bicep に通知します。 また、このコードで、既存のリソースlogAnalyticsWorkspace
のid
プロパティを使用して、Azure が Azure Cosmos DB ログの送信先を認識できるようにします。
おもちゃのデザイン ドキュメント用のストレージ アカウントを作成する
Azure ストレージ アカウントを作成して、R&D チームがすでに組織内にアカウントを作成していることをシミュレートします。 Bicep の代わりに Azure CLI を使用してください。
ターミナルで、次の Azure CLI コマンドを実行します。 {storageaccountname}
を一意である可能性が高い名前に置き換えます。 名前はすべて小文字で、24 文字以下で、スペースと特殊文字は使用できません。 後で使用するために、この名前をメモしておきます。
az storage account create \
--name {storageaccountname} \
--location eastus
Azure ストレージ アカウントを作成して、R&D チームがすでに組織内にアカウントを作成していることをシミュレートします。 Bicep の代わりに Azure PowerShell を使用します。
ターミナルで、次の Azure PowerShell コマンドを実行します。 {storageaccountname}
を一意である可能性が高い名前に置き換えます。 名前はすべて小文字で、24 文字以下で、スペースと特殊文字は使用できません。
New-AzStorageAccount `
-Name {storageaccountname} `
-Location eastus `
-SkuName Standard_LRS
ストレージ アカウントの診断設定を追加する
R&D チームは、あなたに、成功したすべての要求を、チームが作成したストレージ アカウントにログして欲しいと考えています。 この目標を達成するために、あなたは Azure Storage の Azure Monitor ログとの統合を使用することにしました。 R&D チームのストレージ アカウントの 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-05-15' = { name: cosmosDBAccountName location: location properties: { databaseAccountOfferType: 'Standard' locations: [ { locationName: location } ] } } resource cosmosDBDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2024-05-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 portal に移動します。 ご利用のリソース グループにアクセスします。 依然として成功したデプロイが 1 つ表示されます。これはこのデプロイが最初のデプロイと同じ名前を使用したためです。
成功した 1 件のリンクを選択します。
main というデプロイを選択してから、[デプロイの詳細] を選択して、デプロイされたリソースの一覧を展開します。
種類が
Microsoft.Insights/diagnosticSettings
である 2 つのリソースが一覧表示されていることに注目してください。 これらのリソースは、デプロイした拡張リソースです。 そのリソースの 1 つがストレージ アカウントにアタッチされ、もう 1 つは Azure Cosmos DB アカウントにアタッチされました。 これで Azure Cosmos DB 診断設定が正しく構成されていることを確認できます。Azure Cosmos DB アカウント リソースを選択します。 ポータルで Azure Cosmos DB アカウントが開かれます。
左上の [検索] ボックスに「診断設定」と入力し、[診断設定] メニュー項目を選択します。
Azure portal から、ログのフルテキスト クエリ サポートを有効にするように求められることがあります。 この演習では必要ないので、[今はしない] を選びます。
route-logs-to-log-analytics という名前の診断設定が存在することに注目してください。これは、ログを ToyLogs ワークスペースにルーティングするように構成されています。
必要に応じて、ストレージ アカウントで同様の診断設定が BLOB ストレージに対して有効になっていることも確認できます。