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, Bicep'te dağıtım betiği geliştirmeyi gösteren örnekler sağlanmaktadır.
Dağıtım betiği kaynaklarının dağıtım süresi olabilir. Bu betiklerin verimli bir şekilde geliştirilmesi ve test edilmesi için Azure kapsayıcı örneği (ACI) veya Docker örneği gibi ayrılmış bir geliştirme ortamı oluşturmayı göz önünde bulundurun. Daha fazla bilgi için bkz . Geliştirme ortamı oluşturma.
Sözdizimi
Aşağıdaki Bicep dosyası bir dağıtım betiği kaynağı örneğidir. Daha fazla bilgi için en son dağıtım betiği şemasına bakın.
resource <symbolic-name> 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: '<resource-name>'
location: resourceGroup().location
tags: {}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'<user-assigned-identity-id>': {}
}
}
kind: 'AzureCLI'
properties: {
storageAccountSettings: {
storageAccountName: '<storage-account-name>'
storageAccountKey: '<storage-account-key>'
}
containerSettings: {
containerGroupName: '<container-group-name>'
subnetIds: [
{
id: '<subnet-id>'
}
]
}
environmentVariables: []
azCliVersion: '2.52.0'
arguments: '<script-arguments>'
scriptContent: '''<azure-cli-or-azure-powershell-script>''' // or primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/inlineScript.ps1'
supportingScriptUris: []
timeout: 'P1D'
cleanupPreference: 'OnSuccess'
retentionInterval: 'P1D'
forceUpdateTag: '1'
}
}
Dağıtım betiğinizde şu özellik değerlerini belirtin:
tags: Dağıtım betiği etiketlerini belirtin. Dağıtım betiği hizmeti iki destekleyici kaynak (depolama hesabı ve kapsayıcı örneği) oluşturursa, etiketler her iki kaynağa da geçirilir. Kaynakları tanımlamak için etiketleri kullanabilirsiniz. Bu destekleyici kaynakları tanımlamanın bir diğer yolu da azscript içeren sonekleri kullanmaktır. Daha fazla bilgi için bkz . Dağıtım betiklerini izleme ve sorunlarını giderme.identity: Betikte Azure'a özgü eylemler gerçekleştirmeniz gerekmiyorsa veya dağıtım betiğini özel2020-10-01, dağıtım betiği API'sinin sürümü veya sonraki sürümleri için kullanıcı tarafından atanan yönetilen kimlik isteğe bağlıdır. Dağıtım betiği hizmeti betikleri çalıştırmak için kullandığından API sürümü2019-10-01-previewyönetilen kimlik gerektirir.Özelliğini belirttiğinizde
identity, 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. Dağıtım betiğinde farklı bir kimlikle oturum açmak için Connect-AzAccount çağrısı yapabilirsiniz. Daha fazla bilgi için bkz . En düşük izinleri yapılandırma.kind: veyaAzurePowerShellbetiğinAzureCLItürünü belirtin. öğesinekindek olarak veyaazPowerShellVersionözelliğini de belirtmenizazCliVersiongerekir.storageAccountSettings: Mevcut bir depolama hesabını kullanmak için ayarları belirtin. BelirtilmezsestorageAccountName, otomatik olarak bir depolama hesabı oluşturulur. Daha fazla bilgi için bkz . Mevcut depolama hesabını kullanma.containerSettings: Azure kapsayıcı örneğinin adını özelleştirin. Kapsayıcının grup adını yapılandırma hakkında bilgi için bu makalenin devamında Yer alan Kapsayıcı örneğini yapılandırma bölümüne bakın. Dağıtım betiğini özel bir ağda çalıştıracak şekilde yapılandırmasubnetIdshakkında bilgi için bkz . Özel bir sanal ağa erişme.environmentVariables: Betikten geçireceğiniz ortam değişkenlerini belirtin.azPowerShellVersion/azCliVersion: Kullanılacak modül sürümünü belirtin.Desteklenen Azure CLI sürümlerinin listesine bakın.
Önemli
Dağıtım betiği, Microsoft Yapıt Kayıt Defteri kullanılabilir CLI görüntülerini kullanır. Genellikle bir dağıtım betiği için CLI görüntüsünün onaylanması yaklaşık bir ay sürer. Son 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ıyorsanız, hata iletisi desteklenen sürümleri listeler.
arguments: Parametre değerlerini belirtin. Değerler boşluklarla ayrılır.Dağıtım betiği, 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 Instances'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, karakterlerden iki kez kaçış. Örneğin, önceki örnek Bicep söz diziminde bağımsız değişken şeklindedir
-name \"John Dole\". Kaçış dizesi şeklindedir-name \\"John Dole\\".Türünde
objectbir Bicep 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 tırnak işaretlerini (") çift kaçışlı tırnak işaretleri (\\"ile değiştirin). Örneğin:replace(string(parameters('tables')), '"', '\\"')Daha fazla bilgi için örnek Bicep dosyasına bakın.
scriptContent: Betik içeriğini belirtin. Bu, loadTextContent işlevini kullanarak içeri aktardığınız bir satır içi betik veya dış betik dosyası olabilir. Daha fazla bilgi için bu makalenin devamında satır içi ve dış dosya karşılaştırması bölümüne bakın. Dış betiği çalıştırmak için bunun yerine kullanınprimaryScriptUri.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 bu makalenin devamında yer alan Dış betikleri kullanma bölümüne bakın.supportingScriptUris: veyascriptContentiçinde çağrılan destekleyici dosyalar için genel olarak erişilebilir URL'lerprimaryScriptUridizisi belirtin. Daha fazla bilgi için bu makalenin devamında satır içi ve dış dosya karşılaştırması bölümüne bakın.timeout: Betik yürütme için izin verilen en uzun süreyi ISO 8601 biçiminde belirtin. Varsayılan değer şudur:P1D.forceUpdateTag: Bu değerin Bicep dosya dağıtımları arasında değiştirilmesi, dağıtım betiğini yeniden çalıştırmaya zorlar. veyanewGuid()işlevini kullanırsanızutcNow(), bunu yalnızca bir parametre için varsayılan değerde kullanabilirsiniz. Daha fazla bilgi edinmek için bu makalenin sonraki bölümlerinde Bir betiği birden çok kez çalıştırma bölümüne bakın.cleanupPreference. Betik yürütme terminal durumunda olduğunda iki destekleyici dağıtım kaynağını (depolama hesabı ve kapsayıcı örneği) temizleme tercihini belirtin. Varsayılan ayar, terminal durumundan (Always,SucceededveyaFailed) bağımsız olarak destekleyici kaynakların silinmesini çağıran ayarıdırCanceled. Daha fazla bilgi edinmek için bu makalenin devamında Dağıtım betiği kaynaklarını temizleme bölümüne bakın.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 saat (PT1H) ile 26 saat (PT26H) arasındadır. olarak ayarlandığındacleanupPreferencebu özelliğiOnExpirationkullanırsınız. Daha fazla bilgi edinmek için bu makalenin devamında Dağıtım betiği kaynaklarını temizleme bölümüne bakın.
Daha fazla örnek
- Örnek 1: Anahtar kasası oluşturun ve anahtar kasasına sertifika atamak için dağıtım betiği 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 bir dağıtım betiği 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 bir dağıtım betiği kullanın.
- Örnek 4: Kullanıcı tarafından atanan yönetilen kimliği el ile oluşturun ve Microsoft Graph API'sini kullanarak Microsoft Entra uygulamaları oluşturma izni atayın. Bicep dosyasında, bir Microsoft Entra uygulaması ve hizmet sorumlusu oluşturmak ve nesne kimliklerini ve istemci kimliğini çıkarmak için bir dağıtım betiği kullanın.
Satır içi ve dış dosya karşılaştırması
Dağıtım betiği bir Bicep dosyası içinde bulunabilir veya ayrı bir dosya olarak harici olarak depolayabilirsiniz.
Satır içi betik kullanma
Aşağıdaki Bicep dosyasında satır içi betiğin nasıl kullanılacağı gösterilmektedir.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'inlineCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'set -e; output="Hello $1"; echo $output'
retentionInterval: 'P1D'
}
}
Komut sıfır olmayan bir durum döndürürse hemen çıkışı etkinleştirmek için betiğinize ekleyin set -e . Bu uygulama hata ayıklama işlemlerini kolaylaştırır.
Betik dosyası yükleme
Bir betik dosyasını dize olarak almak için loadTextContent işlevini kullanın. Bu işlev, betiği bir dış dosyada tutmanızı ve dağıtım betiği olarak erişmenizi sağlar. Betik dosyası için belirtilen yol, Bicep dosyasına göre belirlenir.
Önceki Bicep dosyasındaki satır içi betiği bir hello.sh dosyasına ayıklayabilir ve ardından dosyayı betikler adlı bir alt klasöre yerleştirebilirsiniz.
output="Hello $1"
echo $output
Ardından, yukarıdaki Bicep dosyasını aşağıdaki örnekte olduğu gibi düzeltebilirsiniz:
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'loadTextContentCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: loadTextContent('./scripts/hello.sh')
retentionInterval: 'P1D'
}
}
Dış betikleri kullanma
Satır içi betikler yerine dış betik dosyalarını kullanabilirsiniz. Yalnızca .ps1 uzantısına sahip birincil PowerShell betikleri desteklenir. CLI betikleri için birincil betikler geçerli bash betik uzantılarını taşıyabilir veya hiç uzantısı yoktur. Dış betik dosyalarını kullanmak için ile scriptContentdeğiştirinprimaryScriptUri.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'externalScriptCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/hello.sh'
arguments: '-name ${name}'
retentionInterval: 'P1D'
}
}
Dış betik dosyalarına erişilebilir olmalıdır. Azure depolama hesaplarında depolanan betik dosyalarınızın güvenliğini sağlamaya yardımcı olmak için bir paylaşılan erişim imzası (SAS) belirteci oluşturun ve şablonun URI'sine ekleyin. Süre sonunu, 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.
Dağıtım betiğinin başvurduğunu betiğin bütünlüğünü sağlamak sizin sorumluluğundadır ( primaryScriptUri veya supportingScriptUris). 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 Gerekirse destekleyici betik dosyalarına bir dizi URI sağlamak için özelliğini kullanın.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'supportingScriptCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'output="Hello $1"; echo $output; ./hello.sh "$1"'
supportingScriptUris: [
'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/master/samples/deployment-script/hello.sh'
]
retentionInterval: 'P1D'
}
}
Hem satır içi betiklerden hem de birincil betik dosyalarından destekleyici betik dosyalarını çağırabilirsiniz. Destekleyici betik dosyalarının dosya uzantısı üzerinde hiçbir kısıtlaması yoktur.
Destekleyici dosyalar çalışma zamanında azscripts/azscriptinput'a kopyalanır. Satır içi betiklerden ve birincil betik dosyalarından destekleyici dosyalara başvurmak için göreli bir yol kullanın.
Azure kaynaklarına erişme
Azure kaynaklarına erişmek için öğesini yapılandırmanız identity gerekir. Aşağıdaki Bicep dosyasında Azure anahtar kasalarının listesinin nasıl alın aldığı gösterilmektedir. Anahtar kasasına erişmek için kullanıcı atama yönetimi kimliği izni vermek de gereklidir.
param identity string
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'listKvCLI'
location: location
kind: 'AzureCLI'
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${identity}': {}
}
}
properties: {
azCliVersion: '2.52.0'
scriptContent: 'result=$(az keyvault list); echo $result | jq -c \'{Result: map({id: .id})}\' > $AZ_SCRIPTS_OUTPUT_PATH'
retentionInterval: 'P1D'
}
}
output result object = deploymentScript.properties.outputs
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ı Bicep dosyasında izinler verirseniz, dağıtım betiği hizmeti yönetilen kimliğin rol ataması çoğaltılana kadar 10 dakika (10 saniyelik aralıklarla) oturum açmayı yeniden dener.
Çıkışlarla çalışma
Çıkışları işleme yaklaşımı, Azure CLI veya Azure PowerShell'i kullandığınız betiğin türüne göre değişir.
Azure CLI dağıtım betiği, betik çıktıları için dosyanın konumunu belirtmek üzere adlı AZ_SCRIPTS_OUTPUT_PATH bir ortam değişkeni kullanır. Bir Bicep dosyası içinde dağıtım betiği çalıştırdığınızda Bash kabuğu bu ortam değişkenini sizin için otomatik olarak yapılandırıyor. Önceden tanımlanmış değeri olarak /mnt/azscripts/azscriptoutput/scriptoutputs.jsonayarlanır.
Çıkışlar geçerli bir JSON dizesi nesne yapısına uygun olmalıdır. Dosyanın içeriği bir anahtar/değer çifti olarak biçimlendirilmelidir. Örneğin, dize dizisini olarak { "MyResult": [ "foo", "bar"] }kaydedin. Yalnızca gibi [ "foo", "bar" ]dizi sonuçlarının depolanması geçersiz.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'outputCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
retentionInterval: 'P1D'
}
}
output text string = deploymentScript.properties.outputs.text
Yukarıdaki örnek, çıkış oluşturmak için jq kullanır. jq aracı kapsayıcı görüntüleriyle birlikte gelir. Daha fazla bilgi için bkz . Geliştirme ortamı yapılandırma.
Ortam değişkenlerini kullanma
Güvenli dizeleri bir dağıtım betiğine geçirme
Kapsayıcı örneklerinizde ortam değişkenlerini (EnvironmentVariable) ayarlayarak kapsayıcının çalıştırabileceği uygulamanın veya betiğin dinamik yapılandırmasını sağlayabilirsiniz. Dağıtım betiği, güvenli olmayan ve güvenli olmayan ortam değişkenlerini Azure Container Instances ile aynı şekilde işler. Daha fazla bilgi için bkz . Kapsayıcı örneklerinde ortam değişkenlerini ayarlama.
Ortam değişkenleri için izin verilen boyut üst sınırı 64 KB'tır.
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'passEnvVariablesCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
environmentVariables: [
{
name: 'UserName'
value: 'jdole'
}
{
name: 'Password'
secureValue: 'jDolePassword'
}
]
scriptContent: 'echo "Username is :$Username"; echo "Password is: $Password"'
retentionInterval: 'P1D'
}
}
Sistem tanımlı ortam değişkenleri
Aşağıdaki tabloda sistem tanımlı ortam değişkenleri listelanmaktadır:
| Ortam değişkeni | Varsayılan değer (CLI) | Varsayılan değer (PowerShell) | Sistem ayrılmış |
|---|---|---|---|
AZ_SCRIPTS_AZURE_ENVIRONMENT |
AzureCloud |
AzureCloud |
Hayır |
AZ_SCRIPTS_CLEANUP_PREFERENCE |
Always |
Always |
Hayır |
AZ_SCRIPTS_OUTPUT_PATH |
/mnt/azscripts/azscriptoutput/scriptoutputs.json |
Uygulanamaz | Evet |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY |
/mnt/azscripts/azscriptinput|/mnt/azscripts/azscriptinput |
Uygulanamaz | Evet |
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY |
/mnt/azscripts/azscriptoutput|/mnt/azscripts/azscriptoutput |
Uygulanamaz | Evet |
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME |
userscript.sh |
userscript.ps1 |
Evet |
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME |
primaryscripturi.config |
primaryscripturi.config |
Evet |
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME |
supportingscripturi.config |
supportingscripturi.config |
Evet |
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME |
scriptoutputs.json |
scriptoutputs.json |
Evet |
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME |
executionresult.json |
executionresult.json |
Evet |
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY |
Uygulanamaz | Uygulanamaz | Hayır |
kullanma AZ_SCRIPTS_OUTPUT_PATHörneği için bu makalenin önceki bölümlerinde yer alan Çıkışlarla çalışma bölümüne bakın.
Ortam değişkenlerine erişmek için aşağıdaki kodu kullanın.
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'listEnvVariablesCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
scriptContent: 'echo "AZ_SCRIPTS_AZURE_ENVIRONMENT is : $AZ_SCRIPTS_AZURE_ENVIRONMENT",echo "AZ_SCRIPTS_CLEANUP_PREFERENCE is : $AZ_SCRIPTS_CLEANUP_PREFERENCE",echo "AZ_SCRIPTS_OUTPUT_PATH is : $AZ_SCRIPTS_OUTPUT_PATH",echo "AZ_SCRIPTS_PATH_INPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_INPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME is : $AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME",echo "AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME is : $AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME is : $AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME is : $AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME",echo "AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME is : $AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME",echo "AZ_SCRIPTS_USER_ASSIGNED_IDENTITY is : $AZ_SCRIPTS_USER_ASSIGNED_IDENTITY"'
retentionInterval: 'P1D'
}
}
Mevcut depolama hesabını kullanma
Betiğin çalışması ve sorun gidermeye izin verebilmesi için bir depolama hesabına ve kapsayıcı örneğine ihtiyacınız vardır. Mevcut bir depolama hesabını belirleyebilir veya betik hizmetinin hem depolama hesabını hem de kapsayıcı örneğini otomatik olarak oluşturmasına izin vekleyebilirsiniz.
Mevcut depolama hesabını kullanma gereksinimleri şunlardır:
Aşağıdaki tabloda desteklenen hesap türleri listelenmektedir. Katmanların sütunu veya
-SkuNameparametresinin--skudeğerine başvurur. Desteklenen türlerin sütunu veya-Kindparametresine--kindbaşvurur.Katman Desteklenen tür Premium_LRSFileStoragePremium_ZRSFileStorageStandard_GRSStorage,StorageV2Standard_GZRSStorageV2Standard_LRSStorage,StorageV2Standard_RAGRSStorage,StorageV2Standard_RAGZRSStorageV2Standard_ZRSStorageV2Bu 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 hesapları için 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 ve silme gibi depolama hesabını yönetme izinleri olmalıdır. Daha fazla bilgi için bkz . En düşük izinleri yapılandırma.
allowSharedKeyAccessDepolama hesabının özelliği olaraktrueayarlanmalı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 Bicep kodunu öğesinin Microsoft.Resources/deploymentScriptsözellik öğesine ekleyin:
param storageAccountName string = 'myStorageAccount'
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
...
properties: {
...
storageAccountSettings: {
storageAccountName: storageAccountName
storageAccountKey: listKeys(resourceId('Microsoft.Storage/storageAccounts', storageAccountName), '2023-01-01').keys[0].value
}
}
}
Tam Microsoft.Resources/deploymentScripts bir tanım örneği için bu makalenin önceki bölümlerindeki Söz dizimi bölümüne bakın.
Mevcut bir depolama hesabını kullandığınızda, 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 bu makalenin devamında yer alan Dağıtım betiği kaynaklarını temizleme bölümüne bakın.
Kapsayıcı örneğini yapılandırma
Dağıtım betiği için yeni bir Azure kapsayıcı örneği gerekir. Var olan bir kapsayıcı örneğini belirtemezsiniz. Ancak, kullanarak containerGroupNamekapsayıcının grup adını özelleştirebilirsiniz. Bir grup adı belirtmezseniz, otomatik olarak oluşturulur. Bu kapsayıcı örneğini oluşturmak için ek yapılandırmalar gereklidir. Daha fazla bilgi için bkz . En düşük izinleri yapılandırma.
Dağıtım betiğini özel bir ağda çalıştırmak için de değerler belirtebilirsiniz subnetId . Daha fazla bilgi için bkz . Özel bir sanal ağa erişme.
param containerGroupName string = 'mycustomaci'
param subnetId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet'
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
...
properties: {
...
containerSettings: {
containerGroupName: containerGroupName
subnetIds: [
{
id: subnetId
}
]
}
}
}
Betiği birden çok kez çalıştırma
Dağıtım betiği yürütme, bir kez etkili bir işlemdir. Satır içi betik de dahil olmak üzere kaynak özelliklerinden hiçbirinde deploymentScripts değişiklik yoksa, Bicep dosyasını yeniden dağıttığınızda betik çalışmaz.
Dağıtım betiği hizmeti, Bicep dosyasındaki kaynak adlarını aynı kaynak grubundaki mevcut kaynaklarla karşılaştırır. Aynı dağıtım betiğini birden çok kez çalıştırmak istiyorsanız iki seçenek vardır:
Kaynağınızın
deploymentScriptsadını değiştirin. Örneğin, kaynak adı olarak veya kaynak adının bir parçası olarak utcNow işlevini kullanın. işlevini yalnızca bir parametre için varsayılan değerde kullanabilirsinizutcNow.Kaynak adını değiştirmek yeni
deploymentScriptsbir kaynak oluşturur. Betik yürütme geçmişini tutmak için iyidir.özelliğinde
forceUpdateTagfarklı bir değer belirtin. Örneğin, değer olarak kullanınutcNow.
Bir kez etkili olmasını sağlamak için dağıtım betikleri yazın, bu nedenle yanlışlıkla yapılan yeniden çalıştırmalar sistem değişikliklerine neden olmaz. Örneğin, dağıtım betiği aracılığıyla bir Azure kaynağı oluştururken, betiğin başarılı olduğundan veya yedekli kaynak oluşturmayı önlediğinden emin olmak için oluşturmadan önce yokluğunu doğrulayın.
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 bicep dosyanızın dışında kimliği yetkilendirmeniz gerekir. Daha fazla bilgi için bu hızlı başlangıç örneğine bakın.
Dağıtım betiği kaynaklarını temizleme
Otomatik olarak oluşturulan iki destekleyici kaynak, hatalar silinmediği sürece hiçbir zaman kaynaktan deploymentScript daha uzun yaşayamayacaktır. özelliği, cleanupPreference destekleyici kaynakların yaşam döngüsünü denetler. özelliği kaynağın retentionInterval yaşam döngüsünü deploymentScript denetler. Bu özellikleri şu şekilde kullanabilirsiniz:
cleanupPreference: Betik yürütmesi terminal durumunda olduğunda iki destekleyici kaynağın temizleme tercihini belirtin. Desteklenen değerler şunlardır:Always: Betik yürütmesi terminal durumuna geçtikten sonra iki destekleyici kaynağı silin. Mevcut bir depolama hesabı kullanıyorsanız, betik hizmeti hizmetin oluşturduğu dosya paylaşımını siler. Destek kaynakları temizlendiktendeploymentScriptssonra kaynak hala mevcut olabileceğinden, betik hizmeti betik yürütme sonuçlarını (örneğin,stdout), çıkışlarını ve döndürülen 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ıyorsanız, 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 değerin süresi dolana kadar
retentionIntervalbekler.OnExpiration: İki destekleyici kaynağı yalnızca ayarınretentionIntervalsüresi dolduğunda silin. Mevcut bir depolama hesabı kullanıyorsanız, betik hizmeti dosya paylaşımını kaldırır ancak depolama hesabını korur.
Kapsayıcı örneği ve depolama hesabı değere
cleanupPreferencegöre silinir. Ancak betik başarısız olursa vecleanupPreferenceolarak ayarlanmadıysaAlways, 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ı eklemezseniz kapsayıcı terminal durumuna ayarlanır ve henüz silmemiş olsanız bile bu kapsayıcıya erişemezsiniz.
retentionInterval: KaynağındeploymentScriptsüresi dolmadan ve silinmeden önce tutulacağı zaman aralığını belirtin.
Not
Betik hizmetinin oluşturduğu depolama hesabını ve kapsayıcı örneğini başka amaçlarla kullanmanızı önermeyiz. Betiğin yaşam döngüsüne bağlı olarak iki kaynak kaldırılabilir.
Sonraki adımlar
Bu makalede dağıtım betiği kaynakları oluşturmayı öğrendiniz. Daha fazlasını öğrenin: