Bicep dosyalarıyla abonelik dağıtımları

Bu makalede, aboneliğe dağıtım yaparken Bicep ile kapsamın nasıl ayarlanacağı açıklanır.

Kaynakların yönetimini basitleştirmek için kaynakları Azure aboneliğiniz düzeyinde dağıtabilirsiniz. Örneğin, ilkeleri ve Azure rol tabanlı erişim denetimini (Azure RBAC) aboneliğinize dağıtabilirsiniz ve bu da bunları aboneliğiniz genelinde uygular. Ayrıca abonelik içinde kaynak grupları oluşturabilir ve kaynakları abonelikteki kaynak gruplarına dağıtabilirsiniz.

Not

Abonelik düzeyinde dağıtımda 800 farklı kaynak grubuna dağıtabilirsiniz.

Eğitim kaynakları

Dağıtım kapsamları hakkında adım adım yönergeler aracılığıyla bilgi edinmek isterseniz bkz. Bicep kullanarak aboneliklere, yönetim gruplarına ve kiracılara kaynak dağıtma.

Desteklenen kaynaklar

Tüm kaynak türleri abonelik düzeyine dağıtılamaz. Bu bölümde hangi kaynak türlerinin desteklendiği listelenmektedir.

Azure Blueprints için şunu kullanın:

Azure İlkeleri için şunu kullanın:

Erişim denetimi için şunu kullanın:

Kaynak gruplarına dağıtılan iç içe yerleştirilmiş şablonlar için şunu kullanın:

Yeni kaynak grupları oluşturmak için şunu kullanın:

Aboneliğinizi yönetmek için şunları kullanın:

İzleme için şunu kullanın:

Güvenlik için şunu kullanın:

Desteklenen diğer türler şunlardır:

Kapsamı ayarlama

Kapsamı aboneliğe ayarlamak için şunu kullanın:

targetScope = 'subscription'

Dağıtım komutları

Aboneliğe dağıtmak için abonelik düzeyinde dağıtım komutlarını kullanın.

Azure CLI için az deployment sub create komutunu kullanın. Aşağıdaki örnek, kaynak grubu oluşturmak için bir şablon dağıtır:

az deployment sub create \
  --name demoSubDeployment \
  --location centralus \
  --template-file main.bicep \
  --parameters rgName=demoResourceGroup rgLocation=centralus

ARM şablonlarını dağıtmaya yönelik dağıtım komutları ve seçenekleri hakkında daha ayrıntılı bilgi için bkz:

Dağıtım konumu ve adı

Abonelik düzeyi dağıtımlar için dağıtım için bir konum sağlamanız gerekir. Dağıtımın konumu, dağıttığınız kaynakların konumundan ayrıdır. Dağıtım konumu, dağıtım verilerinin depolandığı yeri belirtir. Yönetim grubu ve kiracı dağıtımları da bir konum gerektirir. Kaynak grubu dağıtımlarında, dağıtım verilerini depolamak için kaynak grubunun konumu kullanılır.

Dağıtım için bir ad sağlayabilir veya varsayılan dağıtım adını kullanabilirsiniz. Varsayılan ad, şablon dosyasının adıdır. Örneğin main.json adlı bir şablonun dağıtılması , main adlı varsayılan bir dağıtım adı oluşturur.

Her dağıtım adı için konum sabittir. Farklı bir konumda aynı ada sahip mevcut bir dağıtım olduğunda tek bir konumda dağıtım oluşturamazsınız. Örneğin, centralus içinde deployment1 adlı bir abonelik dağıtımı oluşturursanız, daha sonra deployment1 adlı başka bir dağıtım oluşturamazsınız ancak westus konumuna sahip olursunuz. hata kodunu InvalidDeploymentLocationalırsanız, bu ad için farklı bir ad veya önceki dağıtımla aynı konumu kullanın.

Dağıtım kapsamları

Bir aboneliğe dağıtım yaparken kaynakları şu kaynaklara dağıtabilirsiniz:

  • işlemden hedef abonelik
  • kiracıdaki herhangi bir abonelik
  • abonelik veya diğer abonelikler içindeki kaynak grupları
  • aboneliğin kiracısı

Uzantı kaynağının kapsamı, dağıtım hedefinden farklı bir hedef olarak ayarlanabilir.

Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.

Kapsam-abonelik

Kaynakları hedef aboneliğe dağıtmak için söz konusu kaynakları anahtar sözcüğüyle resource ekleyin.

targetScope = 'subscription'

// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2020-10-01' = {
  ...
}

Aboneliğe dağıtma örnekleri için bkz. Kaynak grupları oluşturma ve İlke tanımı atama.

İşlemden farklı bir aboneliğe kaynak dağıtmak için bir modül ekleyin. özelliğini ayarlamak scope için abonelik işlevini kullanın. subscriptionId Özelliğini dağıtmak istediğiniz aboneliğin kimliğine sağlayın.

targetScope = 'subscription'

param otherSubscriptionID string

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

Kaynak grubu kapsamı

Abonelik içindeki bir kaynak grubuna kaynak dağıtmak için bir modül ekleyin ve özelliğini ayarlayın scope . Kaynak grubu zaten varsa kapsam değerini ayarlamak için resourceGroup işlevini kullanın. Kaynak grubu adını belirtin.

targetScope = 'subscription'

param resourceGroupName string

module exampleModule 'module.bicep' = {
  name: 'exampleModule'
  scope: resourceGroup(resourceGroupName)
}

Kaynak grubu aynı Bicep dosyasında oluşturulduysa, kapsam değerini ayarlamak için kaynak grubunun sembolik adını kullanın. Kapsamı sembolik ada ayarlama örneği için bkz. Kaynak grubu ve kaynakları oluşturma.

