演習 - 拡張機能リソースをデプロイし、既存のリソースを使用する

完了

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 ログの保存先として使用できます。

診断設定を追加するには、以下の手順を使用します。

  1. Visual Studio Code のエディターで、main.bicep ファイルを開き、既存の変数定義の下に次のコードを追加します。

    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  2. ファイルの末尾にあるリソース定義の下に、次のコードを追加します。

    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' existing = {
      name: logAnalyticsWorkspaceName
    }
    

    このリソース定義では existing キーワードが使用されており、この Bicep テンプレートを使用して Log Analytics ワークスペースをデプロイする場合に通常指定する他のプロパティが意図的に省略されていることに注意してください。

  3. 追加したばかりのコードの下に、次のコードを追加します。

    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 に通知します。 また、このコードで、既存のリソース logAnalyticsWorkspaceid プロパティを使用して、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 テンプレートを更新する必要があります。

  1. main.bicep ファイルの先頭付近にあるパラメーター定義の下に、次のパラメーター定義を追加します。

    param storageAccountName string
    
  2. 変数の定義の下に、次の変数定義を追加します。

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. ファイルの末尾にあるリソース定義の下に、次の定義を追加します。

    resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' existing = {
      name: storageAccountName
    
      resource blobService 'blobServices' existing = {
        name: 'default'
      }
    }
    

    これらのリソースではどちらも existing キーワードを使用することに注意してください。

  4. ファイルの末尾にある、前の手順で追加したストレージ アカウント定義の下に、次のコードを追加します。

    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
          }
        ]
      }
    }
    
  5. 変更をファイルに保存します。

テンプレートを 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}

デプロイをチェックする

  1. ブラウザーで、Azure portal に移動します。 ご利用のリソース グループにアクセスします。 依然として成功したデプロイが 1 つ表示されます。これはこのデプロイが最初のデプロイと同じ名前を使用したためです。

  2. 成功した 1 件のリンクを選択します。

  3. main というデプロイを選択してから、[デプロイの詳細] を選択して、デプロイされたリソースの一覧を展開します。

    Screenshot of the Azure portal interface for the specific deployment, with the Azure Cosmos DB resources as well as two resources with type Microsoft.Insights/diagnosticSettings.

    種類が Microsoft.Insights/diagnosticSettings である 2 つのリソースが一覧表示されていることに注目してください。 これらのリソースは、デプロイした拡張リソースです。 そのリソースの 1 つがストレージ アカウントにアタッチされ、もう 1 つは Azure Cosmos DB アカウントにアタッチされました。 これで Azure Cosmos DB 診断設定が正しく構成されていることを確認できます。

  4. Azure Cosmos DB アカウント リソースを選択します。 ポータルで Azure Cosmos DB アカウントが開かれます。

    Screenshot of the Azure portal interface for the specific deployment, with the Azure Cosmos DB account highlighted.

  5. 左上の [検索] ボックスに「診断設定」と入力し、[診断設定] メニュー項目を選択します。

    Screenshot of the Azure portal interface for the Azure Cosmos DB account, showing the search field with 'Diagnostic settings' entered and the 'Diagnostic settings' menu item highlighted.

  6. Azure portal から、ログのフルテキスト クエリ サポートを有効にするように求められることがあります。 この演習では必要ないので、[今はしない] を選びます。

    Screenshot of the Azure portal interface for the Azure Cosmos DB account showing Diagnostic settings page with prompt to enable full-text query.

  7. route-logs-to-log-analytics という名前の診断設定が存在することに注目してください。これは、ログを ToyLogs ワークスペースにルーティングするように構成されています。

    Screenshot of the Azure portal interface for the Azure Cosmos DB account, showing the diagnostic settings.

    必要に応じて、ストレージ アカウントで同様の診断設定が BLOB ストレージに対して有効になっていることも確認できます。