변수 및 출력 루프 사용
복사 루프를 사용하여 여러 리소스 인스턴스를 배포하는 방법과 루프를 사용하여 리소스의 속성을 설정하는 방법을 알아보았습니다. Bicep에서는 변수 및 출력이 포함된 루프를 사용할 수도 있습니다.
장난감 회사의 경우 여러 Azure 지역에서 동일한 서브넷 구성을 사용하여 가상 네트워크를 배포해야 합니다. 나중에 가상 네트워크에 서브넷을 더 추가해야 하므로 Bicep 파일에서 서브넷 구성을 수정할 수 있는 유연성을 갖추어야 합니다.
또한 Azure 환경에서 여러 스토리지 계정을 배포하기 때문에 배포 파이프라인이 이 정보를 사용할 수 있도록 각 스토리지 계정 엔드포인트를 출력으로 제공해야 합니다.
이 단원에서는 변수 및 출력과 함께 루프를 사용하는 방법을 알아봅니다.
비고
이 단원의 명령은 개념을 설명하기 위해 표시된 것입니다. 명령을 아직 실행하지 마세요. 여기에서 학습하는 내용을 곧 연습할 예정입니다.
변수 루프
변수 루프를 사용하면 Bicep 파일을 통해 사용할 수 있는 배열을 만들 수 있습니다. 다른 루프를 사용할 때와 마찬가지로 for
키워드를 사용하여 변수 루프를 만듭니다.
var items = [for i in range(1, 5): 'item${i}']
이전 예제는 item1
, item2
, item3
, item4
, item5
값을 포함하는 배열을 만듭니다.
일반적으로 변수 루프를 사용하여 리소스 선언 내에서 사용할 수 있는 더 복잡한 개체를 만듭니다. 변수 루프를 사용하여 subnets
속성을 만드는 방법은 다음과 같습니다.
param addressPrefix string = '10.10.0.0/16'
param subnets array = [
{
name: 'frontend'
ipAddressRange: '10.10.0.0/24'
}
{
name: 'backend'
ipAddressRange: '10.10.1.0/24'
}
]
var subnetsProperty = [for subnet in subnets: {
name: subnet.name
properties: {
addressPrefix: subnet.ipAddressRange
}
}]
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-05-01' = {
name: 'teddybear'
___location: resourceGroup().___location
properties:{
addressSpace:{
addressPrefixes:[
addressPrefix
]
}
subnets: subnetsProperty
}
}
이 예에서는 변수 루프를 효과적으로 사용하는 방법을 보여 줍니다. 간단하고 이해하기 쉬운 값을 가진 매개 변수를 Azure 리소스의 필수 정의에 해당하는 더 복잡한 개체로 바꿉니다. 변수 루프를 사용하여 매개 변수가 목록의 각 항목에 대해 변경되는 키 정보만 지정하도록 할 수 있습니다. 그런 다음, Bicep 식이나 기본값을 사용하여 리소스의 다른 필수 속성을 설정할 수 있습니다.
출력 루프
Bicep 출력을 사용하여 배포에서 얻은 정보를 배포를 시작한 사용자 또는 도구에 다시 제공할 수 있습니다. 출력 루프는 출력 내에서 루프의 유연성과 성능을 제공합니다.
다른 루프와 마찬가지로 for
키워드를 사용하여 출력 루프를 지정합니다.
var items = [
'item1'
'item2'
'item3'
'item4'
'item5'
]
output outputItems array = [for i in range(0, length(items)): items[i]]
일반적으로 Bicep 파일 내의 다른 루프와 함께 출력 루프를 사용합니다. 예를 들어 locations
매개 변수로 지정된 Azure 지역에 스토리지 계정 집합을 배포하는 Bicep 파일을 살펴보겠습니다.
param locations array = [
'westeurope'
'eastus2'
'eastasia'
]
resource storageAccounts 'Microsoft.Storage/storageAccounts@2023-05-01' = [for ___location in locations: {
name: 'toy${uniqueString(resourceGroup().id, ___location)}'
___location: ___location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}]
만든 각 스토리지 계정에 대한 정보(예: 계정의 이름 및 계정에 액세스하는 데 사용할 수 있는 엔드포인트)를 반환해야 하는 경우가 있습니다. 출력 루프를 사용하여 Bicep 파일 내에서 이 정보를 검색할 수 있습니다.
비고
현재 Bicep은 출력 루프 내에서 루프 내에 생성된 리소스를 직접 참조하도록 지원하지 않습니다. 즉, 다음 예제와 같이 배열 인덱서를 사용하여 리소스에 액세스해야 합니다.
output storageEndpoints array = [for i in range(0, length(locations)): {
name: storageAccounts[i].name
___location: storageAccounts[i].___location
blobEndpoint: storageAccounts[i].properties.primaryEndpoints.blob
fileEndpoint: storageAccounts[i].properties.primaryEndpoints.file
}]
주의
액세스 키 또는 암호와 같은 비밀을 반환하기 위해 출력을 사용하지 마세요. 출력은 기록되며 보안 데이터를 처리하도록 설계되지 않습니다.