배포 스택에 리소스 추가

완료됨

예금 애플리케이션은 개발 과정 내내 계속 진화하고 있습니다. 팀은 매일 리소스를 추가하고 기능을 테스트하고 있습니다. 기존 Log Analytics 작업 영역과 새로운 Application Insights 인스턴스를 통해 애플리케이션에 가시성이 추가됩니다. 계속해서 리소스를 단일 원자성 단위로 관리하려고 합니다. 배포 스택에 기존 리소스와 새 리소스를 추가하는 방법에 대해 자세히 알아야 합니다.

이 단원에서는 기존 리소스와 새 리소스를 관리되는 리소스로 배포 스택에 추가하는 방법을 알아봅니다.

참고 항목

이 단원의 명령은 개념을 설명하기 위해 표시된 것입니다. 명령을 아직 실행하지 마세요. 여기에서 학습하는 내용을 곧 연습할 예정입니다.

기존 리소스 추가

애플리케이션이 사용하는 리소스는 시간이 지남에 따라 변경됩니다. Azure에 이미 존재하는 리소스를 포함하도록 배포 스택을 업데이트하려면 어떻게 해야 하나요?

Bicep을 사용하면 Azure에 이미 존재하는 리소스를 정의할 수 있습니다. 기존 리소스를 정의하는 것은 약간의 차이점을 두고 새 리소스를 정의하는 것과 비슷합니다. 예를 들어, existing 키워드를 사용하여 리소스 선언에서 기존 리소스를 정의할 수 있습니다.

resource logAnalyticsWorkspace 'Microsoft.OperationsManagement/solutions@2015-11-01-preview' existing  = {
    name: 'log-deposits'
}

배포 스택에 기존 리소스를 관리되는 리소스로 추가하는 경우 이 existing 키워드를 사용할 필요가 없습니다. Bicep 파일, ARM JSON 템플릿 또는 템플릿 사양에서 기존 리소스를 정의하기만 하면 됩니다. 결국 배포 스택이 기존 리소스를 관리합니다.

이전 단원에서 다루었던 Bicep 파일을 살펴보겠습니다. 이 파일은 App Service 요금제, 웹앱, Azure SQL 서버 및 데이터베이스를 정의합니다. 배포 스택에 기존 Log Analytics 작업 영역을 추가하려고 합니다. 작업 영역은 관리되는 리소스가 있는 동일한 리소스 그룹에 있습니다.

기존 Log Analytics 작업 영역을 추가하려면 Bicep 파일에 해당 정의를 추가해야 합니다. 작업 영역을 기존 리소스로 설명하는 코드를 포함할 필요는 없습니다.

// Parameters
@description('The location for all resources.')
param location string = 'eastus'

@description('The name of the SQL database.')
param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'

@description('The password of the admin user.')
param sqlServerAdminUserName string

@description('The name of the admin user.')
@secure()
param sqlServerAdminPassword string

@description('The name of the SQL server.')
param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'

@description('The name of the web application.')
param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'

// Variables
@description('The name of the app service plan.')
var appServicePlanName = 'plan-deposits'

@description('The name of the Log Analytics Workspace.')
var logAnalyticsWorkspaceName = 'log-deposits'

// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: 'S1'
    capacity: 1
  }
}

// Resource - Web App
resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
  name: webApplicationName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
  }
}

// Resource - SQL Server
resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdminUserName
    administratorLoginPassword: sqlServerAdminPassword
  }
}

// Resource - SQL Database
resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: {
    name: 'Standard'
    tier: 'Standard'
  }
}

// Resource - Log Analytics Workspace
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
  name: logAnalyticsWorkspaceName
  location: location
  properties: {
    retentionInDays: 30
    sku: {
      name: 'PerGB2018'
    }
  }
}

Bicep 파일을 수정하여 Bicep 파일의 리소스에 대한 변경 내용이 구현되도록 배포 스택을 업데이트하려고 합니다.

Azure CLI를 사용하여 배포 스택을 업데이트하려면 az stack group create 명령을 사용합니다.