Kapsamı kiracıya

Kiracıda kaynak oluşturmak için bir modül ekleyin. Özelliğini ayarlamak scope için kiracı işlevini kullanın.

Şablonu dağıtan kullanıcının kiracıda dağıtmak için gerekli erişime sahip olması gerekir.

Aşağıdaki örnek, kiracıya dağıtılan bir modülü içerir.

targetScope = 'subscription'

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

Modül kullanmak yerine, bazı kaynak türleri için kapsamı olarak tenant() ayarlayabilirsiniz. Aşağıdaki örnek kiracıda bir yönetim grubu dağıtır.

targetScope = 'subscription'

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

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

output output string = mgName

Daha fazla bilgi için bkz . Yönetim grubu.

Kaynak grupları

Kaynak grupları oluşturma

Kaynak grubu oluşturmak için, kaynak grubunun adı ve konumuna sahip bir Microsoft.Resources/resourceGroups kaynağı tanımlayın.

Aşağıdaki örnek boş bir kaynak grubu oluşturur.

targetScope='subscription'

param resourceGroupName string
param resourceGroupLocation string

resource newRG 'Microsoft.Resources/resourceGroups@2021-01-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
}

Kaynak grubu ve kaynakları oluşturma

Kaynak grubunu oluşturmak ve kaynaklara dağıtmak için bir modül ekleyin. Modül, kaynak grubuna dağıtılacak kaynakları içerir. Modülün kapsamını, oluşturduğunuz kaynak grubunun sembolik adına ayarlayın. En fazla 800 kaynak grubuna dağıtabilirsiniz.

Aşağıdaki örnek bir kaynak grubu oluşturur ve kaynak grubuna bir depolama hesabı dağıtır. Modülün scope özelliğinin, oluşturulan kaynak grubunun sembolik adı olan olarak ayarlandığına newRGdikkat edin.

targetScope='subscription'

param resourceGroupName string
param resourceGroupLocation string
param storageName string
param storageLocation string

resource newRG 'Microsoft.Resources/resourceGroups@2021-01-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
}

module storageAcct 'storage.bicep' = {
  name: 'storageModule'
  scope: newRG
  params: {
    storageLocation: storageLocation
    storageName: storageName
  }
}

Modülde aşağıdaki içeriklere sahip storage.bicep adlı bir Bicep dosyası kullanılır:

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: {}
}

Azure İlkesi

İlke tanımı atama

Aşağıdaki örnekte aboneliğe mevcut bir ilke tanımı atanır. İlke tanımı parametreleri alıyorsa, bunları bir nesne olarak sağlayın. İlke tanımı parametreleri almazsa, varsayılan boş nesneyi kullanın.

targetScope = 'subscription'

param policyDefinitionID string
param policyName string
param policyParameters object = {}

resource policyAssign 'Microsoft.Authorization/policyAssignments@2020-09-01' = {
  name: policyName
  properties: {
    policyDefinitionId: policyDefinitionID
    parameters: policyParameters
  }
}

İlke tanımları oluşturma ve atama

Aynı Bicep dosyasında bir ilke tanımı tanımlayabilir ve atayabilirsiniz.

targetScope = 'subscription'

resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2020-09-01' = {
  name: 'locationpolicy'
  properties: {
    policyType: 'Custom'
    parameters: {}
    policyRule: {
      if: {
        field: 'location'
        equals: 'northeurope'
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource locationRestrict 'Microsoft.Authorization/policyAssignments@2020-09-01' = {
  name: 'allowedLocation'
  properties: {
    policyDefinitionId: locationPolicy.id
  }
}

Erişim denetimi

Rol atama hakkında bilgi edinmek için bkz. Azure Resource Manager şablonlarını kullanarak Azure rol atamaları ekleme.

Aşağıdaki örnek bir kaynak grubu oluşturur, buna bir kilit uygular ve sorumluya bir rol atar.

targetScope = 'subscription'

@description('Name of the resourceGroup to create')
param resourceGroupName string

@description('Location for the resourceGroup')
param resourceGroupLocation string

@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string

@description('roleDefinition to apply to the resourceGroup - default is contributor')
param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'

@description('Unique name for the roleAssignment in the format of a guid')
param roleAssignmentName string = guid(principalId, roleDefinitionId, resourceGroupName)

var roleID = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}'

resource newResourceGroup 'Microsoft.Resources/resourceGroups@2019-10-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
  properties: {}
}

module applyLock 'lock.bicep' = {
  name: 'applyLock'
  scope: newResourceGroup
}

module assignRole 'role.bicep' = {
  name: 'assignRBACRole'
  scope: newResourceGroup
  params: {
    principalId: principalId
    roleNameGuid: roleAssignmentName
    roleDefinitionId: roleID
  }
}

Aşağıdaki örnekte kilidi uygulama modülü gösterilmektedir:

resource createRgLock 'Microsoft.Authorization/locks@2016-09-01' = {
  name: 'rgLock'
  properties: {
    level: 'CanNotDelete'
    notes: 'Resource group should not be deleted.'
  }
}

Sonraki örnekte rolün atanma modülü gösterilmektedir:

@description('The principal to assign the role to')
param principalId string

@description('A GUID used to identify the role assignment')
param roleNameGuid string = newGuid()

param roleDefinitionId string

resource roleNameGuid_resource 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: roleNameGuid
  properties: {
    roleDefinitionId: roleDefinitionId
    principalId: principalId
  }
}

Sonraki adımlar

Diğer kapsamlar hakkında bilgi edinmek için bkz: