Dağıtım betikleri nedir?
Bu ünitede kaynağın deploymentScripts
Azure Resource Manager (ARM) şablonlarını nasıl genişletebileceğini öğreneceksiniz.
ARM şablonları harika şeylerdir. Bunları kullanarak bulut altyapınızın istenen durumunu bildirebilir ve API'lerin ve hizmetlerin sizi oraya nasıl ulaşacaklarını öğrenmesini sağlayabilirsiniz. Ancak, bazen Azure Resource Manager'ın sağladığının dışında eylemler gerçekleştirmeniz gerekir.
Dağıtım betikleri nedir?
deploymentScripts
kaynaklar, şablon dağıtımınızın bir parçası olarak Docker kapsayıcısında çalışan PowerShell veya Bash betikleridir. Varsayılan kapsayıcı görüntüleri Azure CLI veya Azure PowerShell'e sahiptir. Bu betikler ARM şablonu işleme sırasında çalıştırıldığından dağıtım işlemine özel davranış ekleyebilirsiniz.
Dağıtım betikleri, Azure'da kimlik doğrulaması yapmak için yönetilen kimlik kullanır. Yönetilen kimlik, kimlik bilgileri ve yaşam döngüsü Azure platformu tarafından yönetilen bir hizmet sorumlusudur. Bu kimlik, Azure PowerShell veya Azure CLI komutlarının ortamda işlem yapmak için kullanacağı kimliktir. Kimliği atadığınızdan, kaynağın deploymentScripts
neleri etkileyebileceğinin kapsamını denetleyebilirsiniz.
Kaynak, deploymentScripts
dağıtımdaki diğer kaynakların kullanabileceği bir çıktı oluşturur. Daha sonra dış sistemden bilgi arayabilir veya dağıtımın geri kalanını etkilemek için ortamınızın geçerli durumuna göre veri sağlayabilirsiniz.
Dağıtım betikleri nasıl çalışır?
Kaynak deploymentScripts
, kullanıcı tarafından sağlanan bir betik (şablondan veya URI ile) ve büyük olasılıkla bazı destekleyici betikleri alır ve bunları bir Azure kapsayıcı örneğinde çalıştırır. Bu kapsayıcı örneğine, sağladığınız yönetilen kimlik atanır. Betikler ve çıktıları bir Azure depolama hesabı için dosya paylaşımında depolanır.
Şablon dağıtımı çalıştırıldığında, hedeflenen kaynak grubunda mevcut deploymentScripts
bir kaynak olup olmadığını denetler. Öyleyse, özellikleri karşılaştırır. Her şey eşleşirse, yeni bir şey olmaz. Kaynak yoksa veya değiştirilmişse, Azure Resource Manager yeni bir kapsayıcı örneği oluşturur ve dağıtım betiklerini bu kapsayıcı örneğinde çalıştırır. Tanımlanan tüm çıkışlar, dağıtımda daha sonra kullanılmak üzere Azure Resource Manager'a geri geçirilir.
Dağıtım betiği yapısı
ARM şablonuna özel bir davranış eklemek için kaynakla deploymentScripts
başlarsınız. En azından aşağıdakiler gibi yaygın ayrıntıları sağlamanız gerekir:
- Kaynak için A
name
deploymentScripts
. type
veapiVersion
değerleri.- Destekleyici kaynakların oluşturulacağı konum (
location
değer). - Boş
properties
bir nesne. Kısa bir süre sonra buna ulaşacaksın.
İki deploymentScripts
özel değer gereklidir:
kind
: Çalıştırılacak betiğin türü (AzurePowerShell
veyaAzureCLI
).{ "type": "Microsoft.Resources/deploymentScripts", "apiVersion": "2020-10-01", "name": "myFirstDeploymentScript", "location": "[resourceGroup().location]", "kind": "AzurePowerShell", "identity": { "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid": {} } } }
resource myFirstDeploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = { name: 'myFirstDeploymentScript' location: resourceGroup().location kind: 'AzurePowerShell' identity: { type: 'UserAssigned' userAssignedIdentities: { '/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid': {} } } }
identity
: Kapsayıcı örneğinin kullanacağı yönetilen kimlik. Yönetilen kimliği önceden oluşturup aşağıdaki örnekte olduğu gibi belirtebilir veya şablonda oluşturup orada başvurabilirsiniz (sonraki alıştırmada bunu yapacaksınız).{ "type": "Microsoft.Resources/deploymentScripts", "apiVersion": "2020-10-01", "name": "myFirstDeploymentScript", "location": "[resourceGroup().location]", "kind": "AzurePowerShell", "identity": { "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid": {} } } }
resource myFirstDeploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = { name: 'myFirstDeploymentScript' location: resourceGroup().location kind: 'AzurePowerShell' identity: { type: 'UserAssigned' userAssignedIdentities: { '/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid': {} } } }
Bu öğeleri ayarladıktan sonra kaynağın properties
bölümüne deploymentScripts
geçebilirsiniz. Bunun ana bölümü, yürütülecek gerçek betiği belirten bölümüdür scriptContent
:
"properties": {
"scriptContent": "
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
}
properties: {
scriptContent: '''
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
'''
}
çok satırlı bir dize kullandığına scriptContent
dikkat edin. Bicep'te, dizenizden önce ve sonra birlikte üç tırnak işareti ('''
) kullanarak çok satırlı bir dize belirtebilirsiniz.
Dağıtım betiğinin çıkışları dağıtıma geri geçirmesi yaygın bir durumdır. Örneğin, BIR API'den bazı bilgileri aramak için bir betik kullanıyorsanız, bilgileri dağıtıma çıkış olarak geri geçirebilirsiniz. Daha sonra dağıtımdaki diğer kaynaklar bilgileri kendi tanımlarında kullanabilir.
PowerShell betiği için, karma tablo olması gereken adlı $DeploymentScriptOutputs
bir değişken oluşturarak çıkışları geri geçirirsiniz. Örnek betik karma tablosunu başlatır ve ardından değerini yerel değişkenden $output
alan adlı text
bir çıkış oluşturur:
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
Bahşiş
Bash'te dağıtım betikleri de yazabilirsiniz. Bash betiğinden çıkışlar oluşturmak için ortam değişkeni tarafından AZ_SCRIPTS_OUTPUT_PATH
belirtilen bir konumda bir JSON dosyası oluşturmanız gerekir.
properties
bölümünde, kullanılabilecek çeşitli seçenekleri deploymentScripts
de tanımlarsınız. Bu modülde, bunu basit tutacağız ve betiği çalıştırmak için yeterli miktarda ekleyeceğiz. En azından, kullanılacak Azure PowerShell veya Azure CLI sürümünü, çalıştırılacak betiği ve bekletme aralığını sağlamanız gerekir.
Kaynakları tutmak istiyorsanız elde tutma aralığı, sonuçların ne kadar süreyle tutulacağıdır. Varsayılan olarak, betiği çalıştırdıktan sonra sonuçlar kaldırılır.
"properties": {
"azPowerShellVersion": "3.0",
"scriptContent": "
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"retentionInterval": "P1D"
}
properties: {
azPowerShellVersion: '3.0'
scriptContent: '''
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
'''
retentionInterval: 'P1D'
}
Tam şablonumuz şuna benzer olacaktır:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"apiProfile": "",
"parameters": {},
"variables": {},
"functions": [],
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "myFirstDeploymentScript",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid": {}
}
},
"properties": {
"azPowerShellVersion": "3.0",
"scriptContent": "
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"scriptResult": {
"type": "string",
"value": "[reference('myFirstDeploymentScript').outputs.text]"
}
}
}
resource myFirstDeploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
name: 'myFirstDeploymentScript'
location: resourceGroup().location
kind: 'AzurePowerShell'
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid': {}
}
}
properties: {
azPowerShellVersion: '3.0'
scriptContent: '''
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
'''
retentionInterval: 'P1D'
}
}
output scriptResult string = myFirstDeploymentScript.properties.outputs.text
Betik dosyalarını dahil et
Betikleri şablonlara satır içine eklemek hantal, okunup anlaşılması zor ve değiştirilmesi zor olabilir. Bicep, dağıtımınıza dış metin dosyası eklemek için işlevini kullanır loadTextContent()
. Bicep, şablonunuzu JSON'a dönüştürdiğinde dış dosyayı yaydığı şablona ekler.
Bicep şablonunuzla aynı klasörde myscript.ps1 adlı bir PowerShell dosyanız olduğunu varsayalım. Bicep'e dosyayı şu şekilde eklemesini söyleyebilirsiniz:
properties: {
azPowerShellVersion: '3.0'
scriptContent: loadTextContent('myscript.ps1')
retentionInterval: 'P1D'
}
Arm şablonu başvuru belgelerinde kaynağın deploymentScripts
tüm özelliklerini bulabilirsiniz.