ARM şablonu JSON'sini Bicep'e derleme

Bu makalede Azure Resource Manager şablonlarının (ARM şablonları) Bicep dosyalarına nasıl kaynak koda bağlandığı açıklanır. Dönüştürme komutlarını çalıştırmak için Bicep CLI yüklü olmalıdır.

Not

Visual Studio Code'den, mevcut kaynaklardan içeri aktararak doğrudan kaynak bildirimleri oluşturabilirsiniz. Daha fazla bilgi için bkz . Bicep komutları.

Visual Studio Code, JSON'ı Bicep olarak yapıştırmanızı sağlar. Otomatik olarak decompile komutunu çalıştırır. Daha fazla bilgi için bkz. JSON'ı Bicep olarak yapıştırma.

ARM şablonunun kodunun derlenmesi, Bicep geliştirmeye başlamanıza yardımcı olur. ARM şablonları kitaplığınız varsa ve gelecekte geliştirme için Bicep'i kullanmak istiyorsanız, bunları Bicep'e kodsuz hale getirebilirsiniz. Ancak Bicep dosyasının Bicep için en iyi yöntemleri uygulamak için düzeltmelere ihtiyacı olabilir.

Bu makalede Azure CLI'da komutun nasıl çalıştırılacakları decompile gösterilmektedir. Azure CLI kullanmıyorsanız komutun başında olmadan az çalıştırın. Örneğin, az bicep decompile olur bicep decompile.

JSON'dan Bicep'e kaynak koda dönüştürme

ARM şablonu JSON'sini Bicep'e derlemek için şunu kullanın:

az bicep decompile --file main.json

komutu main.json ile aynı dizinde main.bicep adlı bir dosya oluşturur. Main.bicep aynı dizinde varsa mevcut Bicep dosyasının üzerine yazmak için --force anahtarını kullanın.

Arm şablonu JSON'unu Visual Studio Code'den Bicep'e derlemek için Decompile to Bicep komutunu da kullanabilirsiniz. Daha fazla bilgi için bkz. Visual Studio Code.

Dikkat

Ayrıştırma, dosyayı dönüştürmeye çalışır, ancak ARM şablonu JSON'dan Bicep'e garanti edilen eşleme yoktur. Oluşturulan Bicep dosyasındaki uyarıları ve hataları düzeltmeniz gerekebilir. Veya doğru dönüştürme mümkün değilse, ayrıştırma başarısız olabilir. Sorunları veya yanlış dönüştürmeleri bildirmek için bir sorun oluşturun.

Ayrıştırma ve derleme komutları, işlevsel olarak eşdeğer şablonlar oluşturur. Ancak, uygulamada tam olarak aynı olmayabilirler. Bir şablonuN JSON'dan Bicep'e ve sonra da JSON'a dönüştürülmesi, büyük olasılıkla özgün şablondan farklı söz dizimine sahip bir şablona neden olur. Dağıtıldığında, dönüştürülen şablonlar aynı sonuçları üretir.

Dönüştürme sorunlarını düzeltme

Aşağıdaki ARM şablonunuz olduğunu varsayalım:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat('store', uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Bunu koda oluşturduğunuzda şunları elde edersiniz:

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
@description('Storage Account type')
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

var storageAccountName_var = 'store${uniqueString(resourceGroup().id)}'

resource storageAccountName 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  name: storageAccountName_var
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = storageAccountName_var

Koda dönüştürülmüş dosya çalışır, ancak değiştirmek isteyebileceğiniz bazı adları vardır. Değişkenin var storageAccountName_var olağan dışı bir adlandırma kuralı vardır. Şimdi şu şekilde değiştirelim:

var uniqueStorageName = 'store${uniqueString(resourceGroup().id)}'

Dosya genelinde yeniden adlandırmak için ada sağ tıklayın ve simgeyi yeniden adlandır'ı seçin. F2 kısayol tuşunu da kullanabilirsiniz.

Kaynağın değiştirmek isteyebileceğiniz sembolik bir adı var. storageAccountName Sembolik ad yerine kullanınexampleStorage.

resource exampleStorage 'Microsoft.Storage/storageAccounts@2019-06-01' = {

Dosyanın tamamı:

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
@description('Storage Account type')
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

var uniqueStorageName = 'store${uniqueString(resourceGroup().id)}'

resource exampleStorage 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Şablonu dışarı aktarma ve dönüştürme

Bir kaynak grubu için şablonu dışarı aktarabilir ve ardından doğrudan komutuna decompile geçirebilirsiniz. Aşağıdaki örnekte, dışarı aktarılan bir şablonun nasıl koda dönüştürülecekleri gösterilmektedir.

az group export --name "your_resource_group_name" > main.json
az bicep decompile --file main.json

Yan yana görünüm

Bicep Playground, eşdeğer ARM şablonunu ve Bicep dosyalarını yan yana görüntülemenizi sağlar. Her iki sürümü de görmek için Örnek Şablon'ı seçebilirsiniz. Alternatif olarak, Kendi ARM şablonunuzu karşıya yüklemek ve eşdeğer Bicep dosyasını görüntülemek için Kaynak koda ayırma'yı seçin.

Sonraki adımlar

Tüm Bicep CLI komutları hakkında bilgi edinmek için bkz. Bicep CLI komutları.