ARM şablonları ve Azure CLI ile kaynakları dağıtmaDeploy resources with ARM templates and Azure CLI

Bu makalede, kaynaklarınızı Azure'a dağıtmak için Azure Kaynak Yöneticisi (ARM) şablonlarıyla Azure CLI'nin nasıl kullanılacağı açıklanmaktadır.This article explains how to use Azure CLI with Azure Resource Manager (ARM) templates to deploy your resources to Azure. Azure çözümlerinizi dağıtma ve yönetme kavramlarını bilmiyorsanız, şablon dağıtımına genel bakışbölümüne bakın.If you aren't familiar with the concepts of deploying and managing your Azure solutions, see template deployment overview.

Azure CLI sürüm 2.2.0'da dağıtım komutları değiştirildi.The deployment commands changed in Azure CLI version 2.2.0. Bu makaledeki örnekler, Azure CLI sürüm 2.2.0 veya sonrası gerektirir.The examples in this article require Azure CLI version 2.2.0 or later.

Bu örneği çalıştırmak için Azure CLI'ninen son sürümünü yükleyin.To run this sample, install the latest version of the Azure CLI. Başlangıç olarak, Azure ile bağlantı oluşturmak için az login komutunu çalıştırın.To start, run az login to create a connection with Azure.

Azure CLI için örnekler bash kabuk için yazılır.Samples for the Azure CLI are written for the bash shell. Bu örneği Windows PowerShell veya Komut İstemi'nde çalıştırmak için komut dosyasının öğelerini değiştirmeniz gerekebilir.To run this sample in Windows PowerShell or Command Prompt, you may need to change elements of the script.

Azure CLI yüklü değilseniz, Bulut Kabuğu'nukullanabilirsiniz.If you don't have Azure CLI installed, you can use the Cloud Shell.

Dağıtım kapsamıDeployment scope

Dağıtımınızı bir kaynak grubuna, abonelike, yönetim grubuna veya kiracıya hedefleyebilirsiniz.You can target your deployment to a resource group, subscription, management group, or tenant. Çoğu durumda, bir kaynak grubuna dağıtım hedefleceksiniz.In most cases, you'll target deployment to a resource group. İlkeleri ve rol ödevlerini daha geniş bir kapsamda uygulamak için abonelik, yönetim grubu veya kiracı dağıtımlarını kullanın.To apply policies and role assignments across a larger scope, use subscription, management group, or tenant deployments. Bir aboneye dağıtılırken, bir kaynak grubu oluşturabilir ve ona kaynak dağıtabilirsiniz.When deploying to a subscription, you can create a resource group and deploy resources to it.

Dağıtımın kapsamına bağlı olarak, farklı komutlar kullanırsınız.Depending on the scope of the deployment, you use different commands.

Bir kaynak grubunadağıtmak için az dağıtım grubu oluşturmakullanın:To deploy to a resource group, use az deployment group create:

az deployment group create --resource-group <resource-group-name> --template-file <path-to-template>

Bir aboneğedağıtmak için, az dağıtım alt oluşturmakullanın:To deploy to a subscription, use az deployment sub create:

az deployment sub create --location <location> --template-file <path-to-template>

Abonelik düzeyi dağıtımları hakkında daha fazla bilgi için bkz.For more information about subscription level deployments, see Create resource groups and resources at the subscription level.

Bir yönetim grubunadağıtmak için, az dağıtım mg oluşturmakkullanın:To deploy to a management group, use az deployment mg create:

az deployment mg create --location <location> --template-file <path-to-template>

Yönetim grubu düzeyindeki dağıtımlar hakkında daha fazla bilgi için bkz.For more information about management group level deployments, see Create resources at the management group level.

Kiracıyadağıtmak için az dağıtım kiracı oluşturmakkullanın:To deploy to a tenant, use az deployment tenant create:

az deployment tenant create --location <location> --template-file <path-to-template>

Kiracı düzeyindeki dağıtımlar hakkında daha fazla bilgi için bkz.For more information about tenant level deployments, see Create resources at the tenant level.

Bu makaledeki örneklerkaynak grubu dağıtımlarını kullanır.The examples in this article use resource group deployments.

Yerel şablonu dağıtmaDeploy local template

Kaynakları Azure'a dağıtırken şunları yapacaksınız:When deploying resources to Azure, you:

  1. Azure hesabınızda oturum açmaSign in to your Azure account
  2. Dağıtılan kaynaklar için kapsayıcı olarak hizmet veren bir kaynak grubu oluşturun.Create a resource group that serves as the container for the deployed resources. Kaynak grubunun adı yalnızca alfasayısal karakterler, dönemler, alt çizerler, tireler ve parantez içerebilir.The name of the resource group can only include alphanumeric characters, periods, underscores, hyphens, and parenthesis. 90 karaktere kadar olabilir.It can be up to 90 characters. Bir dönemde bitmez.It can't end in a period.
  3. Oluşturulacak kaynakları tanımlayan şablonu kaynak grubuna dağıtmaDeploy to the resource group the template that defines the resources to create

Şablon, dağıtımı özelleştirmenize olanak tanıyan parametreler içerebilir.A template can include parameters that enable you to customize the deployment. Örneğin, belirli bir ortama (dev, test ve üretim gibi) uygun değerler sağlayabilirsiniz.For example, you can provide values that are tailored for a particular environment (such as dev, test, and production). Örnek şablon, depolama hesabı SKU için bir parametre tanımlar.The sample template defines a parameter for the storage account SKU.

Aşağıdaki örnek bir kaynak grubu oluşturur ve yerel makinenizden bir şablon dağıtır:The following example creates a resource group, and deploys a template from your local machine:

az group create --name ExampleGroup --location "Central US"
az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters storageAccountType=Standard_GRS

Dağıtımın tamamlanması birkaç dakika sürebilir.The deployment can take a few minutes to complete. Bittiğinde, sonucu içeren bir ileti görürsünüz:When it finishes, you see a message that includes the result:

"provisioningState": "Succeeded",

Uzak şablonu dağıtmaDeploy remote template

ARM şablonlarını yerel makinenizde depolamak yerine, bunları harici bir konumda saklamayı tercih edebilirsiniz.Instead of storing ARM templates on your local machine, you may prefer to store them in an external location. Şablonları kaynak denetim deposunda (GitHub gibi) depolayabilirsiniz.You can store templates in a source control repository (such as GitHub). Veya, kuruluşunuzdaki paylaşılan erişim için bunları bir Azure depolama hesabında saklayabilirsiniz.Or, you can store them in an Azure storage account for shared access in your organization.

Harici bir şablon dağıtmak için şablon-uri parametresini kullanın.To deploy an external template, use the template-uri parameter. Örnek şablonu GitHub'dan dağıtmak için uri'yi örnekte kullanın.Use the URI in the example to deploy the sample template from GitHub.

az group create --name ExampleGroup --location "Central US"
az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json" \
  --parameters storageAccountType=Standard_GRS

Önceki örnek, şablonunuz hassas verileri içermemelidir, çünkü çoğu senaryo için çalışır şablon için kamuya açık bir URI gerektirir.The preceding example requires a publicly accessible URI for the template, which works for most scenarios because your template shouldn't include sensitive data. Hassas verileri (yönetici parolası gibi) belirtmeniz gerekiyorsa, bu değeri güvenli bir parametre olarak geçirin.If you need to specify sensitive data (like an admin password), pass that value as a secure parameter. Ancak, şablonunuzun herkese açık olmasını istemiyorsanız, şablonu özel bir depolama kapsayıcısında depolayarak şablonu koruyabilirsiniz.However, if you don't want your template to be publicly accessible, you can protect it by storing it in a private storage container. Paylaşılan erişim imzası (SAS) belirteci gerektiren bir şablonu dağıtma hakkında bilgi içinbkz.For information about deploying a template that requires a shared access signature (SAS) token, see Deploy private template with SAS token.

Cloud Shell'den şablon dağıtmaDeploy template from Cloud Shell

