Med hjälp av länkade och kapslade mallar när du distribuerar Azure-resurserUsing linked and nested templates when deploying Azure resources

För att distribuera din lösning, kan du använda samma mall eller en Huvudmall med många relaterade mappar.To deploy your solution, you can use either a single template or a main template with many related templates. De relaterade mallarna kan antingen vara separata filer som är länkade till från huvud mal len, eller mallar som är kapslade i huvud mal len.The related templates can either be separate files that are linked to from the main template, or templates that are nested within the main template.

För små till medelstora lösningar är lättare att förstå och hantera en enda mall.For small to medium solutions, a single template is easier to understand and maintain. Du kan se alla resurser och värden i en enda fil.You can see all the resources and values in a single file. Med länkade mallar i avancerade scenarier kan du dela upp lösningen i riktade komponenter.For advanced scenarios, linked templates enable you to break down the solution into targeted components. Du kan enkelt återanvända dessa mallar för andra scenarier.You can easily reuse these templates for other scenarios.

När du använder länkade mallar kan skapa du en Huvudmall som tar emot parametervärdena under distributionen.When using linked templates, you create a main template that receives the parameter values during deployment. Den huvudsakliga mallen innehåller alla länkade mallar och skickar värden till dessa mallar efter behov.The main template contains all the linked templates and passes values to those templates as needed.

En självstudiekurs finns i självstudie: Skapa länkade Azure Resource Manager-mallar.For a tutorial, see Tutorial: create linked Azure Resource Manager templates.

Anteckning

För länkade eller kapslade mallar kan du bara använda stegvis distributions läge.For linked or nested templates, you can only use Incremental deployment mode.

Distributions resursDeployments resource

Om du vill länka till en annan mall, lägger du till en distributioner resurs till mallen för huvudsakliga.To link to another template, add a deployments resource to your main template.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "linkedTemplate",
    "properties": {
        "mode": "Incremental",
        <nested-template-or-external-template>
    }
  }
]

Egenskaper som du anger för distribution av resursen varierar beroende på om du länkar till en extern mall eller kapsla en mall för infogad i mallen huvudsakliga.The properties you provide for the deployment resource vary based on whether you're linking to an external template or nesting an inline template in the main template.

Kapslad mallNested template

Om du vill kapsla mallen inom den huvudsakliga mallen använder den mall egenskap och ange mallens syntax.To nest the template within the main template, use the template property and specify the template syntax.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "nestedTemplate",
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "[variables('storageName')]",
            "location": "West US",
            "kind": "StorageV2",
            "sku": {
                "name": "Standard_LRS"
            }
          }
        ]
      }
    }
  }
]

Anteckning

Du kan inte använda parametrar eller variabler som definieras i den kapslade mallen för kapslade mallar.For nested templates, you cannot use parameters or variables that are defined within the nested template. Du kan använda parametrar och variabler från den huvudsakliga mallen.You can use parameters and variables from the main template. I föregående exempel [variables('storageName')] hämtar ett värde från den huvudsakliga mallen, inte den kapslade mallen.In the preceding example, [variables('storageName')] retrieves a value from the main template, not the nested template. Den här begränsningen gäller inte för externa mallar.This restriction does not apply to external templates.

För två resurser som definieras i en kapslad mall och en resurs är beroende av den andra är värdet för beroendet bara namnet på den beroende resursen:For two resources defined inside a nested template and one resource depends on the other, the value of the dependency is simply the name of the dependent resource:

"dependsOn": [
  "[variables('storageAccountName')]"
],

Du kan inte använda funktionen reference i avsnittet utdata i en kapslad mall för en resurs som du har distribuerat i den kapslade mallen.You can't use the reference function in the outputs section of a nested template for a resource you have deployed in the nested template. Konvertera kapslade mallen till en länkad mall för att returnera värden för en distribuerad resurs i en kapslad mall.To return the values for a deployed resource in a nested template, convert your nested template to a linked template.

Den kapslade mallen kräver den samma egenskaper som en standardmall.The nested template requires the same properties as a standard template.

Extern mallExternal template

Använd egenskapen templateLink för att länka till en extern mall.To link to an external template, use the templateLink property. Du kan inte ange en lokal fil eller en fil som endast är tillgängliga i det lokala nätverket.You can't specify a local file or a file that is only available on your local network. Du kan endast ange ett URI-värde som innehåller antingen http eller https.You can only provide a URI value that includes either http or https. Resource Manager måste kunna komma åt mallen.Resource Manager must be able to access the template.

Ett alternativ är att placera din länkade mall i ett lagringskonto och använda URI: N för objektet.One option is to place your linked template in a storage account, and use the URI for that item.

Du kan ange parametrar för din externa mall antingen i en extern fil eller i en intern fil.You can provide the parameters for your external template either in an external file or inline.

Externa parametrarExternal parameters

När du anger en extern parameter fil använder du egenskapen parametersLink :When providing an external parameter file, use the parametersLink property:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
      "templateLink": {
        "uri":"https://mystorageaccount.blob.core.windows.net/AzureTemplates/newStorageAccount.json",
        "contentVersion":"1.0.0.0"
      },
      "parametersLink": {
        "uri":"https://mystorageaccount.blob.core.windows.net/AzureTemplates/newStorageAccount.parameters.json",
        "contentVersion":"1.0.0.0"
      }
    }
  }
]

Du inte behöver ange den contentVersion -egenskapen för mallen eller parametrar.You don't have to provide the contentVersion property for the template or parameters. Om du inte anger ett värde för innehållsversion, distribueras den aktuella versionen av mallen.If you don't provide a content version value, the current version of the template is deployed. Om du anger ett värde för innehållsversion måste måste den matcha versionen i länkade mallen. annars misslyckas distributionen med ett fel.If you provide a value for content version, it must match the version in the linked template; otherwise, the deployment fails with an error.

Infogade parametrarInline parameters

Eller så kan du ange parametern-infogade.Or, you can provide the parameter inline. Du kan inte använda både infogade parametrar och en länk till en parameterfil.You can't use both inline parameters and a link to a parameter file. Distributionen misslyckas med ett fel när båda parametersLink och parameters har angetts.The deployment fails with an error when both parametersLink and parameters are specified.

Om du vill skicka ett värde från huvud mal len till den länkade mallen använder du parameter egenskapen.To pass a value from the main template to the linked template, use the parameters property.

"resources": [
  {
     "type": "Microsoft.Resources/deployments",
     "apiVersion": "2018-05-01",
     "name": "linkedTemplate",
     "properties": {
       "mode": "Incremental",
       "templateLink": {
          "uri":"https://mystorageaccount.blob.core.windows.net/AzureTemplates/newStorageAccount.json",
          "contentVersion":"1.0.0.0"
       },
       "parameters": {
          "StorageAccountName":{"value": "[parameters('StorageAccountName')]"}
        }
     }
  }
]

Använda kopieraUsing copy

Om du vill skapa flera instanser av en resurs med en kapslad mall lägger du till kopiera-elementet på nivån i resursen Microsoft. Resources/distributions .To create multiple instances of a resource with a nested template, add the copy element at the level of the Microsoft.Resources/deployments resource.

I följande exempel mall visas hur du använder kopiera med en kapslad mall.The following example template shows how to use copy with a nested template.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "[concat('nestedTemplate', copyIndex())]",
    // yes, copy works here
    "copy":{
      "name": "storagecopy",
      "count": 2
    },
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "[concat(variables('storageName'), copyIndex())]",
            "location": "West US",
            "kind": "StorageV2",
            "sku": {
              "name": "Standard_LRS"
            }
            // no, copy doesn't work here
            //"copy":{
            //  "name": "storagecopy",
            //  "count": 2
            //}
          }
        ]
      }
    }
  }
]

I föregående exempel visade hårdkodade URL-värden för mall-länkar.The previous examples showed hard-coded URL values for the template links. Den här metoden fungerar för en enkel mall, men det fungerar inte bra när du arbetar med ett stort antal modulära mallar.This approach might work for a simple template but it doesn't work well when working with a large set of modular templates. I stället kan du skapa en statisk variabel som lagrar en bas-URL för den huvudsakliga mallen och dynamiskt skapa URL: er för de länkade mallarna från den grundläggande URL: en.Instead, you can create a static variable that stores a base URL for the main template and then dynamically create URLs for the linked templates from that base URL. Fördelen med den här metoden är att du enkelt kan flytta eller Förgrena mallen eftersom du behöver bara ändra den statiska variabeln i huvudsakliga mallen.The benefit of this approach is you can easily move or fork the template because you only need to change the static variable in the main template. Den huvudsakliga mallen skickar rätt URI: er i uppdelade mallen.The main template passes the correct URIs throughout the decomposed template.

I följande exempel visas hur du skapar två URL: er för länkade mallar med hjälp av en bas-URL (sharedTemplateUrl och vmTemplate).The following example shows how to use a base URL to create two URLs for linked templates (sharedTemplateUrl and vmTemplate).

"variables": {
    "templateBaseUrl": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/postgresql-on-ubuntu/",
    "sharedTemplateUrl": "[concat(variables('templateBaseUrl'), 'shared-resources.json')]",
    "vmTemplateUrl": "[concat(variables('templateBaseUrl'), 'database-2disk-resources.json')]"
}

Du kan också använda deployment() att hämta den grundläggande Webbadressen för den aktuella mallen och använda den för att hämta URL för andra mallar på samma plats.You can also use deployment() to get the base URL for the current template, and use that to get the URL for other templates in the same location. Den här metoden är användbar om ändringarna mall platsen eller om du vill undvika hårt kodning URL: er i mallfilen.This approach is useful if your template location changes or you want to avoid hard coding URLs in the template file. Egenskapen templateLink returneras bara när du länkar till en fjärransluten mall med en URL.The templateLink property is only returned when linking to a remote template with a URL. Om du använder en lokal mall är egenskapen inte tillgängligt.If you're using a local template, that property isn't available.

"variables": {
    "sharedTemplateUrl": "[uri(deployment().properties.templateLink.uri, 'shared-resources.json')]"
}

Hämta värden från den länkade mallenGet values from linked template

För att få utdatavärde från en länkad mall kan hämta egenskapens värde med syntax som: "[reference('deploymentName').outputs.propertyName.value]".To get an output value from a linked template, retrieve the property value with syntax like: "[reference('deploymentName').outputs.propertyName.value]".

När du hämtar en egenskap för utdata från en länkad mall, får inte egenskapsnamnet innehålla ett bindestreck.When getting an output property from a linked template, the property name can't include a dash.

I följande exempel visar hur du refererar till en länkad mall och hämta utdatavärde.The following examples demonstrate how to reference a linked template and retrieve an output value. Länkad mall returnerar ett enkelt meddelande.The linked template returns a simple message.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [],
    "outputs": {
        "greetingMessage": {
            "value": "Hello World",
            "type" : "string"
        }
    }
}

Den huvudsakliga mallen distribuerar länkad mall och hämtar värdet som returneras.The main template deploys the linked template and gets the returned value. Observera att den refererar till resursen distribution efter namn och namnet på egenskapen som returneras av den länkade mallen används.Notice that it references the deployment resource by name, and it uses the name of the property returned by the linked template.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "linkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[uri(deployment().properties.templateLink.uri, 'helloworld.json')]",
                    "contentVersion": "1.0.0.0"
                }
            }
        }
    ],
    "outputs": {
        "messageFromLinkedTemplate": {
            "type": "string",
            "value": "[reference('linkedTemplate').outputs.greetingMessage.value]"
        }
    }
}

Du kan ange beroenden mellan länkade mallen och andra resurser som andra typer av resurser.Like other resource types, you can set dependencies between the linked template and other resources. När andra resurser kräver ett värde för utdata från den länkade mallen kontrollerar du att den länkade mallen har distribuerats före dem.When other resources require an output value from the linked template, make sure the linked template is deployed before them. Eller, när den länkade mallen är beroende av andra resurser, se till att andra resurser distribueras innan länkad mall.Or, when the linked template relies on other resources, make sure other resources are deployed before the linked template.

I följande exempel visas en mall som distribuerar en offentlig IP-adress och returnerar resurs-ID:The following example shows a template that deploys a public IP address and returns the resource ID:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "publicIPAddresses_name": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Network/publicIPAddresses",
            "apiVersion": "2018-11-01",
            "name": "[parameters('publicIPAddresses_name')]",
            "location": "eastus",
            "properties": {
                "publicIPAddressVersion": "IPv4",
                "publicIPAllocationMethod": "Dynamic",
                "idleTimeoutInMinutes": 4
            },
            "dependsOn": []
        }
    ],
    "outputs": {
        "resourceID": {
            "type": "string",
            "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
        }
    }
}

Länka till mallen för att använda offentliga IP-adress från den föregående mallen när du distribuerar en belastningsutjämnare, och Lägg till ett beroende på resursen för distribution.To use the public IP address from the preceding template when deploying a load balancer, link to the template and add a dependency on the deployment resource. Offentliga IP-adress i belastningsutjämnaren har tilldelats värdet från den länkade mallen.The public IP address on the load balancer is set to the output value from the linked template.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "loadBalancers_name": {
            "defaultValue": "mylb",
            "type": "string"
        },
        "publicIPAddresses_name": {
            "defaultValue": "myip",
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Network/loadBalancers",
            "apiVersion": "2018-11-01",
            "name": "[parameters('loadBalancers_name')]",
            "location": "eastus",
            "properties": {
                "frontendIPConfigurations": [
                    {
                        "name": "LoadBalancerFrontEnd",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "publicIPAddress": {
                                "id": "[reference('linkedTemplate').outputs.resourceID.value]"
                            }
                        }
                    }
                ],
                "backendAddressPools": [],
                "loadBalancingRules": [],
                "probes": [],
                "inboundNatRules": [],
                "outboundNatRules": [],
                "inboundNatPools": []
            },
            "dependsOn": [
                "linkedTemplate"
            ]
        },
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "linkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[uri(deployment().properties.templateLink.uri, 'publicip.json')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters":{
                    "publicIPAddresses_name":{"value": "[parameters('publicIPAddresses_name')]"}
                }
            }
        }
    ]
}

Länkade och kapslade mallar i distributionshistorikenLinked and nested templates in deployment history

Resource Manager bearbetar varje mall som en separat distribution i distributionshistoriken.Resource Manager processes each template as a separate deployment in the deployment history. Därför visas en huvudsakliga mall med tre länkade eller kapslade mallar i distributionshistoriken som:Therefore, a main template with three linked or nested templates appears in the deployment history as:

Distributionshistorik

Du kan använda de här separata posterna i historiken för att hämta utdatavärden efter distributionen.You can use these separate entries in the history to retrieve output values after the deployment. Följande mall skapas en offentlig IP-adress och matar ut IP-adress:The following template creates a public IP address and outputs the IP address:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "publicIPAddresses_name": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Network/publicIPAddresses",
            "apiVersion": "2018-11-01",
            "name": "[parameters('publicIPAddresses_name')]",
            "location": "southcentralus",
            "properties": {
                "publicIPAddressVersion": "IPv4",
                "publicIPAllocationMethod": "Static",
                "idleTimeoutInMinutes": 4,
                "dnsSettings": {
                    "domainNameLabel": "[concat(parameters('publicIPAddresses_name'), uniqueString(resourceGroup().id))]"
                }
            },
            "dependsOn": []
        }
    ],
    "outputs": {
        "returnedIPAddress": {
            "type": "string",
            "value": "[reference(parameters('publicIPAddresses_name')).ipAddress]"
        }
    }
}

Följande mall länkar till föregående mall.The following template links to the preceding template. Den skapar tre offentliga IP-adresser.It creates three public IP addresses.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "[concat('linkedTemplate', copyIndex())]",
            "copy": {
                "count": 3,
                "name": "ip-loop"
            },
            "properties": {
              "mode": "Incremental",
              "templateLink": {
                "uri": "[uri(deployment().properties.templateLink.uri, 'static-public-ip.json')]",
                "contentVersion": "1.0.0.0"
              },
              "parameters":{
                  "publicIPAddresses_name":{"value": "[concat('myip-', copyIndex())]"}
              }
            }
        }
    ]
}

Efter distributionen kan hämta du utdatavärden med följande PowerShell-skript:After the deployment, you can retrieve the output values with the following PowerShell script:

$loopCount = 3
for ($i = 0; $i -lt $loopCount; $i++)
{
    $name = 'linkedTemplate' + $i;
    $deployment = Get-AzResourceGroupDeployment -ResourceGroupName examplegroup -Name $name
    Write-Output "deployment $($deployment.DeploymentName) returned $($deployment.Outputs.returnedIPAddress.value)"
}

Eller Azure CLI-skript i ett Bash-gränssnitt:Or, Azure CLI script in a Bash shell:

#!/bin/bash

for i in 0 1 2;
do
    name="linkedTemplate$i";
    deployment=$(az group deployment show -g examplegroup -n $name);
    ip=$(echo $deployment | jq .properties.outputs.returnedIPAddress.value);
    echo "deployment $name returned $ip";
done

Skydda en extern mallSecuring an external template

Även om den länkade mallen måste vara externt tillgänglig, behöver det inte att vara allmänt tillgängligt för allmänheten.Although the linked template must be externally available, it doesn't need to be generally available to the public. Du kan lägga till mallen för ett privat storage-konto som är tillgänglig för endast lagringskontoägaren.You can add your template to a private storage account that is accessible to only the storage account owner. Sedan kan skapa du en token för delad åtkomst (signatur) för att möjliggöra åtkomst under distributionen.Then, you create a shared access signature (SAS) token to enable access during deployment. Du kan lägga till den SAS-token till URI: N för den länkade mallen.You add that SAS token to the URI for the linked template. Även om token skickas som en säker sträng, loggas URI för länkade mallen, inklusive SAS-token i distributionsåtgärder.Even though the token is passed in as a secure string, the URI of the linked template, including the SAS token, is logged in the deployment operations. Ange en giltighetstid för token för att begränsa exponering.To limit exposure, set an expiration for the token.

Parameterfilen kan också vara begränsad till åtkomst via en SAS-token.The parameter file can also be limited to access through a SAS token.

För närvarande kan du inte länka till en mall i ett lagrings konto som ligger bakom en Azure Storage brand vägg.Currently, you can't link to a template in a storage account that is behind an Azure Storage firewall.

I följande exempel visas hur du skickar en SAS-token när du länkar till en mall:The following example shows how to pass a SAS token when linking to a template:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "containerSasToken": { "type": "string" }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "name": "linkedTemplate",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[concat(uri(deployment().properties.templateLink.uri, 'helloworld.json'), parameters('containerSasToken'))]",
          "contentVersion": "1.0.0.0"
        }
      }
    }
  ],
  "outputs": {
  }
}

I PowerShell kan du hämta en token för behållaren och distribuera mallar med följande kommandon.In PowerShell, you get a token for the container and deploy the templates with the following commands. Observera att den containerSasToken parametern har definierats i mallen.Notice that the containerSasToken parameter is defined in the template. Det är inte en parameter i kommandot New-AzResourceGroupDeployment .It isn't a parameter in the New-AzResourceGroupDeployment command.

Set-AzCurrentStorageAccount -ResourceGroupName ManageGroup -Name storagecontosotemplates
$token = New-AzStorageContainerSASToken -Name templates -Permission r -ExpiryTime (Get-Date).AddMinutes(30.0)
$url = (Get-AzStorageBlob -Container templates -Blob parent.json).ICloudBlob.uri.AbsoluteUri
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateUri ($url + $token) -containerSasToken $token

För Azure CLI i Bash-gränssnittet, hämta en token för behållaren och distribuera mallar med följande kod:For Azure CLI in a Bash shell, you get a token for the container and deploy the templates with the following code:

#!/bin/bash

expiretime=$(date -u -d '30 minutes' +%Y-%m-%dT%H:%MZ)
connection=$(az storage account show-connection-string \
    --resource-group ManageGroup \
    --name storagecontosotemplates \
    --query connectionString)
token=$(az storage container generate-sas \
    --name templates \
    --expiry $expiretime \
    --permissions r \
    --output tsv \
    --connection-string $connection)
url=$(az storage blob url \
    --container-name templates \
    --name parent.json \
    --output tsv \
    --connection-string $connection)
parameter='{"containerSasToken":{"value":"?'$token'"}}'
az group deployment create --resource-group ExampleGroup --template-uri $url?$token --parameters $parameter

Exempel på mallarExample templates

I följande exempel visas vanliga användningsområden för länkade mallar.The following examples show common uses of linked templates.

HuvudmallMain template Länkad mallLinked template BeskrivningDescription
Hello WorldHello World Länkad malllinked template Returnerar en sträng från länkad mall.Returns string from linked template.
Belastningsutjämnare med offentliga IP-adressLoad Balancer with public IP address Länkad malllinked template Returnerar den offentliga IP-adress från länkad mall och ställer in värdet i belastningsutjämnaren.Returns public IP address from linked template and sets that value in load balancer.
Flera IP-adresserMultiple IP addresses Länkad malllinked template Skapar flera offentliga IP-adresser i länkad mall.Creates several public IP addresses in linked template.

Nästa stegNext steps