Aracılığıyla paylaş


Bicep'te dağıtım betiği geliştirme

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-preview yönetilen kimlik gerektirir.

    Özelliğini belirttiğinizde identity , betik hizmeti kullanıcı betiğini çağırmadan önce çağırır Connect-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: veya AzurePowerShellbetiğin AzureCLI türünü belirtin. öğesine kindek olarak veya azPowerShellVersion özelliğini de belirtmeniz azCliVersion gerekir.

  • storageAccountSettings: Mevcut bir depolama hesabını kullanmak için ayarları belirtin. Belirtilmezse storageAccountName , 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ırma subnetIds hakkı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 object bir 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ın primaryScriptUri .

  • 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: veya scriptContentiçinde çağrılan destekleyici dosyalar için genel olarak erişilebilir URL'ler primaryScriptUri dizisi 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. veya newGuid() 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, Succeededveya Failed) 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ığında cleanupPreferencebu özelliği OnExpiration kullanı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 -SkuName parametresinin --sku değerine başvurur. Desteklenen türlerin sütunu veya -Kind parametresine --kind başvurur.

    Katman Desteklenen tür
    Premium_LRS FileStorage
    Premium_ZRS FileStorage
    Standard_GRS Storage, StorageV2
    Standard_GZRS StorageV2
    Standard_LRS Storage, StorageV2
    Standard_RAGRS Storage, 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 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.

  • allowSharedKeyAccess Depolama hesabının özelliği olarak trueayarlanmalı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 deploymentScripts adı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 kullanabilirsiniz utcNow .

    Kaynak adını değiştirmek yeni deploymentScripts bir kaynak oluşturur. Betik yürütme geçmişini tutmak için iyidir.

  • özelliğinde forceUpdateTag farklı bir değer belirtin. Örneğin, değer olarak kullanın utcNow .

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ı temizlendikten deploymentScripts sonra 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 retentionInterval bekler.

    • OnExpiration: İki destekleyici kaynağı yalnızca ayarın retentionInterval sü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 cleanupPreference göre silinir. Ancak betik başarısız olursa ve cleanupPreference olarak ayarlanmadıysa Always, 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ğın deploymentScript sü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: