Beschrijf Azure-resources als ARM Template

⏱️3 min
Delen:

ARM Template is een json-formaatbestand dat Azure-resources definieert. ARM Template helpt u de praktijk van infrastructuur als een code te realiseren. ARM Template is echter in de eerste plaats een beetje moeilijk te maken. Dus deze keer ga ik je vertellen hoe je ARM Template efficiënt kunt maken, wanneer je een nieuwe bron moet implementeren. Ik zal beginnen met het uitleggen van de manier om snel te begrijpen hoe een nieuwe bron als json-indeling moet worden beschreven, en vervolgens enkele voorbeelden te laten zien.

1. Sjabloon exporteren vanuit Azure Portal

Het is moeilijk om helemaal opnieuw een sjabloon te maken. Dus ik raad u aan om eerst de doelresource op Azure Portal te maken en vervolgens de sjabloon van de resource te exporteren om deze als referentie te gebruiken.

Export template1 Export template2

Hier kunt u zien dat uw bron wordt beschreven als ARM Template .

2. Lees officiële documenten

Vervolgens kunt u verwijzen naar de officiële documenten van Microsoft 1. In dit document kunt u zien wat voor soort eigenschappen zijn gedefinieerd, wat voor soort waarde kan worden gespecificeerd, enz. U kunt de geëxporteerde sjabloon wijzigen door deze documenten te lezen. Onderaan elke referentiepagina vindt u ook voorbeeldsjablonen.

Quick start template

3. Controleer de REST API-referentie

In sommige gevallen kunt u geen uitleg vinden over de details van een eigendomsobject van ARM Template . In dat geval kan de REST API-referentie u helpen. Wanneer u uw ARM Template uitvoert, worden bijbehorende REST-API's aangeroepen in de backend. Dit betekent dat u de objectdefinitie kunt raden aan de hand van de REST API-referentie 2.

Andere tips

Template Function

U kunt sjabloonfuncties gebruiken om Azure-resources effectief weer te geven. U kunt bijvoorbeeld de copy gebruiken om een matrixobject te maken.

json
1{
2 "$schema": "https://schema.management.azure.com/schemas/2018-05-01/deploymentTemplate.json#",
3 "contentVersion": "1.0.0.0",
4 "parameters": {
5 "ipAddressArray": {
6 "type": "string",
7 "metadata": {
8 "description": "IP Address split by a comma."
9 }
10 }
11 },
12 "resources": [
13 {
14 "type": "Microsoft.Web/sites/config",
15 "name": "functionConfig",
16 "apiVersion": "2018-11-01",
17 "location": "[resourceGroup().location]",
18 "scale": null,
19 "properties": {
20 "copy": [
21 {
22 "name": "ipSecurityRestrictions",
23 "count": "[length(split(parameters('ipAddressArray'), ','))]",
24 "input": {
25 "ipAddress": "[string(split(parameters('ipAddressArray'), ',')[copyIndex('ipSecurityRestrictions')])]",
26 "name": "[concat(resourceGroup().location, copyIndex('ipSecurityRestrictions'))]"
27 }
28 }
29 ]
30 }
31 }
32 ]
33}

Stel dat ipAddressArray een tekenreeksparameter is die een set IP-adressen vertegenwoordigt die is gesplitst door een komma. 10.0.0.0/16,10.0.1.0/16,...

Deze ARM Template wordt als volgt samengesteld:

json
1{
2 "$schema": "https://schema.management.azure.com/schemas/2018-05-01/deploymentTemplate.json#",
3 "contentVersion": "1.0.0.0",
4 "parameters": {
5 "ipAddressArray": {
6 "type": "string",
7 "metadata": {
8 "description": "IP Address split by comma"
9 }
10 }
11 },
12 "resources": [
13 {
14 "type": "Microsoft.Web/sites/config",
15 "name": "functionConfig",
16 "apiVersion": "2018-11-01",
17 "location": "japaneast",
18 "scale": null,
19 "properties": {
20 "ipSecurityRestrictions": [
21 {
22 "ipAddress": "10.0.0.0/16",
23 "name": "japaneast0"
24 },
25 {
26 "ipAddress": "10.0.1.0/16",
27 "name": "japaneast1"
28 },
29 ...
30 ]
31 }
32 }
33 ]
34}

U kunt zien dat ipSecurityRestrictions wordt gedefinieerd door de copy . Zie het officiële document van Microsoft 3 voor meer informatie.

Andere tools

Resource Explorer

Resource Explorer 4 is ook handig voor u om te begrijpen hoe u de resource als json-indeling beschrijft.

Resource Explorer

Deze tool is handig wanneer u de eigenschappen van de bron wilt controleren. Stel dat u managedId moet managedId van API Management .

json
1{
2 "value": [
3 {
4 "id": "/subscriptions/your-subscription-id/resourceGroups/your-resource-group-name/providers/Microsoft.ApiManagement/service/your-api-management-service-name",
5 "name": "your-apim-name",
6 "type": "Microsoft.ApiManagement/service",
7 "location": "Japan East",
8 "etag": "xxx",
9 "properties": {
10 "publisherEmail": "xxx",
11 "publisherName": "xxx",
12 "notificationSenderEmail": "xxx",
13 "provisioningState": "Succeeded",
14 "targetProvisioningState": "",
15 "createdAtUtc": "2020-04-13T09:37:25.5871876Z",
16 "gatewayUrl": "https://your-apim-name.azure-api.net",
17 "gatewayRegionalUrl": "xxx",
18 "portalUrl": "https://your-apim-name.portal.azure-api.net",
19 "developerPortalUrl": "https://your-apim-name.developer.azure-api.net",
20 "managementApiUrl": "https://your-apim-name.management.azure-api.net",
21 "scmUrl": "https://your-apim-name.scm.azure-api.net",
22 "hostnameConfigurations": [],
23 "publicIPAddresses": [
24 "x.x.x.x"
25 ],
26 "privateIPAddresses": null,
27 "additionalLocations": null,
28 "virtualNetworkConfiguration": null,
29 "customProperties": {
30 "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10": "False",
31 "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11": "False",
32 "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Ssl30": "False",
33 "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168": "False",
34 "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10": "False",
35 "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11": "False",
36 "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Ssl30": "False",
37 "Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2": "False"
38 },
39 "virtualNetworkType": "None",
40 "certificates": null
41 },
42 "sku": {
43 "name": "Developer",
44 "capacity": 1
45 },
46 "identity": {
47 "type": "SystemAssigned",
48 "principalId": "your-id",
49 "tenantId": "your-tenant"
50 }
51 },

Resource Explorer helpt u de structuur van de resource te begrijpen. In dit geval kunt u de id ophalen via identity.principalId .

Hier is dus de template function om toegang te krijgen tot de id;

json
1"[reference(parameters('resourceId'), 'api-version', 'Full').identity.principalId]"

ARM Template Viewer

ARM Template Viewer , een uitbreiding van Visual Studio Code , is ook handig om uw bronnen te visualiseren. Hier is een diagram gemaakt door ARM Template Viewer .

ARM Template Viewer

Het zal u helpen te begrijpen hoe elke bron van elkaar afhangt.

Samenvatting

In dit artikel heb ik uitgelegd hoe u efficiënt een nieuwe ARM Template . Nu kunt u alle bronnen maken die u nodig heeft via ARM Template . Succes!

Footnotes

  1. Define resources in Azure Resource Manager templates

  2. Azure REST API Reference

  3. Azure Resource Manager template functions

  4. Resource Explorer

Delen:

Gerelateerde artikelen