연습 - Bicep 템플릿에 매개 변수 및 변수 추가
이 연습에서는 이전에 만든 Bicep 템플릿을 다음과 같이 업데이트합니다.
- 리소스 위치 및 이름에 대한 매개 변수를 허용합니다.
- 비즈니스 규칙을 사용하여 배포되는 리소스에 적절한 SKU를 선택합니다.
프로세스 중에 다음을 수행합니다.
location
매개 변수를 포함하도록 템플릿을 업데이트합니다.- 리소스 이름에 대한 매개 변수 및 변수를 포함하도록 템플릿을 업데이트합니다.
- 식을 사용하여 매개 변수의 기본값을 설정합니다.
- 각 리소스의 SKU에 대한 변수를 포함하도록 템플릿을 업데이트합니다.
- 배포를 테스트하여 템플릿이 유효한지 확인합니다.
위치 및 이름 매개 변수 추가
Visual Studio Code의 main.bicep 파일에서 다음 코드를 파일의 맨 위에 추가합니다.
param location string = 'eastus' param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}' param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}' var appServicePlanName = 'toy-product-launch-plan'
Bicep Linter는 각 매개 변수 및 변수 이름 아래에 노란색 물결선을 추가하여 템플릿에서 사용되지 않음을 나타냅니다. 이 문제를 곧 해결할 예정입니다.
문자열 보간,
uniqueString()
함수를 포함하는 식을 사용하여 기본 매개 변수 값을 정의하고 있습니다. 이 템플릿을 배포하는 사용자는 배포 시 값을 지정하여 기본 매개 변수 값을 재정의할 수 있지만 변수 값을 재정의할 수는 없습니다.또한 Azure App Service 플랜 이름에는 변수를 사용하고 있지만 다른 이름에는 매개 변수를 사용합니다. 스토리지 계정 및 App Service 앱에는 전역적으로 고유한 이름이 필요하지만 App Service 요금제 이름은 해당 리소스 그룹 내에서만 고유하면 됩니다. 이러한 차이는 배포가 모두 다른 리소스 그룹으로 배치되는 한 여러 배포에서 동일한 App Service 플랜 이름을 사용할 걱정은 없다는 것을 의미합니다.
팁
location
매개 변수를westus3
로 설정하도록 지정합니다. 일반적으로resourceGroup().location
속성을 사용하여 리소스 그룹과 동일한 위치에 리소스를 만듭니다. 그러나 Microsoft Learn 샌드박스를 사용하는 경우 리소스 그룹의 위치와 일치하지 않는 특정 Azure 지역을 사용해야 합니다.리소스 정의에서
location
및name
속성이 설정된 위치를 찾아 매개 변수 값을 사용하도록 업데이트합니다. 작업이 완료되면 Bicep 파일 내의 리소스 정의가 다음과 같이 표시됩니다.resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: 'Standard_LRS' } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: 'F1' } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
변경 내용을 파일에 저장합니다.
각 환경 유형에 대해 자동으로 SKU 설정
Visual Studio Code의 main.bicep 파일에서, 이전 작업에서 만든 매개 변수 아래에 다음 Bicep 매개 변수를 추가합니다.
@allowed([ 'nonprod' 'prod' ]) param environmentType string
허용되는 값 집합을 사용하여 매개 변수를 정의하고 있지만 이 매개 변수의 기본값을 지정하지는 않습니다.
appServicePlanName
변수를 선언하는 줄 아래에 다음 변수 정의를 추가합니다.var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
3개로 구성된 연산자를 사용하여
if/then/else
논리를 표현함으로써 이러한 변수의 값을 설정하고 있습니다.리소스 정의에서
sku
속성이 설정된 위치를 찾아 매개 변수 값을 사용하도록 업데이트합니다. 작업이 완료되면 Bicep 파일의 리소스 정의가 다음과 같이 표시됩니다.resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: storageAccountSkuName } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
모든 항목을 매개 변수화하지는 않았습니다. 이러한 값이 배포 간에 변경되지 않는 것을 알고 있는 일부 속성은 리소스 정의에서 바로 설정했습니다.
변경 내용을 파일에 저장합니다.
Bicep 파일 확인
위의 모든 변경을 완료한 후에는 main.bicep 파일이 다음 예제와 같습니다.
param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
@allowed([
'nonprod'
'prod'
])
param environmentType string
var appServicePlanName = 'toy-product-launch-plan'
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSkuName
}
}
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
파일이 일치하지 않는 경우 예제를 복사하거나 예제와 일치하도록 파일을 조정합니다.
업데이트된 Bicep 템플릿 배포
터미널에서 다음 Azure CLI 명령을 실행합니다.
az deployment group create \
--template-file main.bicep \
--parameters environmentType=nonprod
터미널에서 다음 Azure PowerShell 명령을 실행합니다.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-environmentType nonprod
배포를 실행할 때 environmentType
매개 변수 값을 명시적으로 지정합니다. 매개 변수 값에 유효한 기본값이 지정되어 있기 때문에 다른 매개 변수 값을 지정할 필요가 없습니다.
배포 확인
브라우저에서 Azure Portal로 돌아가 리소스 그룹으로 이동합니다. 이 배포에는 첫 번째 배포와 동일한 이름이 사용되었으므로 성공적인 배포가 하나 표시됩니다.
1개 성공 링크를 선택합니다.
main이라는 배포를 선택하고 배포 정보를 선택하여 배포된 리소스 목록을 확장합니다.
새 App Service 앱 및 스토리지 계정이 임의로 생성된 이름으로 배포되었습니다.