Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, kaynaklarınızı Azure'a dağıtmak için Azure Resource Manager şablonlarıyla (ARM şablonları) Python'ın nasıl kullanılacağı açıklanmaktadır. Azure çözümlerinizi dağıtma ve yönetme kavramlarını bilmiyorsanız bkz . şablon dağıtımına genel bakış.
Önkoşullar
Dağıtılacak şablon. Henüz bir şablonunuz yoksa Azure Hızlı Başlangıç şablonları deposundan örnek bir şablon indirip kaydedin.
Python 3.8 veya üzeri yüklü. En son sürümü yüklemek için bkz. Python.org
Sanal ortamınızda yüklü Python için aşağıdaki Azure kitaplık paketleri. Paketlerden herhangi birini yüklemek için
pip install {package-name}kullanın- Azure-Kimlik
- azure-mgmt-resource
Bu paketlerin daha eski sürümleri sanal ortamınızda zaten yüklüyse, bunları
pip install --upgrade {package-name}ile güncellemeniz gerekebilir.Bu makaledeki örneklerde CLI tabanlı kimlik doğrulaması (
AzureCliCredentialkullanılır). Ortamınıza bağlı olarak, kimlik doğrulaması yapmak için önce çalıştırmanızaz logingerekebilir.
Gerekli izinler
Bicep dosyası veya Azure Resource Manager (ARM) şablonu dağıtmak için, dağıtacağınız kaynaklar üzerinde yazma erişimine ve kaynak türü Microsoft.Resources/deployments üzerindeki tüm işlemlere erişiminizin olması gerekir. Örneğin, bir sanal makine dağıtmak için Microsoft.Compute/virtualMachines/write ve Microsoft.Resources/deployments/* izinlerine ihtiyacınız vardır. What-if işlemi aynı izin gereksinimlerine sahiptir.
Azure CLI sürüm 2.76.0 veya üzeri ve Azure PowerShell sürüm 13.4.0 veya üzeri , ARM'nin bu işlem sırasında Bicep şablonunu nasıl kapsamlı bir şekilde doğruladığını belirlemek için ValidationLevel anahtarını tanıtır. Daha fazla bilgi için Olası Durum Komutları kısmına bakın.
Rol ve izinlerin bir listesi için Azure yerleşik roller'ine bakın.
Dağıtım kapsamı
Dağıtımınızı bir kaynak grubuna, aboneliğe, yönetim grubuna veya kiracıya hedefleyebilirsiniz. Dağıtımın kapsamına bağlı olarak farklı yöntemler kullanırsınız.
Bir kaynak grubuna dağıtmak için ResourceManagementClient.deployments.begin_create_or_update kullanın:
Bir aboneliğe dağıtım yapmak için ResourceManagementClient.deployments.begin_create_or_update_at_subscription_scope'u kullanın:
Abonelik düzeyi dağıtımları hakkında daha fazla bilgi için Abonelik düzeyinde kaynak grupları ve kaynaklar oluşturma bölümüne bakın.
Bir yönetim grubuna dağıtmak için ResourceManagementClient.deployments.begin_create_or_update_at_management_group_scope kullanın.
Yönetim grubu düzeyinde dağıtımlar hakkında daha fazla bilgi için Yönetim grubu düzeyinde kaynak oluşturma bölümüne bakın.
Bir kiracıya dağıtım yapmak için ResourceManagementClient.deployments.begin_create_or_update_at_tenant_scope fonksiyonunu kullanın.
Kiracı düzeyi dağıtımları hakkında daha fazla bilgi için bkz Kiracı düzeyinde kaynak oluşturma.
Her kapsam için şablonu dağıtan kullanıcının kaynak oluşturmak için gerekli izinlere sahip olması gerekir.
Dağıtım adı
ARM şablonu dağıtırken dağıtıma bir ad verebilirsiniz. Bu isim, dağıtımı dağıtım geçmişinden geri almanıza yardımcı olabilir. Dağıtım için bir ad sağlamazsanız şablon dosyasının adı kullanılır. Örneğin, adlı azuredeploy.json bir şablon dağıtırsanız ve dağıtım adı belirtmezseniz, dağıtım olarak adlandırılır azuredeploy.
Bir dağıtımı her çalıştırdığınızda, kaynak grubunun dağıtım geçmişine dağıtım adıyla bir giriş eklenir. Başka bir dağıtım çalıştırır ve aynı adı verirseniz, önceki girdi geçerli dağıtımla değiştirilir. Dağıtım geçmişinde benzersiz girdiler tutmak istiyorsanız, her dağıtıma benzersiz bir ad verin.
Benzersiz bir ad oluşturmak için rastgele bir sayı atayabilirsiniz.
import random
suffix = random.randint(1, 1000)
deployment_name = f"ExampleDeployment{suffix}"
Veya bir tarih değeri ekleyin.
from datetime import datetime
today = datetime.now().strftime("%m-%d-%Y")
deployment_name = f"ExampleDeployment{today}"
Aynı kaynak grubuna aynı dağıtım adıyla eşzamanlı dağıtımlar çalıştırırsanız, yalnızca son dağıtım tamamlanır. Aynı adı taşıyan henüz tamamlanmamış dağıtımlar en son yapılan dağıtımla değiştirilir. Örneğin, adlı newStoragebir depolama hesabı dağıtan adlı storage1 bir dağıtım çalıştırırsanız ve aynı zamanda adlı newStoragebir depolama hesabı dağıtan adlı storage2 başka bir dağıtımı çalıştırırsanız, yalnızca bir depolama hesabı dağıtırsınız. Elde edilen depolama hesabı, storage2 olarak adlandırılır.
Ancak adlı newStorage bir depolama hesabı storage1dağıtan adlı bir dağıtım çalıştırırsanız ve tamamlandıktan hemen sonra adlı newStoragebir depolama hesabı dağıtan adlı storage2 başka bir dağıtım çalıştırırsanız iki depolama hesabınız olur. Biri olarak adlandırılır storage1, diğeri ise olarak adlandırılır storage2. Ancak dağıtım geçmişinde yalnızca bir kaydınız vardır.
Her dağıtım için benzersiz bir ad belirttiğinizde, bunları çakışma olmadan eşzamanlı olarak çalıştırabilirsiniz. adlı newStorage1 bir depolama hesabı dağıtan ve aynı zamanda adlı storage1bir depolama hesabı dağıtan başka bir dağıtım newStorage2 çalıştırırsanız, dağıtım geçmişinde iki depolama hesabınız storage2ve iki girdiniz vardır.
Eşzamanlı dağıtımlarla çakışmaları önlemek ve dağıtım geçmişinde benzersiz girdiler sağlamak için her dağıtıma benzersiz bir ad verin.
Yerel şablonu dağıtma
Yerel makinenizden veya harici olarak depolanan bir şablondan şablon dağıtabilirsiniz. Bu bölümde yerel şablon dağıtma açıklanmaktadır.
Mevcut olmayan bir kaynak grubuna dağıtıyorsanız kaynak grubunu oluşturun. Kaynak grubunun adı yalnızca alfasayısal karakterler, nokta, alt çizgi, kısa çizgi ve parantez içerebilir. En fazla 90 karakter olabilir. Ad bir noktayla bitemez.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.create_or_update(
"exampleGroup",
{
"location": "Central US"
}
)
print(f"Provisioned resource group with ID: {rg_result.id}")
ARM şablonu dağıtmak için ResourceManagementClient.deployments.begin_create_or_update kullanın. Aşağıdaki örnekte adlı storage.jsonyerel bir şablon gerekir.
import os
import json
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
with open("storage.json", "r") as template_file:
template_body = json.load(template_file)
rg_deployment_result = resource_client.deployments.begin_create_or_update(
"exampleGroup",
"exampleDeployment",
{
"properties": {
"template": template_body,
"parameters": {
"storagePrefix": {
"value": "demostore"
},
},
"mode": DeploymentMode.incremental
}
}
)
Dağıtımın tamamlanması birkaç dakika sürebilir.
Uzak şablonu dağıt
ARM şablonlarını yerel makinenizde depolamak yerine bunları bir dış konumda depolamayı tercih edebilirsiniz. Şablonları bir kaynak denetimi deposunda (GitHub gibi) saklayabilirsiniz. İsterseniz kuruluşunuzda paylaşılan erişim sağlamak için bir Azure depolama hesabı kullanabilirsiniz.
Mevcut olmayan bir kaynak grubuna dağıtıyorsanız kaynak grubunu oluşturun. Kaynak grubunun adı yalnızca alfasayısal karakterler, nokta, alt çizgi, kısa çizgi ve parantez içerebilir. En fazla 90 karakter olabilir. Ad bir noktayla bitemez.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.create_or_update(
"exampleGroup",
{
"location": "Central US"
}
)
print(f"Provisioned resource group with ID: {rg_result.id}")
ARM şablonu dağıtmak için ResourceManagementClient.deployments.begin_create_or_update kullanın. Aşağıdaki örnekte uzak şablon dağıtılır. Bu şablon bir depolama hesabı oluşturur.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "exampleGroup"
location = "westus"
template_uri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json"
rg_deployment_result = resource_client.deployments.begin_create_or_update(
resource_group_name,
"exampleDeployment",
{
"properties": {
"templateLink": {
"uri": template_uri
},
"parameters": {
"location": {
"value": location
}
},
"mode": DeploymentMode.incremental
}
}
)
Yukarıdaki örnek, şablon için genel olarak erişilebilen bir URI gerektirir. Bu, şablonunuzun hassas veriler içermemesi gerektiğinden çoğu senaryoda çalışır. Hassas verileri (yönetici parolası gibi) belirtmeniz gerekiyorsa bu değeri güvenli bir parametre olarak geçirin. Şablonlarınızı anonim erişime izin vermeyen bir depolama hesabında tutarsanız sas belirteci sağlamanız gerekir.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
sas_token = os.environ["SAS_TOKEN"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "exampleGroup"
location = "westus"
template_uri = f"https://stage20230425.blob.core.windows.net/templates/storage.json?{sas_token}"
rg_deployment_result = resource_client.deployments.begin_create_or_update(
resource_group_name,
"exampleDeployment",
{
"properties": {
"templateLink": {
"uri": template_uri
},
"parameters": {
"location": {
"value": location
}
},
"mode": DeploymentMode.incremental
}
}
)
Daha fazla bilgi için Bağlı şablonlar için göreli yolu kullanma bölümüne bakın.
Şablon belirtimini kullanıma al
Yerel veya uzak şablon dağıtmak yerine bir şablon belirtimi oluşturabilirsiniz. Şablon belirtimi, Azure aboneliğinizde ARM şablonu içeren bir kaynaktır. Şablonu kuruluşunuzdaki kullanıcılarla güvenli bir şekilde paylaşmayı kolaylaştırır. Şablon belirtimine erişim vermek için Azure rol tabanlı erişim denetimini (Azure RBAC) kullanırsınız.
Aşağıdaki örneklerde şablon belirtiminin nasıl oluşturulacağı ve dağıtılacağı gösterilmektedir.
İlk olarak, ARM şablonunu sağlayarak şablon belirtimini oluşturun.
import os
import json
from azure.identity import AzureCliCredential
from azure.mgmt.resource.templatespecs import TemplateSpecsClient
from azure.mgmt.resource.templatespecs.models import TemplateSpecVersion, TemplateSpec
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
template_specs_client = TemplateSpecsClient(credential, subscription_id)
template_spec = TemplateSpec(
location="westus2",
description="Storage Spec"
)
template_specs_client.template_specs.create_or_update(
"templateSpecsRG",
"storageSpec",
template_spec
)
with open("storage.json", "r") as template_file:
template_body = json.load(template_file)
version = TemplateSpecVersion(
location="westus2",
description="Storage Spec",
main_template=template_body
)
template_spec_result = template_specs_client.template_spec_versions.create_or_update(
"templateSpecsRG",
"storageSpec",
"1.0.0",
version
)
print(f"Provisioned template spec with ID: {template_spec_result.id}")
Ardından, şablon belirtiminin kimliğini alın ve dağıtımını gerçekleştirin.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
from azure.mgmt.resource.templatespecs import TemplateSpecsClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
template_specs_client = TemplateSpecsClient(credential, subscription_id)
template_spec = template_specs_client.template_spec_versions.get(
"templateSpecsRg",
"storageSpec",
"1.0.0"
)
rg_deployment_result = resource_client.deployments.begin_create_or_update(
"exampleGroup",
"exampleDeployment",
{
"properties": {
"template_link": {
"id": template_spec.id
},
"mode": DeploymentMode.incremental
}
}
)
Daha fazla bilgi için bkz . Azure Resource Manager şablonu belirtimleri.
Değişiklikleri önizle
Şablonunuzu dağıtmadan önce, şablonun ortamınızda yapacağı değişikliklerin önizlemesini görebilirsiniz. Şablonun beklediğiniz değişiklikleri yaptığını doğrulamak için durum işlemini kullanın. What-if analizi, şablonu hatalara karşı da doğrular.
Sonraki Adımlar
- Hata aldığınızda, başarılı bir dağıtıma geri almak için Hata durumunda başarılı dağıtıma geri alma bölümüne bakın.
- Kaynak grubunda var olan ancak şablonda tanımlanmayan kaynakların nasıl işleneceğini belirtmek için bkz . Azure Resource Manager dağıtım modları.
- Şablonunuzda parametreleri tanımlamayı anlamak için bkz . ARM şablonlarının yapısını ve söz dizimini anlama.
- SAS belirteci gerektiren bir şablonu dağıtma hakkında bilgi için bkz . SAS belirteci ile özel ARM şablonu dağıtma.