다음을 통해 공유


빠른 시작: Bicep에서 여러 리소스 인스턴스 만들기

여러 for 구문을 사용하여 Bicep에서 여러 리소스 인스턴스를 만드는 방법을 알아봅니다. 이 문서에서는 여러 리소스 인스턴스를 만드는 것만 보여주지만 동일한 메서드를 사용하여 모듈, 변수, 속성 또는 출력의 복사본을 정의할 수 있습니다. 자세한 내용은 Bicep 루프를 참조하세요.

이 문서의 토픽은 다음과 같습니다.

필수 조건

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

Bicep 개발 환경을 설정하려면 Bicep 도구 설치를 참조하세요. 해당 단계를 완료한 후 Visual Studio CodeBicep 확장을 사용할 수 있습니다. 최신 Azure CLI 또는 최신 Azure PowerShell 모듈을 사용할 수도 있습니다.

단일 인스턴스 만들기

이 섹션에서는 스토리지 계정을 만들기 위한 Bicep 파일을 정의한 다음, Bicep 파일을 배포합니다. 후속 섹션에서는 다양한 for 구문에 대한 Bicep 샘플을 제공합니다. 동일한 배포 방법을 사용하여 이러한 샘플을 배포하고 실험할 수 있습니다. 배포가 실패하면 다음 두 가지 원인 중 하나일 수 있습니다.

  • 스토리지 계정 이름이 너무 깁니다. Storage 계정 이름은 3자에서 24자 사이여야 하고 숫자 및 소문자만 포함할 수 있습니다.
  • 스토리지 계정 이름이 고유하지 않습니다. 스토리지 계정 이름은 Azure 내에서 고유해야 합니다.

다음 Bicep 파일은 하나의 스토리지 계정을 정의합니다.

param rgLocation string = resourceGroup().location

resource createStorage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

Bicep 파일을 로컬로 저장한 다음, Azure CLI 또는 Azure PowerShell을 사용하여 Bicep 파일을 배포합니다.

resourceGroupName = "{provide-a-resource-group-name}"
templateFile="{provide-the-path-to-the-bicep-file}"

az group create --name $resourceGroupName --location eastus

az deployment group create --resource-group $resourceGroupName --template-file $templateFile

정수 인덱스 사용

인덱스가 있는 for 루프는 스토리지 계정 2개를 만드는 다음 샘플에 사용됩니다.

param rgLocation string = resourceGroup().location
param storageCount int = 2

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for i in range(0, storageCount): {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

output names array = [for i in range(0,storageCount) : {
  name: createStorages[i].name
} ]

인덱스 번호는 스토리지 계정 이름의 일부로 사용됩니다. Bicep 파일을 배포하면 다음과 같이 비슷한 스토리지 계정 2개를 얻게 됩니다.

시작 숫자로 0의 정수 인덱스 사용

range() 내부의 첫 번째 숫자는 시작 번호이고, 두 번째 숫자는 루프가 실행되는 횟수입니다. 따라서 range(3,2)로 변경하면 다음과 같은 스토리지 계정 2개도 얻게 됩니다.

시작 숫자로 3의 정수 인덱스 사용

위의 샘플의 출력은 루프에서 만든 리소스를 참조하는 방법을 보여줍니다. 는 다음과 유사하게 출력됩니다.

"outputs": {
  "names": {
    "type": "Array",
    "value": [
      {
        "name": "0storage52iyjssggmvue"
      },
      {
        "name": "1storage52iyjssggmvue"
      }
    ]
  }
},

배열 요소 사용

배열을 통해 반복할 수 있습니다. 다음 샘플은 문자열 배열을 보여줍니다.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for name in storageNames: {
  name: '${name}str${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

이 루프는 배열의 모든 문자열을 스토리지 계정 이름의 일부로 사용합니다. 이 예에서는 다음과 같은 2개의 스토리지 계정을 만듭니다.

문자열 배열 사용

개체 배열을 반복할 수도 있습니다. 루프는 스토리지 계정 이름을 사용자 지정할 뿐만 아니라 SKU를 구성합니다.

param rgLocation string = resourceGroup().location
param storages array = [
  {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for storage in storages: {
  name: '${storage.name}obj${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: storage.skuName
  }
  kind: 'StorageV2'
}]

이 루프는 2개의 스토리지 계정을 만듭니다. 이름이 fabrikam으로 시작하는 스토리지 계정의 SKU는 Premium_LRS입니다.

문자열 배열 사용

배열 및 인덱스 사용

동일한 예에서 배열 루프를 인덱스 루프와 결합할 수 있습니다. 다음 샘플은 배열 및 인덱스 번호를 이름 규칙에 사용하는 방법을 보여줍니다.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for (name, i) in storageNames: {
  name: '${i}${name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

이전 샘플을 배포한 후, 다음과 같이 유사한 스토리지 계정 2개를 만듭니다.

문자열 배열 및 인덱스 번호 사용

사전 개체 사용

사전 개체의 요소를 반복하려면 개체를 배열로 변환하는 items 함수를 사용합니다. value 속성을 사용하여 개체의 속성을 가져옵니다.

param rgLocation string = resourceGroup().location

param storageConfig object = {
  storage1: {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  storage2: {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
}

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for config in items(storageConfig): {
  name: '${config.value.name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: config.value.skuName
  }
  kind: 'StorageV2'
}]

이 루프는 2개의 스토리지 계정을 만듭니다. 이름이 fabrikam으로 시작하는 스토리지 계정의 SKU는 Premium_LRS입니다.

사전 개체 사용

조건이 있는 루프

리소스 및 모듈의 경우 루프 구문과 함께 if 표현식을 추가하여 조건부로 컬렉션을 배포할 수 있습니다.

param rgLocation string = resourceGroup().location
param storageCount int = 2
param createNewStorage bool = true

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for i in range(0, storageCount): if(createNewStorage) {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

자세한 내용은 Bicep의 조건부 배포를 참조하세요.

리소스 정리

Azure 리소스가 더 이상 필요 없으면 Azure CLI 또는 Azure PowerShell 모듈을 사용하여 빠른 시작 리소스 그룹을 삭제합니다.

resourceGroupName = "{provide-the-resource-group-name}"

az group delete --name $resourceGroupName

다음 단계