Şablonunuzu dağıtmak için Cloud Shell kullanabilirsiniz.You can use Cloud Shell to deploy your template. Harici bir şablon dağıtmak için, şablonun URI'sini herhangi bir dış dağıtımda olduğu gibi sağlayın.To deploy an external template, provide the URI of the template exactly as you would for any external deployment. Yerel bir şablon dağıtmak için öncelikle şablonunuzu Bulut Shell'inizin depolama hesabına yüklemeniz gerekir.To deploy a local template, you must first load your template into the storage account for your Cloud Shell. Bu bölümde, şablonun bulut kabuğu hesabınıza nasıl yüklenir ve yerel bir dosya olarak dağıtılır.This section describes how to load the template to your cloud shell account, and deploy it as a local file. Cloud Shell'i kullanmadıysanız, ayarlama hakkında bilgi almak için Azure Bulut Shell'e Genel Bakış bölümüne bakın.If you haven't used Cloud Shell, see Overview of Azure Cloud Shell for information about setting it up.

  1. Azure portalındaoturum açın.Sign in to the Azure portal.

  2. Cloud Shell kaynak grubunuzu seçin.Select your Cloud Shell resource group. Ad deseni cloud-shell-storage-<region> şeklindedir.The name pattern is cloud-shell-storage-<region>.

    Kaynak grubu seçin

  3. Cloud Shell için depolama hesabınızı seçin.Select the storage account for your Cloud Shell.

    Depolama hesabı seçme

  4. Bloblar'ı seçin.Select Blobs.

    Bloblar'ı seçin

  5. + Kapsayıcı'yı seçin.Select + Container.

    Kapsayıcı ekleme

  6. Kapsayıcınıza bir ad ve erişim düzeyi verin.Give your container a name and an access level. Bu makaledeki örnek şablon, hiçbir hassas bilgi içermez, bu nedenle anonim okuma erişimine izin verin.The sample template in this article contains no sensitive information, so allow anonymous read access. Tamam'ıseçin.Select OK.

    Kapsayıcı değerleri sağlama

  7. Oluşturduğunuz kapsayıcıyı seçin.Select the container you created.

    Yeni kapsayıcı seçin

  8. Yükle'yiseçin.Select Upload.

    Blob yükle

  9. Şablonunuzu bulup karşıya yükleyin.Find and upload your template.

    Dosya yükleme

  10. Yükledikten sonra şablonu seçin.After it has uploaded, select the template.

    Yeni şablon seçin

  11. URL'yi kopyalayın.Copy the URL.

    URL'yi Kopyala

  12. İstemi açın.Open the prompt.

    Cloud Shell’i açma

Bulut Kabuğu'nda aşağıdaki komutları kullanın:In the Cloud Shell, use the following commands:

az group create --name examplegroup --location "South Central US"
az deployment group create --resource-group examplegroup \
  --template-uri <copied URL> \
  --parameters storageAccountType=Standard_GRS

ParametrelerParameters

Parametre değerlerini geçmek için satır içinde parametreler ilerler veya parametre dosyasını kullanabilirsiniz.To pass parameter values, you can use either inline parameters or a parameter file.

Satır dışı parametrelerInline parameters

Satır dışı parametreleri geçirmek için, 'deki parametersdeğerleri sağlayınTo pass inline parameters, provide the values in parameters. Örneğin, bir dize ve diziyi şablona geçirmek için Bir Bash kabuğudur, kullanın:For example, to pass a string and array to a template is a Bash shell, use:

az deployment group create \
  --resource-group testgroup \
  --template-file demotemplate.json \
  --parameters exampleString='inline string' exampleArray='("value1", "value2")'

Windows Komut Komut Komut Ustem (CMD) veya PowerShell ile Azure CLI exampleArray="['value1','value2']"kullanıyorsanız, diziyi biçiminde geçirin: .If you're using Azure CLI with Windows Command Prompt (CMD) or PowerShell, pass the array in the format: exampleArray="['value1','value2']".

