Wdrożenia grup zasobów z plikami Bicep

W tym artykule opisano sposób ustawiania zakresu za pomocą Bicep podczas wdrażania w grupie zasobów.

Obsługiwane zasoby

Większość zasobów można wdrożyć w grupie zasobów. Aby uzyskać listę dostępnych zasobów, zobacz Dokumentację szablonu usługi ARM.

Ustawianie zakresu

Domyślnie plik Bicep jest w zakresie grupy zasobów. Jeśli chcesz jawnie ustawić zakres, użyj:

targetScope = 'resourceGroup'

Jednak ustawienie zakresu docelowego na grupę zasobów jest niepotrzebne, ponieważ ten zakres jest używany domyślnie.

Polecenia wdrażania

Aby przeprowadzić wdrożenie w grupie zasobów, użyj poleceń wdrażania grupy zasobów.

W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia az deployment group create. Poniższy przykład umożliwia wdrożenie szablonu w celu utworzenia grupy zasobów. Grupa zasobów określona w parametrze --resource-group jest docelową grupą zasobów.

az deployment group create \
  --name demoRGDeployment \
  --resource-group ExampleGroup \
  --template-file main.bicep \
  --parameters storageAccountType=Standard_GRS

Aby uzyskać bardziej szczegółowe informacje o poleceniach wdrażania i opcjach wdrażania szablonów usługi ARM, zobacz:

Zakresy wdrażania

Podczas wdrażania w grupie zasobów można wdrożyć zasoby w:

  • docelowa grupa zasobów dla operacji wdrażania
  • inne grupy zasobów w tej samej subskrypcji lub innych subskrypcjach
  • dowolna subskrypcja w dzierżawie
  • dzierżawa dla grupy zasobów

Zasób rozszerzenia może być zakresem obiektu docelowego, który różni się od docelowego wdrożenia.

Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.

W tej sekcji przedstawiono sposób określania różnych zakresów. Te różne zakresy można połączyć w jednym szablonie.

Zakres do docelowej grupy zasobów

Aby wdrożyć zasoby w docelowej grupie zasobów, dodaj te zasoby do pliku Bicep.

// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  ...
}

Przykładowy szablon można znaleźć w temacie Deploy to target resource group (Wdrażanie w docelowej grupie zasobów).

Zakres do innej grupy zasobów

Aby wdrożyć zasoby w grupie zasobów, która nie jest docelową grupą zasobów, dodaj moduł. Użyj funkcji resourceGroup , aby ustawić właściwość dla tego modułu scope .

Jeśli grupa zasobów znajduje się w innej subskrypcji, podaj identyfikator subskrypcji i nazwę grupy zasobów. Jeśli grupa zasobów znajduje się w tej samej subskrypcji co bieżące wdrożenie, podaj tylko nazwę grupy zasobów. Jeśli nie określisz subskrypcji w funkcji resourceGroup, zostanie użyta bieżąca subskrypcja.

W poniższym przykładzie pokazano moduł przeznaczony dla grupy zasobów w innej subskrypcji.

param otherResourceGroup string
param otherSubscriptionID string

// module deployed to different subscription and resource group
module exampleModule 'module.bicep' = {
  name: 'otherSubAndRG'
  scope: resourceGroup(otherSubscriptionID, otherResourceGroup)
}

W następnym przykładzie pokazano moduł przeznaczony dla grupy zasobów w tej samej subskrypcji.

param otherResourceGroup string

// module deployed to resource group in the same subscription
module exampleModule 'module.bicep' = {
  name: 'otherRG'
  scope: resourceGroup(otherResourceGroup)
}

Aby zapoznać się z przykładowym szablonem, zobacz Wdrażanie w wielu grupach zasobów.

Zakres subskrypcji

Aby wdrożyć zasoby w subskrypcji, dodaj moduł. Użyj funkcji subscription , aby ustawić jej scope właściwość.

Aby wdrożyć w bieżącej subskrypcji, użyj funkcji subskrypcji bez parametru .


// module deployed at subscription level
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription()
}

Aby wdrożyć w innej subskrypcji, określ ten identyfikator subskrypcji jako parametr w funkcji subskrypcji.

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(otherSubscriptionID)
}

Przykładowy szablon można znaleźć w temacie Create resource group with Bicep (Tworzenie grupy zasobów za pomocą Bicep).

Zakres do dzierżawy

Aby utworzyć zasoby w dzierżawie, dodaj moduł. Użyj funkcji dzierżawy , aby ustawić jej scope właściwość.

Użytkownik wdrażający szablon musi mieć wymagany dostęp do wdrożenia w dzierżawie.

Poniższy przykład zawiera moduł wdrożony w dzierżawie.

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

Zamiast korzystać z modułu, można ustawić zakres na tenant() dla niektórych typów zasobów. Poniższy przykład umożliwia wdrożenie grupy zarządzania w dzierżawie.

param mgName string = 'mg-${uniqueString(newGuid())}'

// ManagementGroup deployed at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

Aby uzyskać więcej informacji, zobacz Grupa zarządzania.

Wdrażanie w docelowej grupie zasobów

Aby wdrożyć zasoby w docelowej grupie zasobów, zdefiniuj te zasoby w resources sekcji szablonu. Poniższy szablon tworzy konto magazynu w grupie zasobów określonej w operacji wdrażania.

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Wdrażanie w wielu grupach zasobów

Wdrożenie można wdrożyć w więcej niż jednej grupie zasobów w jednym pliku Bicep.

Uwaga

W jednym wdrożeniu można wdrożyć 800 grup zasobów . Zazwyczaj to ograniczenie oznacza, że można wdrożyć w jednej grupie zasobów określonej dla szablonu nadrzędnego i maksymalnie 799 grup zasobów w zagnieżdżonych lub połączonych wdrożeniach. Jeśli jednak szablon nadrzędny zawiera tylko zagnieżdżone lub połączone szablony i nie wdraża żadnych zasobów, możesz uwzględnić maksymalnie 800 grup zasobów w zagnieżdżonych lub połączonych wdrożeniach.

W poniższym przykładzie są wdrażane dwa konta magazynu. Pierwsze konto magazynu jest wdrażane w grupie zasobów określonej w operacji wdrażania. Drugie konto magazynu jest wdrażane w grupie zasobów określonej w parametrach secondResourceGroup i secondSubscriptionID :

@maxLength(11)
param storagePrefix string

param firstStorageLocation string = resourceGroup().location

param secondResourceGroup string
param secondSubscriptionID string = ''
param secondStorageLocation string

var firstStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
var secondStorageName = '${storagePrefix}${uniqueString(secondSubscriptionID, secondResourceGroup)}'

module firstStorageAcct 'storage.bicep' = {
  name: 'storageModule1'
  params: {
    storageLocation: firstStorageLocation
    storageName: firstStorageName
  }
}

module secondStorageAcct 'storage.bicep' = {
  name: 'storageModule2'
  scope: resourceGroup(secondSubscriptionID, secondResourceGroup)
  params: {
    storageLocation: secondStorageLocation
    storageName: secondStorageName
  }
}

Oba moduły używają tego samego pliku Bicep o nazwie storage.bicep.

param storageLocation string
param storageName string

resource storageAcct 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

Tworzenie grupy zasobów

Aby uzyskać informacje na temat tworzenia grup zasobów, zobacz Create resource group with Bicep (Tworzenie grupy zasobów za pomocą Bicep).

Następne kroki

Aby dowiedzieć się więcej o innych zakresach, zobacz: