Beschreiben von Azure-Ressourcen als ARM Template

⏱️3 Min
Teilen:

ARM Template ist eine Datei im JSON-Format, die Azure-Ressourcen definiert. ARM Template Sie die Praxis der Infrastruktur als Code realisieren. Die Erstellung einer ARM Template ist jedoch in erster Linie etwas schwierig. Dieses Mal werde ich Ihnen erklären, wie Sie ARM Template effizient erstellen, wenn Sie eine neue Ressource bereitstellen müssen. Ich erkläre zunächst, wie Sie schnell verstehen, wie eine neue Ressource als JSON-Format beschrieben wird, und zeige Ihnen dann einige Beispiele.

1. Exportieren Sie die Vorlage aus Azure Portal

Es ist schwierig, eine Vorlage von Grund auf neu zu erstellen. Ich empfehle daher, zuerst die Zielressource in Azure Portal zu erstellen und dann die Vorlage der Ressource zu exportieren, um sie als Referenz zu verwenden.

Export template1 Export template2

Hier sehen Sie, dass Ihre Ressource als ARM Template .

2. Lesen Sie die offiziellen Dokumente

Als Nächstes können Sie auf offizielle Microsoft-Dokumente 1 verweisen. In diesem Dokument finden Sie, welche Art von Eigenschaften definiert sind, welche Art von Wert angegeben werden kann usw. Sie können die exportierte Vorlage ändern, indem Sie diese Dokumente lesen. Beispielvorlagen finden Sie auch unten auf jeder Referenzseite.

Quick start template

3. Überprüfen Sie die REST-API-Referenz

In einigen Fällen finden Sie keine Erklärungen zu den Details eines Eigenschaftsobjekts der ARM Template . In diesem Fall kann Ihnen die REST-API-Referenz helfen. Wenn Sie Ihre ARM Template ausführen, werden zugehörige REST-APIs im Backend aufgerufen. Dies bedeutet, dass Sie die Objektdefinition anhand der REST-API-Referenz 2 erraten können.

Andere Tipps

Template Function

Sie können Vorlagenfunktionen verwenden, um Azure-Ressourcen effektiv darzustellen. Sie können beispielsweise die copy verwenden, um ein Array-Objekt zu erstellen.

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}

Angenommen, ipAddressArray ist ein Zeichenfolgenparameter, der eine durch Komma getrennte IP-Adresse darstellt. 10.0.0.0/16,10.0.1.0/16,...

Diese ARM Template wird wie folgt kompiliert:

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}

Sie können sehen , ipSecurityRestrictions ist definiert durch copy Weitere Informationen finden Sie im offiziellen Microsoft-Dokument 3.

Andere Werkzeuge

Resource Explorer

Resource Explorer 4 ist auch hilfreich, um zu verstehen, wie die Ressource als JSON-Format beschrieben wird.

Resource Explorer

Dieses Tool ist nützlich, wenn Sie die Eigenschaften der Ressource überprüfen möchten. Angenommen, Sie müssen die verwaltete managedId von der API Management managedId .

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 hilft Ihnen, die Struktur der Ressource zu verstehen. In diesem Fall können Sie die ID über identity.principalId abrufen.

Hier ist also die template function für den Zugriff auf die ID.

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

ARM Template Viewer

ARM Template Viewer , eine Erweiterung von Visual Studio Code , ist auch nützlich, um Ihre Ressourcen zu visualisieren. Hier ist ein Diagramm, das von ARM Template Viewer .

ARM Template Viewer

Es wird Ihnen helfen zu verstehen, wie jede Ressource voneinander abhängt.

Zusammenfassung

In diesem Artikel habe ich erklärt, wie eine neue ARM Template effizient erstellt wird. Jetzt können Sie über die ARM Template alle benötigten Ressourcen erstellen. Viel Glück!

Footnotes

  1. Define resources in Azure Resource Manager templates

  2. Azure REST API Reference

  3. Azure Resource Manager template functions

  4. Resource Explorer

Teilen:

Verwandte Artikel