연습 - 확장 리소스 배포 및 기존 리소스 사용

완료됨

이제 R&D 팀에서 사용할 데이터베이스 만들기를 마쳤으므로 데이터베이스에 대한 액세스가 기록되었는지 확인해야 합니다. 이러한 로그를 기존 Log Analytics 작업 영역에 전송하려 합니다. 또한 R&D 팀의 스토리지 계정에서 동일한 Log Analytics 작업 영역으로 로그를 전송해야 합니다. 이 연습에서는 이러한 요구 사항을 충족하도록 Bicep 파일을 업데이트합니다.

프로세스 중에 다음을 수행합니다.

  • Log Analytics 작업 영역을 만듭니다.
  • Cosmos DB 계정에 진단 설정을 추가하도록 Bicep 파일을 업데이트합니다.
  • 스토리지 계정을 만듭니다.
  • 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

참고

이 예제에서는 Log Analytics 작업 영역을 다른 리소스와 동일한 구독 및 리소스 그룹에 배포합니다. 대부분 애플리케이션 리소스와 다른 리소스 그룹에 Log Analytics 작업 영역을 저장합니다. Bicep에서 작업 영역을 계속 참조할 수 있습니다.

Azure Cosmos DB에 대한 진단 설정 추가

R&D 팀은 Azure Cosmos DB 계정에 대한 모든 요청을 기록해야 합니다. 여러분은 Azure Cosmos DB에 Azure Monitor를 통합하여 Azure Cosmos DB 요청에 대한 정보가 들어 있는 DataPlaneRequests 로그를 수집하기로 결정합니다.

시뮬레이션된 기존 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@2020-03-01-preview' existing = {
      name: logAnalyticsWorkspaceName
    }
    

    이 리소스 정의는 existing 키워드를 사용하며, 이 Bicep 템플릿을 통해 Log Analytics 작업 영역을 배포할 때 일반적으로 지정하는 다른 속성을 의도적으로 생략합니다.

  3. 방금 추가한 코드 아래에 다음 코드를 추가합니다.

    resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-05-01-preview' = {
      scope: cosmosDBAccount
      name: cosmosDBAccountDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'DataPlaneRequests'
            enabled: true
          }
        ]
      }
    }
    

    이 코드는 확장 리소스를 배포합니다. 이 코드는 scope 키워드를 사용하여 리소스를 Azure Cosmos DB 계정에 연결하도록 Bicep에 지시합니다. 또한 이 코드는 Azure가 Azure Cosmos DB 로그를 어디로 보내야 하는지 이해할 수 있도록 logAnalyticsWorkspace 기존 리소스의 id 속성을 사용합니다.

장난감 디자인 문서에 대한 스토리지 계정 만들기

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 Monitor 로그와 Azure Storage 통합을 사용하기 로 결정했습니다 . R&D 팀의 스토리지 계정에서 Blob 스토리지 내의 모든 읽기, 쓰기 및 삭제 활동을 기록하기로 결정합니다.

이전 단계에서 만든 스토리지 계정을 참조하도록 Bicep 템플릿을 업데이트해야 합니다.

  1. main.bicep 파일의 맨 위 근처에서, 매개 변수 정의 아래에 다음 매개 변수 정의를 추가합니다.

    param storageAccountName string
    
  2. 변수 정의 아래에 다음 변수 정의를 추가합니다.

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. 파일 아래쪽의 리소스 정의 아래에 다음 정의를 추가합니다.

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

    두 리소스 모두 existing 키워드를 사용합니다.

  4. 파일 아래쪽의 이전 단계에서 추가한 스토리지 계정 정의 아래에 다음 코드를 추가합니다.

    resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-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@2020-04-01' = {
      name: cosmosDBAccountName
      location: location
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: location
          }
        ]
      }
    }
    
    resource cosmosDBDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2020-04-01' = {
      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@2020-03-01-preview' existing = {
      name: logAnalyticsWorkspaceName
    }
    
    resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-05-01-preview' = {
      scope: cosmosDBAccount
      name: cosmosDBAccountDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'DataPlaneRequests'
            enabled: true
          }
        ]
      }
    }
    
    resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' existing = {
      name: storageAccountName
    
      resource blobService 'blobServices' existing = {
        name: 'default'
      }
    }
    
    resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-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로 돌아갑니다. 리소스 그룹으로 이동합니다. 배포가 첫 번째 배포와 동일한 이름을 사용했기 때문에 하나의 성공적인 배포가 여전히 표시됩니다.

  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 종류의 두 리소스가 나열되어 있습니다. 이러한 리소스는 배포한 확장 리소스입니다. 리소스 중 하나는 스토리지 계정에 연결되고 다른 하나는 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. 로그를 ToyLogs 작업 영역으로 라우팅하도록 구성된 route-logs-to-log-analytics라는 진단 설정이 있습니다.

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

    원하는 경우 스토리지 계정에 Blob 스토리지에 대해 유사한 진단 설정이 활성화되어 있는지 확인할 수도 있습니다.