확장 가능한 Bicep 매개 변수 파일을 사용하여 기본 매개 변수 파일에서 매개 변수를 한 번 정의하고 여러 파생 매개 변수 파일에서 다시 사용할 수 있습니다. 이 방법은 매개 변수 재사용 가능성을 크게 향상시키고 배포 전체에서 일관성을 보장합니다. Bicep CLI 버전 0.44.1 이상에서는 확장 가능한 매개 변수 파일 extends 과 base 키워드를 지원합니다.
파생 매개 변수 파일은 하나의 기본 매개 변수 파일만 확장할 수 있습니다. 하나의 extends 문만 포함할 수 있습니다. 그러나 여러 파일에 확장자를 연결하여 중첩된 매개 변수 파일을 만들 수 있습니다. 자세한 내용은 중첩된 매개 변수 파일을 참조하세요.
이 문은 extends 매개 변수 할당만 상속합니다.
- 기본 매개 변수 파일에서 변수를 정의하여 해당 매개 변수 값을 계산할 수 있지만 해당 변수는 파생된 매개 변수 파일에 노출되지 않습니다.
- 매개 변수 파일에서 사용자 정의 형식 을 정의할 수 있습니다. Bicep 파일에 정의된 사용자 정의 형식을 가져올 수도 있습니다. 그러나 이러한 사용자 정의 형식은 파생된 매개 변수 파일에 노출되지 않습니다.
- 매개 변수 파일에서 직접 사용자 정의 함수를 선언할 수 없습니다. 그러나 매개 변수 파일로 가져올 수 있습니다. 이러한 함수는 파생된 매개 변수 파일에 노출되지 않습니다.
매개 변수 파일 확장
기본적으로 파생 매개 변수 파일에서 정의하는 매개 변수는 기본 매개 변수 파일의 매개 변수를 완전히 덮어씁 수 있습니다. 덮어쓰는 대신 병합하려면 개체 또는 배열 분산 구문과 함께 키워드를 사용합니다 base . 자세한 내용은 Access 부모 매개 변수를 참조하세요.
기본 매개 변수 파일의 using none 문을 사용하여 컴파일러에 특정 Bicep 파일에 대해 바인딩하거나 유효성을 검사하지 않도록 지시합니다.
다음 예제에서는 확장 가능한 매개 변수 파일이 Bicep 작동하는 방법을 보여 줍니다.
사용자의 기본 Bicep 템플릿 main.bicep은 배포가 허용하는 매개 변수를 정의합니다.
param namePrefix string
param location string
param tags object
여러 배포 및 환경에서 다시 사용할 수 있는 기본 매개 변수 파일 base.bicepparam입니다.
using none
// Notice that the first line of this .bicepparam file declares `using none` which tells the compiler not to validate this against any particular .bicep file.
param namePrefix = 'Prod'
param location = 'westus'
param tags = {
environment: 'dev'
owner: 'platform'
}
기본 매개 변수 파일을 derived.bicepparam기반으로 빌드되는 확장 매개 변수 파일입니다. Bicep 파일과 기본 매개 변수 파일을 모두 참조합니다. 여기서 정의한 값은 이전 값을 재정의합니다.
using 'main.bicep'
extends 'base.bicepparam'
param namePrefix = 'Dev'
param tags = {
...base.tags // inherit the object from the base file
environment: 'prod' // override a single property
region: 'westus2' // add new data
}
이 예제에서는 우선 순위가 명확한 계층에서 매개 변수 값이 적용됩니다. 파일은 main.bicep 매개 변수를 선언하고 기본값을 제공할 수 있습니다.
파생 파일은.bicepparam기본.bicepparam 파일에 정의된 값을 재정의할 수 있으며 최종 할당된 매개 변수 값은 대상 템플릿에 정의된 기본값보다 우선합니다. 확인된 값은 다음과 같습니다.
| 매개 변수 | 가치 |
|---|---|
| namePrefix | 'Dev' |
| location | 'westus' |
| tags | { environment: 'prod', owner: 'platform', region: 'westus2' } |
부모 매개 변수 액세스
base 키워드를 사용하려면 파생 매개변수 파일에 extends 절이 포함되어 있어야 합니다. 이 절은 base 식별자로 잠금 해제되므로 모든 부모 매개 변수에 속성으로 액세스할 수 있습니다.
extends 절 없이 base를 사용하려고 하면 오류가 발생합니다.
스프레드 연산자(...)를 base 결합하여 복잡한 데이터 형식을 깔끔하게 확장하거나 병합할 수 있습니다. 이 방법을 사용하면 부모 파일에서 기존 배열 또는 개체 값을 복사하고 전체 데이터 구조를 다시 지정하지 않고 수정할 수 있습니다. 스프레드 연산자는 개체 및 배열로 엄격하게 제한됩니다. 문자열, 정수 또는 부울과 같은 기본 값을 분산하려고 하면 컴파일 오류가 발생합니다.
재정의된 모든 값은 대상 매개 변수에서 예상하는 정확한 데이터 형식과 일치해야 합니다. 호환되지 않는 형식을 제공하면 컴파일 중에 형식 오류가 발생합니다.
Bicep 파일 main.bicep:
param app object
param locations array
param fullName string
기본 매개 변수 파일 base.bicepparam:
using none
param app = {
name: 'demo'
tags: {
owner: 'platform'
environment: 'dev'
}
}
param locations = ['westus', 'eastus']
파생 매개 변수 파일 derived.bicepparam:
using './main.bicep'
extends './base.bicepparam'
// Merge objects
param app = {
...base.app
tags: {
...base.app.tags
environment: 'prod'
costCenter: '1234'
}
}
// Merge arrays
param locations = [...base.locations, 'centralus']
// Use base in expressions or variables
var suffix = '-api'
param fullName = '${base.app.name}${suffix}'
확인된 값은 다음과 같습니다.
| 매개 변수 | 가치 |
|---|---|
| 앱(애플리케이션) | {"name":"demo","tags":{"owner":"platform","environment":"prod","costCenter":"1234"}} |
| locations | ["westus","eastus","centralus"] |
| 전체 이름 | demo-api |
중첩된 매개 변수 파일
파생 매개 변수 파일은 단일 extends 문만 포함할 수 있지만 Bicep 매개 변수 파일을 순차적으로 연결하여 다단계 계층을 빌드할 수 있습니다(매개 변수 파일 A $\rightarrow$ 매개 변수 파일 B $\rightarrow$ 매개 변수 파일 C).
이 구조는 엔터프라이즈 배포를 구성하는 데 유용합니다. 루트에서 전역 기본값을 정의하고, 중간 계층에서 환경 전체 설정을 재정의하고, 리프 수준에서 지역화된 리소스별 구성을 지정할 수 있습니다.
체인을 빌드할 때 시퀀스에 포함된 모든 중간 또는 루트 매개변수 파일에는 using none 문이 포함되어 있어야 합니다. 이 문은 파일이 구성 계층으로 엄격하게 작동하고 특정 .bicep 배포 템플릿에 직접 바인딩되지 않는다는 것을 Bicep 컴파일러에 알릴 수 있습니다.
다음 예제에서는 전역 조직 설정에서 특정 지역화된 개발 환경으로 이동하는 Azure 리소스 레이아웃을 구성하도록 3계층 체인을 설정하는 방법을 보여 줍니다.
Bicep 파일(compute.bicep)
param primaryLocation string
param globalTags object
param environmentTags object
param resourceTags object
param skuName string
param vmSku string
param vmName string
...
루트 계층: 전역 기본값(global.bicepparam)은 전체 조직에서 사용되는 기준 속성을 설정합니다. 순수한 구성 기반일 뿐이기 때문에 using none를 사용합니다.
using none
// Global baseline tags applied to every single resource
param globalTags = {
BillingUnit: 'Enterprise-IT'
DataClassification: 'Confidential'
}
// Default regional pair
param primaryLocation = 'eastus'
중간 계층: 환경 설정(dev-defaults.bicepparam)은 전역 속성을 상속하고, 환경 유형을 재정의하고, 환경별 구성을 추가합니다. 중간 계층이기 때문에 using none도 사용합니다.
using none
extends './global.bicepparam'
// Inherit global tags and inject the environment designation
param environmentTags = {
...base.globalTags
Environment: 'Development'
}
// Override region for low-cost development testing
param primaryLocation = 'westus'
// Tier-specific infrastructure sizes
param skuName = 'Standard_D2s_v5'
리프 계층: 대상 배포(compute.dev.bicepparam) 는 특정 워크로드 배포를 대상으로 합니다. 표준 using 구문을 통해 실제 Bicep 인프라 템플릿에 직접 연결되며, 체인 전체의 통합 상태를 상속합니다.
extends './dev-defaults.bicepparam'
using './compute.bicep' // Binds the final resolved values to the template
// Combine all inherited layers into the final parameters expected by compute.bicep
param resourceTags = {
...base.environmentTags
Workload: 'Web-FrontEnd'
}
// Use inherited environment SKU directly, or override it if needed
param vmSku = base.skuName
// Explicit deployment property
param vmName = 'vm-web-dev-01'
관련 콘텐츠
- Bicep 매개 변수 파일에 대한 자세한 내용은 Bicep 매개 변수 파일을 참조하세요.
-
using및using none에 대해 자세히 알아보려면 문 사용 및 사용하지 않음을 참조하세요. - 스프레드 연산자에 대한 자세한 내용은 Spread 연산자를 참조하세요.