Ayrıca dosyanın içeriğini alabilir ve bu içeriği satır satırlı parametre olarak sağlayabilirsiniz.You can also get the contents of file and provide that content as an inline parameter.

az deployment group create \
  --resource-group testgroup \
  --template-file demotemplate.json \
  --parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json

Yapılandırma değerleri sağlamanız gerektiğinde dosyadan parametre değeri almak yararlıdır.Getting a parameter value from a file is helpful when you need to provide configuration values. Örneğin, bir Linux sanal makinesi için bulut-init değerlerisağlayabilirsiniz.For example, you can provide cloud-init values for a Linux virtual machine.

ArrayContent.json biçimi:The arrayContent.json format is:

[
    "value1",
    "value2"
]

Parametre dosyalarıParameter files

Komut dosyanızdaki satır değerleri olarak parametreleri geçirmek yerine, parametre değerlerini içeren bir JSON dosyasını kullanmayı daha kolay bulabilirsiniz.Rather than passing parameters as inline values in your script, you may find it easier to use a JSON file that contains the parameter values. Parametre dosyası yerel bir dosya olmalıdır.The parameter file must be a local file. Dış parametre dosyaları Azure CLI ile desteklenmez.External parameter files aren't supported with Azure CLI.

Parametre dosyası hakkında daha fazla bilgi için kaynak yöneticisi parametre dosyası oluştur'abakın.For more information about the parameter file, see Create Resource Manager parameter file.

Yerel bir parametre dosyasını @ geçmek için storage.parameters.json adlı yerel bir dosya belirtmek için kullanın.To pass a local parameter file, use @ to specify a local file named storage.parameters.json.

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters @storage.parameters.json

Genişletilmiş JSON biçimini işlemeHandle extended JSON format

Çok satırlı dizeleri veya açıklamaları içeren bir şablon --handle-extended-json-format dağıtmak için anahtarı kullanmanız gerekir.To deploy a template with multi-line strings or comments, you must use the --handle-extended-json-format switch. Örnek:For example:

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[
    parameters('location')
    ]", //defaults to resource group location
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Şablon dağıtımını test edinTest a template deployment

Şablonunuzu ve parametre değerlerinizi gerçekten kaynak dağıtmadan sınamak için az dağıtım grubu doğrulamayıkullanın.To test your template and parameter values without actually deploying any resources, use az deployment group validate.

az deployment group validate \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters @storage.parameters.json

Hata algılanmazsa, komut test dağıtımı yla ilgili bilgileri döndürür.If no errors are detected, the command returns information about the test deployment. Özellikle, hata değerinin null olduğunu unutmayın.In particular, notice that the error value is null.

{
  "error": null,
  "properties": {
      ...

Bir hata algılanırsa, komut bir hata iletisi döndürür.If an error is detected, the command returns an error message. Örneğin, depolama hesabı SKU için yanlış bir değer geçen, aşağıdaki hatayı döndürür:For example, passing an incorrect value for the storage account SKU, returns the following error:

{
  "error": {
    "code": "InvalidTemplate",
    "details": null,
    "message": "Deployment template validation failed: 'The provided value 'badSKU' for the template parameter
      'storageAccountType' at line '13' and column '20' is not valid. The parameter value is not part of the allowed
      value(s): 'Standard_LRS,Standard_ZRS,Standard_GRS,Standard_RAGRS,Premium_LRS'.'.",
    "target": null
  },
  "properties": null
}

Şablonunuzda sözdizimi hatası varsa, komut şablonu ayrışdıramayacağını belirten bir hata döndürür.If your template has a syntax error, the command returns an error indicating it couldn't parse the template. İleti, ayrıştma hatasının satır numarasını ve konumunu gösterir.The message indicates the line number and position of the parsing error.

{
  "error": {
    "code": "InvalidTemplate",
    "details": null,
    "message": "Deployment template parse failed: 'After parsing a value an unexpected character was encountered:
      \". Path 'variables', line 31, position 3.'.",
    "target": null
  },
  "properties": null
}

Sonraki adımlarNext steps