az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none

Bicep 파일을 수정하여 Bicep 파일의 리소스에 대한 변경 내용이 구현되도록 배포 스택을 업데이트하려고 합니다.

Azure PowerShell을 사용하여 배포 스택을 업데이트하려면 Set-AzResourceGroupDeploymentStack 명령을 사용합니다.

Set-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None

새로운 관리되는 리소스 추가

배포 스택에 새 리소스를 추가하는 프로세스는 스택에 기존 리소스를 추가하는 프로세스와 동일합니다. Bicep 파일, ARM JSON 템플릿 또는 템플릿 사양에서 기존 리소스를 정의하기만 하면 됩니다. 결국 배포 스택이 새로운 리소스를 관리합니다.

이전 섹션의 Bicep 파일을 살펴보겠습니다. 이제 파일은 App Service 요금제, 앱 서비스, Azure SQL 서버 및 데이터베이스, Log Analytics 작업 영역을 정의합니다. 배포 스택에 새로운 Application Insights 인스턴스를 추가하고 해당 인스턴스를 사용하도록 앱 서비스를 구성하려고 합니다. 새로운 Application Insights 인스턴스를 추가하려면 Bicep 파일에 해당 정의를 추가하고 새 인스턴스를 사용하도록 앱 서비스를 업데이트해야 합니다.

// Parameters
@description('The location for all resources.')
param location string = 'eastus'

@description('The name of the SQL database.')
param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'

@description('The password of the admin user.')
param sqlServerAdminUserName string

@description('The name of the admin user.')
@secure()
param sqlServerAdminPassword string

@description('The name of the SQL server.')
param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'

@description('The name of the web application.')
param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'

// Variables
@description('The name of the Application Insights instance.')
var applicationInsightsName = 'appinsights-deposits'

@description('The name of the app service plan.')
var appServicePlanName = 'plan-deposits'

@description('The name of the Log Analytics Workspace.')
var logAnalyticsWorkspaceName = 'log-deposits'

// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: 'S1'
    capacity: 1
  }
}

// Resource - Web App
resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
  name: webApplicationName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    siteConfig: {
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsights.properties.InstrumentationKey
        }     
      ]
    }    
  }
}

// Resource - SQL Server
resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdminUserName
    administratorLoginPassword: sqlServerAdminPassword
  }
}

// Resource - SQL Database
resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: {
    name: 'Standard'
    tier: 'Standard'
  }
}

// Resource - Log Analytics Workspace
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
  name: logAnalyticsWorkspaceName
  location: location
  properties: {
    retentionInDays: 30
    sku: {
      name: 'PerGB2018'
    }
  }
}

// Resource - Application Insights
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: applicationInsightsName
  location: location
  kind: 'web'
  properties: {
    Application_Type: 'web'
    WorkspaceResourceId: logAnalyticsWorkspace.id
  }
}

Bicep 파일을 수정하여 Bicep 파일의 리소스에 대한 변경 내용이 구현되도록 배포 스택을 업데이트하려고 합니다.

Azure CLI를 사용하여 배포 스택을 업데이트하려면 az stack group create 명령을 사용합니다.

az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none

참고 항목

Azure CLI에는 배포 스택을 업데이트하는 전용 명령이 없습니다. 스택을 업데이트하려면 create 명령을 사용합니다.

스택에서 업데이트를 수행하면 현재 구독에 스택이 이미 존재한다는 메시지가 표시됩니다. 관리되지 않는 작업 매개 변수의 값이 변경되면 경고가 새 값을 알려 줍니다.

Bicep 파일을 수정하여 Bicep 파일의 리소스에 대한 변경 내용이 구현되도록 배포 스택을 업데이트하려고 합니다.

Azure PowerShell을 사용하여 배포 스택을 업데이트하려면 Set-AzResourceGroupDeploymentStack 명령을 사용합니다.

Set-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None

보시다시피, 기존 리소스를 추가하는 프로세스나 새로운 리소스를 추가하는 프로세스는 동일합니다.