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:
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
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:
- Bütçe
- configurations - Danışman
- lineOfCredit
- Kilit
- profil - Değişiklik Analizi
- supportPlanTypes
- Etiketler
İzleme için şunu kullanın:
Güvenlik için şunu 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ı 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:
- ARM şablonları ve Azure CLI ile kaynakları dağıtma
- ARM şablonları ve Azure PowerShell ile kaynakları dağıtma
- arm şablonlarını Cloud Shell dağıtma
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 InvalidDeploymentLocation
alı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 newRG
dikkat 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: