ARM şablonlarında dağıtım betiklerini kullanma
Azure Resource Manager (ARM) şablonlarında dağıtım betiklerini kullanmayı öğrenin. Kaynakla deploymentScripts
, kullanıcılar ARM dağıtımlarında betik yürütebilir ve yürütme sonuçlarını gözden geçirebilir.
İpucu
ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi için bkz . Dağıtım betiği.
Bu betikler aşağıdakiler gibi özel adımlar gerçekleştirmek için kullanılabilir:
- Dizine kullanıcı ekleme.
- Blobları veya tohum veritabanını kopyalama gibi veri düzlemi işlemleri gerçekleştirin.
- Lisans anahtarını arayın ve doğrulayın.
- Otomatik olarak imzalanan bir sertifika oluşturun.
- Microsoft Entra Id'de bir nesne oluşturun.
- Özel sistemden IP Adresi bloklarını arayın.
Dağıtım betiğinin avantajları:
- Kolayca kodlayın, kullanın ve hata ayıklayın. Sık kullandığınız geliştirme ortamlarında dağıtım betikleri geliştirebilirsiniz. Betikler şablonlara veya dış betik dosyalarına eklenebilir.
- Betik dilini ve platformu belirtebilirsiniz. Şu anda Linux ortamındaKi Azure PowerShell ve Azure CLI dağıtım betikleri desteklenmektedir.
- Komut satırı bağımsız değişkenlerinin betike geçirilmesine izin verin.
- Betik çıkışlarını belirtebilir ve bunları dağıtıma geri geçirebilir.
Dağıtım betiği kaynağı yalnızca Azure Container Instance'ın kullanılabildiği bölgelerde kullanılabilir. Bkz. Azure bölgelerindeki Azure Container Instances için kaynak kullanılabilirliği. Şu anda dağıtım betiği yalnızca genel ağ kullanır.
Önemli
Dağıtım betiği hizmeti, betik yürütme ve sorun giderme için iki destekleyici kaynak gerektirir: depolama hesabı ve kapsayıcı örneği. Mevcut bir depolama hesabını belirtebilirsiniz, aksi takdirde betik hizmeti sizin için bir hesap oluşturur. Otomatik olarak oluşturulan iki destekleyici kaynak genellikle dağıtım betiği yürütmesi terminal durumunda olduğunda betik hizmeti tarafından silinir. Destek kaynakları silinene kadar faturalandırılırsınız. Fiyat bilgileri için bkz . Kapsayıcı Örnekleri fiyatlandırması ve Azure Depolama fiyatlandırması. Daha fazla bilgi edinmek için bkz . Dağıtım betiği kaynaklarını temizleme.
Not
Azure oturum açma için yeniden deneme mantığı artık sarmalayıcı betiğinde yerleşik olarak bulunur. Dağıtım betiklerinizle aynı şablonda izinler verirseniz, yönetilen kimlik rolü ataması çoğaltılana kadar dağıtım betiği hizmeti 10 saniyelik aralıkla 10 dakika boyunca oturum açmayı yeniden dener.
Eğitim kaynakları
Adım adım yönergeler aracılığıyla dağıtım betikleri hakkında bilgi edinmek isterseniz bkz . Dağıtım betiklerini kullanarak ARM şablonlarını genişletme.
En düşük izinleri yapılandırma
Dağıtım betiği API'si sürüm 2020-10-01 veya üzeri için, dağıtım betiği yürütmede iki sorumlu vardır:
Dağıtım sorumlusu (şablonu dağıtmak için kullanılan sorumlu): Bu sorumlu, dağıtım betiği kaynağının yürütülmesi için gereken temel kaynakları (depolama hesabı ve Azure kapsayıcı örneği) oluşturmak için kullanılır. En düşük ayrıcalık izinlerini yapılandırmak için dağıtım sorumlusuna aşağıdaki özelliklere sahip özel bir rol atayın:
{ "roleName": "deployment-script-minimum-privilege-for-deployment-principal", "description": "Configure least privilege for the deployment principal in deployment script", "type": "customRole", "IsCustom": true, "permissions": [ { "actions": [ "Microsoft.Storage/storageAccounts/*", "Microsoft.ContainerInstance/containerGroups/*", "Microsoft.Resources/deployments/*", "Microsoft.Resources/deploymentScripts/*" ], } ], "assignableScopes": [ "[subscription().id]" ] }
Azure Depolama ve Azure Container Instance kaynak sağlayıcıları kaydedilmediyse ve
Microsoft.ContainerInstance/register/action
öğesini de eklemenizMicrosoft.Storage/register/action
gerekir.Dağıtım betiği sorumlusu: Bu sorumlu yalnızca dağıtım betiğinin Azure'da kimlik doğrulaması yapması ve Azure CLI/PowerShell çağrısı yapması gerekiyorsa gereklidir. Dağıtım betiği sorumlusunu belirtmenin iki yolu vardır:
- özelliğinde
identity
kullanıcı tarafından atanan bir yönetilen kimlik belirtin (bkz . Örnek şablonlar). Belirtildiğinde, betik hizmeti dağıtım betiğini çağırmadan önce çağırırConnect-AzAccount -Identity
. Yönetilen kimliğin betikteki işlemi tamamlamak için gerekli erişime sahip olması gerekir. Şu anda özellik içinidentity
yalnızca kullanıcı tarafından atanan yönetilen kimlik desteklenmektedir. Farklı bir kimlikle oturum açmak için bu listedeki ikinci yöntemi kullanın. - Hizmet sorumlusu kimlik bilgilerini güvenli ortam değişkenleri olarak geçirin ve ardından dağıtım betiğinde Connect-AzAccount veya az login çağrısı yapabilir.
Yönetilen kimlik kullanılırsa, dağıtım sorumlusunun yönetilen kimlik kaynağına Atanmış Yönetilen Kimlik operatörü rolüne (yerleşik bir rol) sahip olması gerekir.
- özelliğinde
Örnek şablonlar
Aşağıdaki JSON bir örnektir. Daha fazla bilgi için en son şablon şemasına bakın.
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runPowerShellInline",
"location": "[resourceGroup().location]",
"tags": {
"tagName1": "tagValue1",
"tagName2": "tagValue2"
},
"kind": "AzurePowerShell", // or "AzureCLI"
"identity": {
"type": "userAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myID": {}
}
},
"properties": {
"forceUpdateTag": "1",
"containerSettings": {
"containerGroupName": "mycustomaci"
},
"storageAccountSettings": {
"storageAccountName": "myStorageAccount",
"storageAccountKey": "myKey"
},
"azPowerShellVersion": "9.7", // or "azCliVersion": "2.47.0",
"arguments": "-name \\\"John Dole\\\"",
"environmentVariables": [
{
"name": "UserName",
"value": "jdole"
},
{
"name": "Password",
"secureValue": "jDolePassword"
}
],
"scriptContent": "
param([string] $name)
$output = 'Hello {0}. The username is {1}, the password is {2}.' -f $name,${Env:UserName},${Env:Password}
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
", // or "primaryScriptUri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.ps1",
"supportingScriptUris":[],
"timeout": "PT30M",
"cleanupPreference": "OnSuccess",
"retentionInterval": "P1D"
}
}
Not
Örnek, tanıtım amaçlıdır. özellikleri scriptContent
ve primaryScriptUri
bir şablonda birlikte var olamaz.
Not
scriptContent, birden çok satır içeren bir betik gösterir. Azure portalı ve Azure DevOps işlem hattı, birden çok satır içeren bir dağıtım betiğini ayrıştıramaz. PowerShell komutlarını (noktalı virgül veya \r\n veya \n kullanarak) tek bir satıra zincirleyebilir veya özelliğini bir dış betik dosyasıyla kullanabilirsinizprimaryScriptUri
. Kullanılabilir birçok ücretsiz JSON dize kaçış/manzara kaldırma aracı vardır. Örneğin, https://www.freeformatter.com/json-escape.html.
Özellik değeri ayrıntıları:
identity
: Betikte Azure'a özgü eylemler gerçekleştirmeniz gerekmediği sürece, dağıtım betiği API'sinin 2020-10-01 veya sonraki bir sürümü için kullanıcı tarafından atanan yönetilen kimlik isteğe bağlıdır. API sürüm 2019-10-01-preview için, dağıtım betiği hizmeti betikleri yürütmek için kullandığından yönetilen kimlik gerekir. Kimlik özelliği belirtildiğinde, betik hizmeti kullanıcı betiğini çağırmadan önce çağırırConnect-AzAccount -Identity
. Şu anda yalnızca kullanıcı tarafından atanan yönetilen kimlik desteklenmektedir. Farklı bir kimlikle oturum açmak için betikte Connect-AzAccount çağrısı yapabilirsiniz.tags
: Dağıtım betiği etiketleri. Dağıtım betiği hizmeti bir depolama hesabı ve kapsayıcı örneği oluşturursa, etiketler her iki kaynağa da geçirilir ve bunları tanımlamak için kullanılabilir. Bu kaynakları tanımlamanın bir diğer yolu da "azscripts" içeren sonekleri kullanmaktır. Daha fazla bilgi için bkz . Dağıtım betiklerini izleme ve sorunlarını giderme.kind
: Betiğin türünü belirtin. Şu anda Azure PowerShell ve Azure CLI betikleri desteklenmektedir. Değerler AzurePowerShell ve AzureCLI'dır.forceUpdateTag
: Bu değeri şablon dağıtımları arasında değiştirmek, dağıtım betiğini yeniden yürütmeye zorlar. veyautcNow()
işlevlerini kullanırsanıznewGuid()
, her iki işlev de yalnızca bir parametre için varsayılan değerde kullanılabilir. Daha fazla bilgi edinmek için bkz . Betiği birden çok kez çalıştırma.containerSettings
: Azure Container Instance'ı özelleştirme ayarlarını belirtin. Dağıtım betiği için yeni bir Azure Container Instance gerekir. Mevcut bir Azure Container Instance belirtemezsiniz. Ancak, kullanarakcontainerGroupName
kapsayıcı grubu adını özelleştirebilirsiniz. Belirtilmezse, grup adı otomatik olarak oluşturulur.storageAccountSettings
: Mevcut bir depolama hesabını kullanmak için ayarları belirtin. BelirtilmezsestorageAccountName
, otomatik olarak bir depolama hesabı oluşturulur. Bkz . Mevcut depolama hesabını kullanma.azPowerShellVersion
/azCliVersion
: Kullanılacak modül sürümünü belirtin. Desteklenen Azure PowerShell sürümlerinin listesine bakın. Sürüm, hangi kapsayıcı görüntüsünün kullanılacağını belirler:- 9'dan büyük veya 9'a eşit az sürümü Ubuntu 22.04 kullanır.
- 6'dan büyük veya 9'dan küçük az sürümde Ubuntu 20.04 kullanılır.
- 6'dan küçük Az sürümü Ubuntu 18.04 kullanır.
Önemli
Ubuntu 18.04 kullanım ömrünün sonuna yaklaştığından ve 31 Mayıs 2023'ün ötesinde güvenlik güncelleştirmeleri alamayacağından, Ubuntu'nun en son sürümüne yükseltme yapılması önerilir.
Desteklenen Azure CLI sürümlerinin listesine bakın.
Önemli
Dağıtım betiği, Microsoft Container Registry'den (MCR) sağlanan CLI görüntülerini kullanır. Bir CLI görüntüsünün dağıtım betiği için onaylanması genellikle yaklaşık bir ay sürer. 30 gün içinde yayımlanan CLI sürümlerini kullanmayın. Görüntülerin yayın tarihlerini bulmak için bkz . Azure CLI sürüm notları. Desteklenmeyen bir sürüm kullanılırsa, hata iletisi desteklenen sürümleri listeler.
arguments
: Parametre değerlerini belirtin. Değerler boşluklarla ayrılır.Dağıtım Betikleri, CommandLineToArgvW sistem çağrısını çağırarak bağımsız değişkenleri bir dize dizisine böler. Bağımsız değişkenler Azure Container Instance'a bir komut özelliği olarak geçirildiğinden ve komut özelliği bir dize dizisi olduğundan bu adım gereklidir.
Bağımsız değişkenler kaçış karakterleri içeriyorsa, karakterleri iki kez kaçmak için JsonEscaper kullanın. Özgün kaçış dizenizi aralığa yapıştırın ve kaçış'ı seçin. Araç, çift kaçışlı bir dize verir. Örneğin, önceki örnek şablonda bağımsız değişken şeklindedir
-name \"John Dole\"
. Kaçış dizesi şeklindedir-name \\\"John Dole\\\"
.Nesne türünde bir ARM şablonu parametresini bağımsız değişken olarak geçirmek için, string() işlevini kullanarak nesneyi dizeye dönüştürün ve ardından replace() işlevini kullanarak öğesini
\"
içine\\\"
değiştirin. Örneğin:replace(string(parameters('tables')), '\"', '\\\"')
environmentVariables
: Betikten geçireceğiniz ortam değişkenlerini belirtin. Daha fazla bilgi için bkz . Dağıtım betikleri geliştirme.scriptContent
: Betik içeriğini belirtin. Dış betiği çalıştırmak için bunun yerine kullanınprimaryScriptUri
. Örnekler için bkz. Satır içi betiği kullanma ve Dış betiği kullanma.primaryScriptUri
: Desteklenen dosya uzantılarına sahip birincil dağıtım betiği için genel olarak erişilebilir bir URL belirtin. Daha fazla bilgi için bkz . Dış betikleri kullanma.supportingScriptUris
: veyaprimaryScriptUri
içinde çağrılan destekleyici dosyalar için genel olarak erişilebilir URL'lerscriptContent
dizisi belirtin. Daha fazla bilgi için bkz . Dış betikleri kullanma.timeout
: ISO 8601 biçiminde belirtilen izin verilen en fazla betik yürütme süresini belirtin. Varsayılan değer P1D'dir.cleanupPreference
. Betik yürütmesi terminal durumunda olduğunda iki destekleyici dağıtım kaynağının (depolama hesabı ve kapsayıcı örneği) temizlenmesi tercihini belirtin. Varsayılan ayar Her zaman'dır; bu da terminal durumuna (Başarılı, Başarısız, İptal Edildi) rağmen destekleyici kaynakları silme anlamına gelir. Daha fazla bilgi edinmek için bkz . Dağıtım betiği kaynaklarını temizleme.retentionInterval
: Dağıtım betiği yürütmesi terminal durumuna ulaştıktan sonra hizmetin dağıtım betiği kaynağını tutma aralığını belirtin. Bu süre dolduğunda dağıtım betiği kaynağı silinir. Süre, ISO 8601 desenini temel alır. Bekletme aralığı 1 ile 26 saat (PT26H) arasındadır. Bu özellik, OnExpiration olarak ayarlandığında kullanılırcleanupPreference
. Daha fazla bilgi edinmek için bkz . Dağıtım betiği kaynaklarını temizleme.
Daha fazla örnek
- Örnek 1: Bir anahtar kasası oluşturun ve anahtar kasasına sertifika atamak için dağıtım betiğini kullanın.
- Örnek 2: Abonelik düzeyinde bir kaynak grubu oluşturun, kaynak grubunda bir anahtar kasası oluşturun ve ardından anahtar kasasına sertifika atamak için dağıtım betiğini kullanın.
- Örnek 3: Kullanıcı tarafından atanan bir yönetilen kimlik oluşturun, katkıda bulunan rolünü kaynak grubu düzeyinde kimliğe atayın, bir anahtar kasası oluşturun ve ardından anahtar kasasına sertifika atamak için dağıtım betiğini kullanın.
- Örnek 4: Bu, bu listedeki Örnek 1 ile aynı senaryodur. Dağıtım betiğini çalıştırmak için yeni bir kaynak grubu oluşturulur. Bu şablon bir abonelik düzeyi şablonudur.
- Örnek 5: Örnek 4 ile aynı senaryodur. Bu şablon bir kaynak grubu düzeyi şablonudur.
- Örnek 6: Kullanıcı tarafından atanan yönetilen kimliği el ile oluşturun ve Microsoft Entra uygulamaları oluşturmak için Microsoft Graph API'sini kullanma izni atayın; ARM şablonunda, bir Microsoft Entra uygulaması ve hizmet sorumlusu oluşturmak için bir dağıtım betiği kullanın ve nesne kimlikleri ile istemci kimliğinin çıktısını alın.
Satır içi betikleri kullanma
Aşağıdaki şablon türüyle Microsoft.Resources/deploymentScripts
tanımlanmış bir kaynak içerir. Vurgulanan bölüm satır içi betiktir.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"defaultValue": "\\\"John Dole\\\""
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runPowerShellInlineWithOutput",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"scriptContent": "
param([string] $name)
$output = \"Hello {0}\" -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"arguments": "[concat('-name', ' ', parameters('name'))]",
"timeout": "PT1H",
"cleanupPreference": "OnSuccess",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"result": {
"value": "[reference('runPowerShellInlineWithOutput').outputs.text]",
"type": "string"
}
}
}
Not
Satır içi dağıtım betikleri çift tırnak içine alındığından, dağıtım betiklerinin içindeki dizelerin ters eğik çizgi (\) kullanılarak veya tek tırnak içine alınarak kaçış karakterine sahip olması gerekir. Önceki JSON örneğinde gösterildiği gibi dize değiştirme kullanmayı da düşünebilirsiniz.
Betik bir parametre alır ve parametre değerini verir. DeploymentScriptOutputs
çıkışları depolamak için kullanılır. Çıkışlar bölümünde, satır depolanan value
değerlere nasıl erişeceklerini gösterir. Write-Output
hata ayıklama amacıyla kullanılır. Çıkış dosyasına nasıl erişeceğinizi öğrenmek için bkz . Dağıtım betiklerini izleme ve sorunlarını giderme. Özellik açıklamaları için bkz . Örnek şablonlar.
Betiği çalıştırmak için Cloud Shell'i açmak için Deneyin'i seçin ve ardından aşağıdaki kodu kabuk bölmesine yapıştırın.
$resourceGroupName = Read-Host -Prompt "Enter the name of the resource group to be created"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.json"
Write-Host "Press [ENTER] to continue ..."
Çıktı şuna benzer:
Dış betikleri kullanma
Satır içi betiklere ek olarak, dış betik dosyalarını da kullanabilirsiniz. Yalnızca ps1 dosya uzantısına sahip birincil PowerShell betikleri desteklenir. CLI betikleri için, betikler geçerli bash betikleri olduğu sürece birincil betikler herhangi bir uzantıya (veya uzantı olmadan) sahip olabilir. Dış betik dosyalarını kullanmak için değerini ile primaryScriptUri
değiştirinscriptContent
. Örneğin:
"primaryScriptUri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.ps1",
Daha fazla bilgi için örnek şablona bakın.
Dış betik dosyalarına erişilebilir olmalıdır. Azure depolama hesaplarında depolanan betik dosyalarınızın güvenliğini sağlamak için bir SAS belirteci oluşturun ve şablonun URI'sine ekleyin. Süre sonu süresini, dağıtımı tamamlamak için yeterli süre tanıyacak şekilde ayarlayın. Daha fazla bilgi için bkz . SAS belirteci ile özel ARM şablonu dağıtma.
Veya dağıtım betiği primaryScriptUri
supportingScriptUris
tarafından başvuruda bulunan betiklerin bütünlüğünü sağlamak sizin sorumluluğundadır. Yalnızca güvendiğiniz betiklere başvurun.
Destekleyici betikleri kullanma
Karmaşık mantıkları bir veya daha fazla destekleyici betik dosyasına ayırabilirsiniz. supportingScriptUris
özelliği, gerekirse destekleyici betik dosyalarına bir dizi URI sağlamanıza olanak tanır:
"scriptContent": "
...
./Create-Cert.ps1
...
"
"supportingScriptUris": [
"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/create-cert.ps1"
],
Destekleyici betik dosyaları hem satır içi betiklerden hem de birincil betik dosyalarından çağrılabilir. Destekleyici betik dosyalarının dosya uzantısı üzerinde hiçbir kısıtlaması yoktur.
Destekleyici dosyalar çalışma zamanında öğesine azscripts/azscriptinput
kopyalanır. Satır içi betiklerden ve birincil betik dosyalarından destekleyici dosyalara başvurmak için göreli yolu kullanın.
PowerShell betiklerinden gelen çıkışlarla çalışma
Aşağıdaki şablon, iki deploymentScripts
kaynak arasında değerlerin nasıl geçir yapılacağını gösterir:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"defaultValue": "John Dole"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "scriptInTemplate1",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"timeout": "PT1H",
"arguments": "[concat('-name', ' ', concat('\\\"', parameters('name'), '\\\"'))]",
"scriptContent": "
param([string] $name)
$output = 'Hello {0}' -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"cleanupPreference": "Always",
"retentionInterval": "P1D"
}
},
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "scriptInTemplate2",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"dependsOn": [
"scriptInTemplate1"
],
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"timeout": "PT1H",
"arguments": "[concat('-textToEcho', ' ', concat('\\\"', reference('scriptInTemplate1').outputs.text, '\\\"'))]",
"scriptContent": "
param([string] $textToEcho)
Write-Output $textToEcho
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $textToEcho
",
"cleanupPreference": "Always",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"result": {
"value": "[reference('scriptInTemplate2').outputs.text]",
"type": "string"
}
}
}
İlk kaynakta adlı $DeploymentScriptOutputs
bir değişken tanımlarsınız ve çıkış değerlerini depolamak için bunu kullanırsınız. Şablondaki başka bir kaynaktan çıkış değerine erişmek için şunu kullanın:
reference('<ResourceName>').outputs.text
CLI betiklerinden gelen çıkışlarla çalışma
CLI/bash, Azure PowerShell dağıtım betiklerinin aksine betik çıkışlarını depolamak için ortak bir değişken sunmaz. Bunun yerine, betik çıkış dosyasının konumunu belirtmek için adlı AZ_SCRIPTS_OUTPUT_PATH
bir ortam değişkeni kullanır. Bir ARM şablonu içinde dağıtım betiği yürütürken Bash kabuğu bu ortam değişkenini sizin için otomatik olarak yapılandırıyor. Önceden tanımlanmış değeri /mnt/azscripts/azscriptoutput/scriptoutputs.json olarak ayarlanır. Geçerli bir JSON dizesi nesne yapısına uyum sağlamak için çıkışlar gereklidir. Dosyanın içeriği bir anahtar-değer çifti olarak biçimlendirilmelidir. Örneğin, dize dizisi { "MyResult": [ "foo", "bar"] } olarak kaydedilmelidir. Yalnızca [ "foo", "bar" ] gibi dizi sonuçlarının depolanması geçersiz kabul edilir.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"identity": {
"type": "string"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runBashWithOutputs",
"location": "[resourceGroup().location]",
"kind": "AzureCLI",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters('identity')]": {
}
}
},
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"AzCliVersion": "2.40.0",
"timeout": "PT30M",
"arguments": "'foo' 'bar'",
"environmentVariables": [
{
"name": "UserName",
"value": "jdole"
},
{
"name": "Password",
"secureValue": "jDolePassword"
}
],
"scriptContent": "result=$(az keyvault list); echo \"arg1 is: $1\"; echo \"arg2 is: $2\"; echo \"Username is: $UserName\"; echo \"password is: $Password\"; echo $result | jq -c '{Result: map({id: .id})}' > $AZ_SCRIPTS_OUTPUT_PATH",
"cleanupPreference": "OnExpiration",
"retentionInterval": "P1D"
jq önceki örnekte kullanılmıştır. Kapsayıcı görüntüleriyle birlikte gelir. Bkz . Geliştirme ortamını yapılandırma.
Mevcut depolama hesabını kullanma
Betik yürütme ve sorun giderme için bir depolama hesabı ve kapsayıcı örneği gerekir. Mevcut bir depolama hesabını belirtme seçenekleriniz vardır, aksi takdirde kapsayıcı örneğiyle birlikte depolama hesabı betik hizmeti tarafından otomatik olarak oluşturulur. Mevcut depolama hesabını kullanma gereksinimleri:
Desteklenen depolama hesabı türleri şunlardır:
SKU Desteklenen Tür Premium_LRS FileStorage Premium_ZRS FileStorage Standard_GRS Depolama, StorageV2 Standard_GZRS StorageV2 Standard_LRS Depolama, StorageV2 Standard_RAGRS Depolama, StorageV2 Standard_RAGZRS StorageV2 Standard_ZRS StorageV2 Bu bileşimler dosya paylaşımlarını destekler. Daha fazla bilgi için bkz . Azure dosya paylaşımı oluşturma ve Depolama hesabı türleri.
Depolama hesabı güvenlik duvarı kuralları henüz desteklenmiyor. Daha fazla bilgi için bkz. Azure Depolama güvenlik duvarlarını ve sanal ağları yapılandırma.
Dağıtım sorumlusunun, dosya paylaşımlarını okuma, oluşturma, silme gibi depolama hesabını yönetme izinleri olmalıdır.
allowSharedKeyAccess
Depolama hesabının özelliği olaraktrue
ayarlanmalıdır. Azure Container Instance'a (ACI) depolama hesabı bağlamanın tek yolu erişim anahtarı kullanmaktır.
Mevcut bir depolama hesabını belirtmek için aşağıdaki JSON'yi öğesinin Microsoft.Resources/deploymentScripts
özellik öğesine ekleyin:
"storageAccountSettings": {
"storageAccountName": "myStorageAccount",
"storageAccountKey": "myKey"
},
storageAccountName
: depolama hesabının adını belirtin.storageAccountKey
: depolama hesabı anahtarlarından birini belirtin. Anahtarı almak için listKeys() işlevini kullanabilirsiniz. Örneğin:"storageAccountSettings": { "storageAccountName": "[variables('storageAccountName')]", "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]" }
Eksiksiz Microsoft.Resources/deploymentScripts
bir tanım örneği için bkz. Örnek şablonlar.
Mevcut bir depolama hesabı kullanıldığında, betik hizmeti benzersiz bir ada sahip bir dosya paylaşımı oluşturur. Betik hizmetinin dosya paylaşımını nasıl temizlediğini öğrenmek için bkz . Dağıtım betiği kaynaklarını temizleme.
Dağıtım betikleri geliştirme
Sonlandırılmayan hataları işleme
Dağıtım betiğinizdeki değişkeni kullanarak PowerShell'in sonlandırılmayan $ErrorActionPreference
hatalara nasıl yanıt vereceğini denetleyebilirsiniz. Değişken dağıtım betiğinizde ayarlı değilse, betik hizmeti varsayılan Continue değerini kullanır.
Betik hizmeti, betik ayarına $ErrorActionPreference
rağmen bir hatayla karşılaştığında kaynak sağlama durumunu Başarısız olarak ayarlar.
Ortam değişkenlerini kullanma
Dağıtım betiği şu ortam değişkenlerini kullanır:
Ortam değişkeni | Default value | Sistem ayrılmış |
---|---|---|
AZ_SCRIPTS_AZURE_ENVIRONMENT | AzureCloud | N |
AZ_SCRIPTS_CLEANUP_PREFERENCE | OnExpiration | N |
AZ_SCRIPTS_OUTPUT_PATH | <>AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY/<AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME> | Y |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY | /mnt/azscripts/azscriptinput | Y |
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY | /mnt/azscripts/azscriptoutput | Y |
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME | Azure PowerShell: userscript.ps1; Azure CLI: userscript.sh | Y |
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME | primaryscripturi.config | Y |
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME | supportingscripturi.config | Y |
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME | scriptoutputs.json | Y |
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME | executionresult.json | Y |
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY | /Abonelik/ | N |
kullanma AZ_SCRIPTS_OUTPUT_PATH
hakkında daha fazla bilgi için bkz . CLI betiğinden gelen çıkışlarla çalışma.
Güvenli dizeleri dağıtım betiğine geçirme
Kapsayıcı örneklerinizde ortam değişkenlerini (EnvironmentVariable) ayarlamak, kapsayıcı tarafından çalıştırılan uygulamanın veya betiğin dinamik yapılandırmasını sağlamanıza olanak tanır. Dağıtım betiği, güvenli olmayan ve güvenli olmayan ortam değişkenlerini Azure Container Instance ile aynı şekilde işler. Daha fazla bilgi için bkz . Kapsayıcı örneklerinde ortam değişkenlerini ayarlama. Örnek için bkz . Örnek şablonlar.
Ortam değişkenleri için izin verilen maksimum boyut 64 KB'tır.
Dağıtım betiklerini izleme ve sorunlarını giderme
Betik hizmeti bir depolama hesabı (mevcut bir depolama hesabı belirtmediğiniz sürece) ve betik yürütme için bir kapsayıcı örneği oluşturur. Bu kaynaklar betik hizmeti tarafından otomatik olarak oluşturulursa, her iki kaynak da kaynak adlarında son eke sahiptir azscripts
.
Kullanıcı betiği, yürütme sonuçları ve stdout dosyası depolama hesabının dosya paylaşımlarında depolanır. adlı azscripts
bir klasör var. klasöründe giriş ve çıkış dosyaları için iki klasör daha vardır: azscriptinput
ve azscriptoutput
.
Çıkış klasörü bir executionresult.json ve betik çıkış dosyasını içerir. betik yürütme hata iletisini executionresult.json görebilirsiniz. Çıkış dosyası yalnızca betik başarıyla yürütülürken oluşturulur. Giriş klasörü bir sistem PowerShell betik dosyası ve kullanıcı dağıtım betik dosyalarını içerir. Kullanıcı dağıtım betiği dosyasını düzeltilmiş bir betikle değiştirebilir ve Azure kapsayıcı örneğinden dağıtım betiğini yeniden çalıştırabilirsiniz.
Azure portal’ı kullanma
Dağıtım betiği kaynağını dağıttığınızda, kaynak Azure portalındaki kaynak grubunun altında listelenir. Aşağıdaki ekran görüntüsünde dağıtım betiği kaynağının Genel Bakış sayfası gösterilmektedir:
Genel bakış sayfasında kaynağın Sağlama durumu, Depolama hesabı, Kapsayıcı örneği ve Günlükler gibi bazı önemli bilgileri görüntülenir.
Sol menüden dağıtım betiği içeriğini, betike geçirilen bağımsız değişkenleri ve çıkışı görüntüleyebilirsiniz. Ayrıca dağıtım betiği için dağıtım betiği de dahil olmak üzere bir şablonu dışarı aktarabilirsiniz.
PowerShell kullanma
Azure PowerShell'i kullanarak dağıtım betiklerini abonelik veya kaynak grubu kapsamında yönetebilirsiniz:
- Get-AzDeploymentScript: Dağıtım betiklerini alır veya listeler.
- Get-AzDeploymentScriptLog: Dağıtım betiği yürütme günlüğünü alır.
- Remove-AzDeploymentScript: Dağıtım betiğini ve ilişkili kaynaklarını kaldırır.
- Save-AzDeploymentScriptLog: Dağıtım betiği yürütme günlüğünü diske kaydeder.
Çıkış Get-AzDeploymentScript
şuna benzer:
Name : runPowerShellInlineWithOutput
Id : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput
ResourceGroupName : myds0618rg
Location : centralus
SubscriptionId : aaaabbbb-0000-cccc-1111-dddd2222eeee
ProvisioningState : Succeeded
Identity : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mydentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami
ScriptKind : AzurePowerShell
AzPowerShellVersion : 9.7
StartTime : 5/11/2023 7:46:45 PM
EndTime : 5/11/2023 7:49:45 PM
ExpirationDate : 5/12/2023 7:49:45 PM
CleanupPreference : OnSuccess
StorageAccountId : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.Storage/storageAccounts/ftnlvo6rlrvo2azscripts
ContainerInstanceId : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.ContainerInstance/containerGroups/ftnlvo6rlrvo2azscripts
Outputs :
Key Value
================== ==================
text Hello John Dole
RetentionInterval : P1D
Timeout : PT1H
Azure CLI kullanma
Azure CLI kullanarak dağıtım betiklerini abonelik veya kaynak grubu kapsamında yönetebilirsiniz:
- az deployment-scripts delete: Dağıtım betiğini silin.
- az deployment-scripts list: Tüm dağıtım betiklerini listeleyin.
- az deployment-scripts show: Dağıtım betiğini alma.
- az deployment-scripts show-log: Dağıtım betiği günlüklerini göster.
Liste komutu çıkışı şuna benzer:
[
{
"arguments": "'foo' 'bar'",
"azCliVersion": "2.40.0",
"cleanupPreference": "OnExpiration",
"containerSettings": {
"containerGroupName": null
},
"environmentVariables": null,
"forceUpdateTag": "20231101T163748Z",
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runBashWithOutputs",
"identity": {
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "userAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourcegroups/myidentity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
}
},
"kind": "AzureCLI",
"location": "centralus",
"name": "runBashWithOutputs",
"outputs": {
"Result": [
{
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mytest/providers/Microsoft.KeyVault/vaults/mykv1027",
"resourceGroup": "mytest"
}
]
},
"primaryScriptUri": null,
"provisioningState": "Succeeded",
"resourceGroup": "mytest",
"retentionInterval": "1 day, 0:00:00",
"scriptContent": "result=$(az keyvault list); echo \"arg1 is: $1\"; echo $result | jq -c '{Result: map({id: .id})}' > $AZ_SCRIPTS_OUTPUT_PATH",
"status": {
"containerInstanceId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mytest/providers/Microsoft.ContainerInstance/containerGroups/eg6n7wvuyxn7iazscripts",
"endTime": "2023-11-01T16:39:12.080950+00:00",
"error": null,
"expirationTime": "2023-11-02T16:39:12.080950+00:00",
"startTime": "2023-11-01T16:37:53.139700+00:00",
"storageAccountId": null
},
"storageAccountSettings": {
"storageAccountKey": null,
"storageAccountName": "dsfruro267qwb4i"
},
"supportingScriptUris": null,
"systemData": {
"createdAt": "2023-10-31T19:06:57.060909+00:00",
"createdBy": "someone@contoso.com",
"createdByType": "User",
"lastModifiedAt": "2023-11-01T16:37:51.859570+00:00",
"lastModifiedBy": "someone@contoso.com",
"lastModifiedByType": "User"
},
"tags": null,
"timeout": "0:30:00",
"type": "Microsoft.Resources/deploymentScripts"
}
]
REST API’yi kullanma
REST API kullanarak kaynak grubu düzeyinde ve abonelik düzeyinde dağıtım betiği kaynak dağıtım bilgilerini alabilirsiniz:
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>?api-version=2020-10-01
/subscriptions/<SubscriptionID>/providers/microsoft.resources/deploymentScripts?api-version=2020-10-01
Aşağıdaki örnekte ARMClient kullanılır:
armclient login
armclient get /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourcegroups/myrg/providers/microsoft.resources/deploymentScripts/myDeployementScript?api-version=2020-10-01
Çıktı şuna benzer olacaktır:
{
"kind": "AzurePowerShell",
"identity": {
"type": "userAssigned",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myidentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
"principalId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444"
}
}
},
"location": "centralus",
"systemData": {
"createdBy": "someone@contoso.com",
"createdByType": "User",
"createdAt": "2023-05-11T02:59:04.7501955Z",
"lastModifiedBy": "someone@contoso.com",
"lastModifiedByType": "User",
"lastModifiedAt": "2023-05-11T02:59:04.7501955Z"
},
"properties": {
"provisioningState": "Succeeded",
"forceUpdateTag": "20220625T025902Z",
"azPowerShellVersion": "9.7",
"scriptContent": "\r\n param([string] $name)\r\n $output = \"Hello {0}\" -f $name\r\n Write-Output $output\r\n $DeploymentScriptOutputs = @{}\r\n $DeploymentScriptOutputs['text'] = $output\r\n ",
"arguments": "-name \\\"John Dole\\\"",
"retentionInterval": "P1D",
"timeout": "PT1H",
"containerSettings": {},
"status": {
"containerInstanceId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.ContainerInstance/containerGroups/64lxews2qfa5uazscripts",
"storageAccountId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Storage/storageAccounts/64lxews2qfa5uazscripts",
"startTime": "2023-05-11T02:59:07.5951401Z",
"endTime": "2023-05-11T03:00:16.7969234Z",
"expirationTime": "2023-05-12T03:00:16.7969234Z"
},
"outputs": {
"text": "Hello John Dole"
},
"cleanupPreference": "OnSuccess"
},
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput",
"type": "Microsoft.Resources/deploymentScripts",
"name": "runPowerShellInlineWithOutput"
}
Aşağıdaki REST API günlüğü döndürür:
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>/logs?api-version=2020-10-01
Yalnızca dağıtım betiği kaynakları silinmeden önce çalışır.
Portalda deploymentScripts kaynağını görmek için Gizli türleri göster'i seçin:
Dağıtım betiği kaynaklarını temizleme
Otomatik olarak oluşturulan iki destekleyici kaynak, silme hataları olmadığı sürece hiçbir zaman kaynaktan deploymentScript
daha uzun yaşayamayacaktır. Destekleyici kaynakların yaşam döngüsü özelliği tarafından cleanupPreference
denetlenir, kaynağın deploymentScript
yaşam döngüsü şu özellik tarafından retentionInterval
denetlenir:
cleanupPreference
: Betik yürütmesi terminal durumuna geldiğinde iki destekleyici kaynağın temizleme tercihini belirtin. Desteklenen değerler şunlardır:Her zaman: Betik yürütme terminal durumuna geçtikten sonra iki destekleyici kaynağı silin. Mevcut bir depolama hesabı kullanılırsa, betik hizmeti hizmet tarafından oluşturulan dosya paylaşımını siler. Destek kaynakları temizlendikten
deploymentScripts
sonra kaynak hala mevcut olabileceğinden, betik hizmeti betik yürütme sonuçlarını (örneğin, stdout, çıkışlar ve döndürme değeri) kaynaklar silinmeden önce kalıcı hale getirmektedir.OnSuccess: İki destekleyici kaynağı yalnızca betik yürütme başarılı olduğunda silin. Mevcut bir depolama hesabı kullanılıyorsa, betik hizmeti yalnızca betik yürütme başarılı olduğunda dosya paylaşımını kaldırır.
Betik yürütmesi başarılı olmazsa betik hizmeti, destek kaynaklarını ve ardından dağıtım betiği kaynağını temizlemeden önce süresi dolana kadar
retentionInterval
bekler.OnExpiration: İki destekleyici kaynağı yalnızca ayarın
retentionInterval
süresi dolduğunda silin. Mevcut bir depolama hesabı kullanılıyorsa, betik hizmeti dosya paylaşımını kaldırır, ancak depolama hesabını korur.
Kapsayıcı örneği ve depolama hesabı öğesine
cleanupPreference
göre silinir. Ancak betik başarısız olursa vecleanupPreference
Her Zaman olarak ayarlanmadıysa, dağıtım işlemi kapsayıcıyı otomatik olarak bir saat boyunca veya kapsayıcı temizlenene kadar çalışır durumda tutar. Betiğin sorunlarını gidermek için zamanı kullanabilirsiniz. Başarılı dağıtımlardan sonra kapsayıcıyı çalışır durumda tutmak istiyorsanız betiğinize bir uyku adımı ekleyin. Örneğin, betiğinizin sonuna Start-Sleep ekleyin. Uyku adımını eklemezseniz kapsayıcı terminal durumuna ayarlanır ve henüz silinmemiş olsa bile erişilemiyordur.retentionInterval
: KaynağındeploymentScript
tutulacağı ve sonra süresinin dolacağı ve silineceği zaman aralığını belirtin.
Not
Depolama hesabını ve betik hizmeti tarafından oluşturulan kapsayıcı örneğini başka amaçlarla kullanmanız önerilmez. betik yaşam döngüsüne bağlı olarak iki kaynak kaldırılabilir.
Dağıtım betiği CanNotDelete kilidi olan bir kaynak grubuna dağıtılırsa, otomatik olarak oluşturulan depolama hesabı ve kapsayıcı örneği silinemez. Bu sorunu çözmek için dağıtım betiğini kilitsiz başka bir kaynak grubuna dağıtabilirsiniz. Örnek şablonlar'da Örnek 4 ve Örnek 5'e bakın.
Betiği birden çok kez çalıştırma
Dağıtım betiği yürütme, bir kez etkili bir işlemdir. Kaynak özelliklerinden hiçbiri deploymentScripts
(satır içi betik dahil) değiştirilmezse, şablonu yeniden dağıttığınızda betik yürütülmüyor. Dağıtım betiği hizmeti, şablondaki kaynak adlarını aynı kaynak grubundaki mevcut kaynaklarla karşılaştırır. Aynı dağıtım betiğini birden çok kez yürütmek istiyorsanız iki seçenek vardır:
Kaynağınızın
deploymentScripts
adını değiştirin. Örneğin, kaynak adı olarak veya kaynak adının bir parçası olarak utcNow şablonu işlevini kullanın. Kaynak adını değiştirmek yenideploymentScripts
bir kaynak oluşturur. Betik yürütme geçmişini tutmak için iyidir.Not
utcNow
İşlev yalnızca parametre için varsayılan değerde kullanılabilir.Şablon özelliğinde
forceUpdateTag
farklı bir değer belirtin. Örneğin, değer olarak kullanınutcNow
.
Not
Bir kez etkili olan dağıtım betiklerini yazın. Bu, yeniden yanlışlıkla çalıştırılırsa sistem değişikliklerine neden olmamasını sağlar. Örneğin, dağıtım betiği bir Azure kaynağı oluşturmak için kullanılıyorsa, kaynağı oluşturmadan önce mevcut olmadığını doğrulayın; bu nedenle betik başarılı olur veya kaynağı yeniden oluşturmazsınız.
Geliştirme ortamını yapılandırma
Dağıtım betiği geliştirme ortamınız olarak önceden yapılandırılmış bir kapsayıcı görüntüsü kullanabilirsiniz. Daha fazla bilgi için bkz . Şablonlarda dağıtım betikleri için geliştirme ortamını yapılandırma.
Betik başarıyla test edildikten sonra şablonlarınızda dağıtım betiği olarak kullanabilirsiniz.
Dağıtım betiği hata kodları
Hata kodu | Açıklama |
---|---|
DeploymentScriptInvalidOperation | Şablondaki dağıtım betiği kaynak tanımı geçersiz özellik adları içeriyor. |
DeploymentScriptResourceConflict | Belirsiz durumdaki bir dağıtım betiği kaynağı silinemiyor ve yürütme 1 saati aşmadı. Veya aynı dağıtım betiğini aynı kaynak tanımlayıcısıyla (aynı abonelik, kaynak grubu adı ve kaynak adı) ancak aynı anda farklı betik gövdesi içeriğiyle yeniden çalıştıramazsınız. |
DeploymentScriptOperationFailed | Dağıtım betiği işlemi dahili olarak başarısız oldu. Microsoft desteğine başvurun. |
DeploymentScriptStorageAccountAccessKeyNotSpecified | Erişim anahtarı mevcut depolama hesabı için belirtilmedi. |
DeploymentScriptContainerGroupContainsInvalidContainers | Dağıtım betiği hizmeti tarafından oluşturulan bir kapsayıcı grubu dışarıdan değiştirildi ve geçersiz kapsayıcılar eklendi. |
DeploymentScriptContainerGroupInNonterminalState | İki veya daha fazla dağıtım betiği kaynağı aynı kaynak grubunda aynı Azure kapsayıcı örneği adını kullanır ve bunlardan biri henüz yürütmeyi tamamlamamıştır. |
DeploymentScriptStorageAccountInvalidKind | BlobBlobStorage veya BlobStorage türünün mevcut depolama hesabı dosya paylaşımlarını desteklemez ve kullanılamaz. |
DeploymentScriptStorageAccountInvalidKindAndSku | Mevcut depolama hesabı dosya paylaşımlarını desteklemiyor. Desteklenen depolama hesabı türlerinin listesi için bkz . Mevcut depolama hesabını kullanma. |
DeploymentScriptStorageAccountNotFound | Depolama hesabı yok veya bir dış işlem veya araç tarafından silindi. |
DeploymentScriptStorageAccountWithServiceEndpointEnabled | Belirtilen depolama hesabının bir hizmet uç noktası var. Hizmet uç noktasına sahip depolama hesabı desteklenmez. |
DeploymentScriptStorageAccountInvalidAccessKey | Mevcut depolama hesabı için geçersiz erişim anahtarı belirtildi. |
DeploymentScriptStorageAccountInvalidAccessKeyFormat | Geçersiz depolama hesabı anahtarı biçimi. Bkz. Depolama hesabı erişim anahtarlarını yönetme. |
DeploymentScriptExceededMaxAllowedTime | Dağıtım betiği yürütme süresi, dağıtım betiği kaynak tanımında belirtilen zaman aşımı değerini aştı. |
DeploymentScriptInvalidOutputs | Dağıtım betiği çıkışı geçerli bir JSON nesnesi değil. |
DeploymentScriptContainerInstancesServiceLoginFailure | Kullanıcı tarafından atanan yönetilen kimlik, 1 dakikalık aralıkla 10 denemeden sonra oturum açamadı. |
DeploymentScriptContainerGroupNotFound | Dağıtım betik hizmeti tarafından oluşturulan kapsayıcı grubu bir dış araç veya işlem tarafından silindi. |
DeploymentScriptDownloadFailure | Destekleyici betik indirilemedi. Bkz . Destekleyici betiği kullanma. |
DeploymentScriptError | Kullanıcı betiği hata verdi. |
DeploymentScriptBootstrapScriptExecutionFailed | Bootstrap betiği hata verdi. Bootstrap betiği, dağıtım betiği yürütmeyi düzenleyen sistem betiğidir. |
DeploymentScriptExecutionFailed | Dağıtım betiği yürütme sırasında bilinmeyen hata. |
DeploymentScriptContainerInstancesServiceUnavailable | Azure kapsayıcı örneğini (ACI) oluştururken ACI bir hizmet kullanılamıyor hatası verdi. |
DeploymentScriptContainerGroupInNonterminalState | Azure kapsayıcı örneğini (ACI) oluştururken, başka bir dağıtım betiği aynı kapsamda aynı ACI adını (aynı abonelik, kaynak grubu adı ve kaynak adı) kullanıyor. |
DeploymentScriptContainerGroupNameInvalid | Belirtilen Azure kapsayıcı örneği adı (ACI), ACI gereksinimlerini karşılamıyor. Bkz. Azure Container Instances'ta sık karşılaşılan sorunları giderme. |
Microsoft Graph'i bir dağıtım betiği içinde kullanma
Bir dağıtım betiği, Microsoft Entra Id'de nesneler oluşturmak ve bunlarla çalışmak için Microsoft Graph'ı kullanabilir.
Komutlar
Azure CLI dağıtım betiklerini kullanırken komut grubu içindeki az ad
komutları kullanarak uygulamalar, hizmet sorumluları, gruplar ve kullanıcılarla çalışabilirsiniz. Ayrıca komutunu kullanarak Microsoft Graph API'lerini az rest
doğrudan çağırabilirsiniz.
Azure PowerShell dağıtım betiklerini kullandığınızda, doğrudan Microsoft Graph API'lerini çağırmak için cmdlet'ini kullanabilirsiniz Invoke-RestMethod
.
İzinler
Dağıtım betiğinizin kullandığı kimliğin, gerçekleştirdiği işlemler için uygun izinlerle Microsoft Graph API'si ile çalışma yetkisine sahip olması gerekir. Kullanıcı tarafından atanan yönetilen kimliği önceden oluşturup Microsoft Graph için bir uygulama rolü atayarak şablon dağıtımınızın dışında kimliği yetkilendirmeniz gerekir. Daha fazla bilgi için bu hızlı başlangıç örneğine bakın.
Özel sanal ağa erişme
Microsoft.Resources/deploymentScripts sürüm 2023-08-01 ile dağıtım betiklerini bazı ek yapılandırmalarla özel ağlarda çalıştırabilirsiniz.
Kullanıcı tarafından atanan bir yönetilen kimlik oluşturun ve özelliğinde
identity
belirtin. Kimliği atamak için bkz . Kimlik.olarak ayarlanmış
true
bir depolama hesabı oluşturun ve mevcut depolama hesabınıallowSharedKeyAccess
kullanmak için dağıtım betiğini belirtin. Var olan bir depolama hesabını belirtmek için bkz . Mevcut depolama hesabını kullanma. Depolama hesabı için bazı ek yapılandırmalar gereklidir.Sol menüden Erişim Denetimi (IAM) öğesini ve ardından Rol atamaları sekmesini seçin.
Storage File Data Privileged Contributor
Rolü kullanıcı ataması yönetilen kimliğine ekleyin.Soldaki menüden Güvenlik + ağ altında Ağ'ı ve ardından Güvenlik duvarları ve sanal ağlar'ı seçin.
Seçili sanal ağlardan ve IP adreslerinden Etkin'i seçin.
Sanal ağlar'ın altında bir alt ağ ekleyin. Ekran görüntüsünde alt ağa dspvnVnet adı verilir.
Özel Durumlar'ın altında, güvenilen hizmetler listesindeki Azure hizmetlerinin bu depolama hesabına erişmesine izin ver'i seçin.
Aşağıdaki ARM şablonu, bir dağıtım betiği çalıştırmak için ortamı yapılandırmayı gösterir:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string",
"maxLength": 10
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"userAssignedIdentityName": {
"type": "string",
"defaultValue": "[format('{0}Identity', parameters('prefix'))]"
},
"storageAccountName": {
"type": "string",
"defaultValue": "[format('{0}stg{1}', parameters('prefix'), uniqueString(resourceGroup().id))]"
},
"vnetName": {
"type": "string",
"defaultValue": "[format('{0}Vnet', parameters('prefix'))]"
},
"subnetName": {
"type": "string",
"defaultValue": "[format('{0}Subnet', parameters('prefix'))]"
}
},
"resources": [
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2023-09-01",
"name": "[parameters('vnetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/16"
]
},
"enableDdosProtection": false,
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "10.0.0.0/24",
"serviceEndpoints": [
{
"service": "Microsoft.Storage"
}
],
"delegations": [
{
"name": "Microsoft.ContainerInstance.containerGroups",
"properties": {
"serviceName": "Microsoft.ContainerInstance/containerGroups"
}
}
]
}
}
]
}
},
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"networkAcls": {
"bypass": "AzureServices",
"virtualNetworkRules": [
{
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]",
"action": "Allow",
"state": "Succeeded"
}
],
"defaultAction": "Deny"
},
"allowSharedKeyAccess": true
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
]
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2023-07-31-preview",
"name": "[parameters('userAssignedIdentityName')]",
"location": "[parameters('location')]"
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName'))]",
"name": "[guid(tenantResourceId('Microsoft.Authorization/roleDefinitions', '69566ab7-960f-475b-8e7c-b3118f30c6bd'), resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]",
"properties": {
"principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), '2023-07-31-preview').principalId]",
"roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', '69566ab7-960f-475b-8e7c-b3118f30c6bd')]",
"principalType": "ServicePrincipal"
},
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName'))]"
]
}
]
}
Dağıtımı test etmek için aşağıdaki ARM şablonunu kullanabilirsiniz:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
},
"storageAccountName": {
"type": "string"
},
"vnetName": {
"type": "string"
},
"subnetName": {
"type": "string"
},
"userAssignedIdentityName": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2023-08-01",
"name": "[format('{0}DS', parameters('prefix'))]",
"location": "[parameters('location')]",
"identity": {
"type": "userAssigned",
"userAssignedIdentities": {
"[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')))]": {}
}
},
"kind": "AzureCLI",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azCliVersion": "2.47.0",
"storageAccountSettings": {
"storageAccountName": "[parameters('storageAccountName')]"
},
"containerSettings": {
"subnetIds": [
{
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]"
}
]
},
"scriptContent": "echo \"Hello world!\"",
"retentionInterval": "P1D",
"cleanupPreference": "OnExpiration"
}
}
]
}
Sonraki adımlar
Bu makalede dağıtım betiklerini kullanmayı öğrendiniz. Dağıtım betiği öğreticisinde gezinmek için: