Bicep dosyalarıyla abonelik dağıtımları
Bu makalede, bir aboneliğe dağıtım yapmak için Bicep ile kapsamı ayarlama açıklanmıştır.
Kaynakların yönetimini basitleştirmek için kaynakları Azure aboneliğinizin düzeyinde dağıtabilirsiniz. Örneğin, aboneliğinize ilkeler ve Azure rol tabanlı erişim denetimi (Azure RBAC) dağıtabilirsiniz. Bu, bunları aboneliğinize uygular. Ayrıca abonelik içinde kaynak grupları oluşturabilir ve kaynakları abonelik içindeki kaynak gruplarına dağıtabilirsiniz.
Not
Abonelik düzeyinde dağıtımda 800 farklı kaynak grubu dağıtabilirsiniz.
Microsoft Learn
Dağıtım kapsamları hakkında daha fazla bilgi edinmek ve uygulamalı rehberlik için bkz. Microsoft Learn üzerinde Bicep kullanarak kaynakları aboneliklere, yönetim gruplarına ve kiracılara dağıtma.
Desteklenen kaynaklar
Tüm kaynak türleri abonelik düzeyinde dağıtılabilir değildir. Bu bölümde, hangi kaynak türlerinin desteklen olduğu listedir.
Daha Azure Blueprints için şunları kullanın:
Azure İlkeleri için şunları kullanın:
Erişim denetimi için şunları kullanın:
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Kaynak gruplarına dağıtan iç içe şablonlar için şunları kullanın:
Yeni kaynak grupları oluşturmak için şunları kullanın:
Aboneliğinizi yönetmek için şunları kullanın:
- Bütçe
- yapılandırmalar - Danışman
- lineOfCredit
- Kilit
- profil - Değişiklik Analizi
- supportPlanTypes
- Etiketler
İzleme için şunları kullanın:
Güvenlik için şunları kullanın:
- advancedThreatProtectionSettings
- alertsSuppressionRules
- assessmentMetadata
- Değerlendirme
- autoProvisioningSettings
- Bağlayıcı
- deviceSecurityGroups
- ingestionSettings
- fiyatlandırmalar
- securityContacts
- ayarlar
- workspaceSettings
Desteklenen diğer türler şunlardır:
Kapsamı ayarlama
Kapsamı abonelik olarak ayarlamak için şunları kullanın:
targetScope = 'subscription'
Dağıtım komutları
Bir aboneliğe dağıtmak için abonelik düzeyinde dağıtım komutlarını kullanın.
Azure CLI için az deployment sub create 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 ilişkin dağıtım komutları ve seçenekleri hakkında daha ayrıntılı bilgi için bkz:
- ARM şablonları ve Azure CLI ile kaynakları dağıtma
- ARM şablonları ve dağıtım şablonlarıyla kaynakları Azure PowerShell
- Arm şablonlarını Cloud Shell
Dağıtım konumu ve adı
Abonelik düzeyinde dağıtımlar için dağıtım için bir konum sağlamalısınız. Dağıtımın konumu, dağıtan kaynakların konumdan ayrıdır. Dağıtım konumu, dağıtım verisi depolamanın nerede olduğunu belirtir. Yönetim grubu ve kiracı dağıtımları için de bir konum gerekir. Kaynak grubu dağıtımları için, dağıtım verilerini depolamak için kaynak grubunun konumu kullanılır.
Dağıtım için bir ad 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 şablon dağıtarak main adlı varsayılan bir dağıtım adı oluşturur.
Her dağıtım adı için konum sabittir. Farklı bir konumda aynı adla mevcut bir dağıtım olduğunda bir konumda dağıtım oluşturamalısınız. Örneğin, centralus'ta deployment1 adıyla bir abonelik dağıtımı oluşturmanız, daha sonra deployment1 adıyla ancak westus konumunu kullanarak başka bir dağıtım oluşturamalısınız. Hata kodunu alırsanız, bu ad için farklı bir ad veya InvalidDeploymentLocation önceki dağıtımla aynı konumu kullanın.
Dağıtım kapsamları
Bir aboneliğe dağıtım yapmak için kaynakları şu kaynaklara dağıtabilirsiniz:
- işlemden hedef abonelik
- kiracıda 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 kapsamlandı.
Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olması gerekir.
Kapsamdan aboneliğe
Kaynakları hedef aboneliğe dağıtmak için bu 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ğıtım örnekleri için bkz. Kaynak grupları oluşturma ve İlke tanımı atama.
Kaynakları işlemden farklı bir aboneliğe dağıtmak için bir modül ekleyin. özelliğini ayarlamak için subscription işlevini scope kullanın. Dağıtmak subscriptionId istediğiniz aboneliğin kimliğinin özelliğini girin.
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
Kapsamdan kaynak grubuna
Kaynakları abonelik içindeki bir kaynak grubuna dağıtmak için bir modül ekleyin ve özelliğini scope ayarlayın. Kaynak grubu zaten varsa, kapsam değerini ayarlamak için resourceGroup işlevini kullanın. Kaynak grubu adını girin.
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
Kaynak grubu aynı Bicep dosyasında oluşturulursa, kapsam değerini ayarlamak için kaynak grubunun sembolik adını kullanın. Kapsamı sembolik ad olarak ayarlama örneği için bkz. Kaynak grubu ve kaynak oluşturma.
Kiracı kapsamı
Kiracıda kaynak oluşturmak için bir modül ekleyin. Özelliğini ayarlamak için tenant işlevini scope kullanın.
Şablonu dağıtan kullanıcının kiracıda dağıtmak için gerekli erişimine 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()
}
Bir modül kullanmak yerine, bazı kaynak türleri için tenant() kapsamı olarak ayarlayın. 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 grubu için bir ad ve konum ile 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 kaynak oluşturma
Kaynak grubunu oluşturmak ve bu gruba kaynak dağıtmak için bir modül ekleyin. Modül, kaynak grubuna dağıtacağız kaynakları içerir. Modülün kapsamını, oluşturmakta olduğu kaynak grubunun sembolik adı olarak ayarlayın. En fazla 800 kaynak grubu dağıtın.
Aşağıdaki örnek bir kaynak grubu oluşturur ve kaynak grubuna bir depolama hesabı dağıtır. modülüne scope ait özelliğinin, oluşturulacak kaynak newRG grubunun sembolik adı olan olarak ayarlandır.
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 storage.bicep adlı bir Bicep dosyası ve aşağıdaki içerikler 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 örnek, aboneliğe mevcut bir ilke tanımını atar. İlke tanımı parametre alıyorsa, bunları nesne olarak girin. İlke tanımı parametre almıyorsa 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
İlke tanımını aynı Bicep dosyasında tanımlayabilir ve atabilirsiniz.
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 rol atamalarını Azure Resource Manager 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 örnek kilidi uygulamak için modülünü gösterir:
resource createRgLock 'Microsoft.Authorization/locks@2016-09-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
Sonraki örnekte rolü atamak için modülünü gösterir:
@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: