변수 및 출력 루프 사용

완료됨

복사 루프를 사용하여 여러 리소스 인스턴스를 배포하는 방법과 루프를 사용하여 리소스의 속성을 설정하는 방법을 알아보았습니다. 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
}]

주의

액세스 키 또는 암호와 같은 비밀을 반환하기 위해 출력을 사용하지 마세요. 출력은 기록되며 보안 데이터를 처리하도록 설계되지 않습니다.