Décrire les ressources Azure comme ARM Template

⏱️3 min
Partager :

ARM Template est un fichier au format json qui définit les ressources Azure. ARM Template vous aide à réaliser la pratique de l'infrastructure en tant que code. Cependant, ARM Template est un peu difficile à créer en premier lieu. Donc, cette fois, je vais vous dire comment créer efficacement un ARM Template , lorsque vous devez déployer une nouvelle ressource. Je vais commencer par vous expliquer comment comprendre rapidement comment décrire une nouvelle ressource au format json, puis vous montrer quelques exemples.

1. Exporter le modèle depuis Azure Portal

Il est difficile de créer un modèle à partir de zéro. Je vous recommande donc de créer d'abord la ressource cible sur Azure Portal, puis d'exporter le modèle de la ressource pour l'utiliser comme référence.

Export template1 Export template2

Ici, vous pouvez voir que votre ressource est décrite comme un ARM Template .

2. Lisez les documents officiels

Ensuite, vous pouvez vous référer aux documents officiels de Microsoft 1. Dans ce document, vous pouvez trouver quel type de propriétés sont définies, quel type de valeur peut être spécifié, etc. Vous pouvez modifier le modèle exporté en lisant ces documents. Vous pouvez également trouver des exemples de modèles au bas de chaque page de référence.

Quick start template

3. Vérifiez la référence de l'API REST

Dans certains cas, vous ne pouvez trouver aucune explication sur le détail d'un objet de propriété du ARM Template . Dans ce cas, la référence de l'API REST peut vous aider. Lorsque vous exécutez votre ARM Template , les API REST associées sont appelées dans le backend. Cela signifie que vous pouvez deviner la définition de l'objet par référence à l'API REST 2.

Autres astuces

Template Function

Vous pouvez utiliser des fonctions de modèle pour représenter efficacement les ressources Azure. Par exemple, vous pouvez utiliser la fonction de copy pour créer un objet tableau.

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}

Supposons que ipAddressArray est un paramètre de chaîne qui représente un ensemble d'adresses IP divisé par une virgule. 10.0.0.0/16,10.0.1.0/16,...

Ce ARM Template sera compilé comme suit:

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}

Vous pouvez voir que ipSecurityRestrictions est défini par la fonction de copy . Pour plus d'informations, consultez le document officiel de Microsoft 3.

Autres outils

Resource Explorer

Resource Explorer 4 est également utile pour comprendre comment décrire la ressource au format json.

Resource Explorer

Cet outil est utile lorsque vous souhaitez vérifier les propriétés de la ressource. Supposons que vous managedId obtenir managedId depuis la 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 vous aidera à comprendre la structure de la ressource. Dans ce cas, vous pouvez récupérer l'id via identity.principalId .

Voici donc la template function pour accéder à l'id;

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

ARM Template Viewer

ARM Template Viewer , qui est une extension de Visual Studio Code , est également utile pour visualiser vos ressources. Voici un diagramme créé par ARM Template Viewer .

ARM Template Viewer

Il vous aidera à comprendre comment chaque ressource dépend les unes des autres.

Résumé

Dans cet article, j'ai expliqué comment créer efficacement un nouveau ARM Template . Vous pouvez maintenant créer toutes les ressources dont vous avez besoin via le ARM Template . Bonne chance!

Footnotes

  1. Define resources in Azure Resource Manager templates

  2. Azure REST API Reference

  3. Azure Resource Manager template functions

  4. Resource Explorer

Partager :

Articles connexes