Resursdeklaration i ARM-mallar

Om du vill distribuera en resurs via en Azure Resource Manager-mall (ARM-mall) lägger du till en resursdeklaration. Använd matrisen resources i en JSON-mall.

languageVersion 2.0 gör en lista över förbättringar av ARM JSON-mallar, till exempel att ändra resursdeklarationen från en matris till ett objekt. De flesta exempel som visas i den här artikeln använder resources fortfarande matris. Specifik information om languageVersion 2.0 finns i Använda symboliskt namn.

Kommentar

Den aktuella versionen av Azure Resource Manager Tools-tillägget för Visual Studio Code känner inte igen förbättringarna i languageVersion 2.0.

Dricks

Vi rekommenderar Bicep eftersom det erbjuder samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i resursdeklaration.

Du är begränsad till 800 resurser i en mall. Mer information finns i Mallgränser.

Ange resurstyp och version

När du lägger till en resurs i mallen börjar du med att ange resurstyp och API-version. Dessa värden bestämmer de andra egenskaper som är tillgängliga för resursen.

I följande exempel visas hur du anger resurstyp och API-version för ett lagringskonto. Exemplet visar inte den fullständiga resursdeklarationen.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    ...
  }
]

Ange resursnamn

Varje resurs har ett namn. När du anger resursnamnet bör du vara uppmärksam på reglerna och begränsningarna för resursnamn.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

Ange en plats

Många resurser kräver en plats. Du kan avgöra om resursen behöver en plats antingen via intellisense- eller mallreferensen. I följande exempel läggs en platsparameter som används för lagringskontot.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    ...
  }
]

Mer information finns i Ange resursplats i ARM-mall.

Ange taggar

Du kan använda taggar för en resurs under distributionen. Taggar hjälper dig att logiskt organisera dina distribuerade resurser. Exempel på olika sätt att ange taggar finns i ARM-malltaggar.

Ange resursspecifika egenskaper

Ovanstående egenskaper är generiska för de flesta resurstyper. När du har angett dessa värden måste du ange de egenskaper som är specifika för den resurstyp som du distribuerar.

Använd intellisense- eller mallreferens för att avgöra vilka egenskaper som är tillgängliga och vilka som krävs. I följande exempel anges de återstående egenskaperna för ett lagringskonto.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

Använd symboliskt namn

I Bicep har varje resursdefinition ett symboliskt namn. Det symboliska namnet används för att referera till resursen från de andra delarna av Bicep-filen. Om du vill ha stöd för symboliskt namn i ARM JSON-mallar lägger du till languageVersion med versionen 2.0och ändrar resursdefinitionen från en matris till ett objekt. När languageVersion anges för en mall måste symboliskt namn anges för rotnivåresurser. Till exempel:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  ]
}

Föregående JSON kan skrivas till följande JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "aks": {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  }
}

Symboliska namn är skiftlägeskänsliga. De tillåtna tecknen för symboliska namn är bokstäver, siffror och _. Symboliska namn måste vara unika i en mall, men kan överlappa med variabelnamn, parameternamn och utdatanamn i en mall. I följande exempel har det symboliska namnet på lagringskontoresursen samma namn som utdata.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "myStorage": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  },
  "outputs": {
    "myStorage":{
      "type": "object",
      "value": "[reference('myStorage')]"
    }
  }
}

Referensfunktionen kan använda en resurs symboliska namn, som du ser i föregående exempel. Referensfunktionen kan till exempel reference(parameters('storageAccountName')) inte längre använda en resurss namn.

Om Distributionsresursen används i en symbolisk namndistribution använder du apiVersion 2020-09-01 eller senare.

Deklarera befintliga resurser

Med languageVersion 2.0 och med ett symboliskt namn för resursdeklarationen kan du deklarera befintliga resurser. En resursegenskap på "existing": true den översta nivån som gör att ARM läser i stället för att distribuera en resurs enligt följande exempel:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "resources": {
    "storageAccount": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "storageacct",
      "existing": true
    }
  },
  "outputs": {
    "saBlocksPlaintext": {
      "type": "bool",
      "value": "[ reference('storageAccount').supportsHttpsTrafficOnly]"
    }
  }
}

Befintliga resurser behöver inte definiera några andra egenskaper än type, apiVersionoch name.

Nästa steg