Describir los recursos de Azure como ARM Template

Última actualización: 13/4/2020
Azure
ARM Template

ARM Template es un archivo de formato json que define los recursos de Azure. ARM Template te ayuda a realizar la práctica de la infraestructura como un código. Sin embargo, ARM Template es un poco difícil de crear en primer lugar. Entonces, esta vez le diré cómo crear una ARM Template eficiente, cuando necesite implementar un nuevo recurso. Comenzaré explicando la manera de entender rápidamente cómo describir un nuevo recurso como formato json, y luego le mostraré algunos ejemplos.

1. Exportar plantilla desde Azure Portal

Es difícil crear una plantilla desde cero. Por lo tanto, le recomiendo que primero cree el recurso de destino en Azure Portal y luego exporte la plantilla del recurso para usarlo como referencia.

Export template1

Export template2

Aquí, puede ver que su recurso se describe como ARM Template .

2. Leer documentos oficiales

A continuación, puede consultar los documentos oficiales de Microsoft 2. En este documento, puede encontrar qué tipo de propiedades se definen, qué tipo de valor se puede especificar, etc. Puede modificar la plantilla exportada leyendo estos documentos. También puede encontrar plantillas de muestra en la parte inferior de cada página de referencia.

Quick start template

3. Verifique la referencia de la API REST

En algunos casos, no puede encontrar ninguna explicación sobre el detalle de algún objeto de propiedad de ARM Template . En ese caso, la referencia de la API REST puede ayudarlo. Cuando ejecuta su ARM Template , las API REST asociadas se invocan en el back-end. Esto significa que puede adivinar la definición del objeto mediante la referencia REST API 3.

Otros consejos

Template Function

Puede usar funciones de plantilla para representar eficazmente los recursos de Azure. Por ejemplo, puede usar la función de copy para crear un objeto de matriz.

sample.json
{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "ipAddressArray": {
            "type": "string",
            "metadata": {
                "description": "IP Address split by a comma."
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Web/sites/config",
            "name": "functionConfig",
            "apiVersion": "2018-11-01",
            "location": "[resourceGroup().location]",
            "scale": null,
            "properties": {
                "copy": [
                    {
                        "name": "ipSecurityRestrictions",
                        "count": "[length(split(parameters('ipAddressArray'), ','))]",
                        "input": {
                            "ipAddress": "[string(split(parameters('ipAddressArray'), ',')[copyIndex('ipSecurityRestrictions')])]",
                            "name": "[concat(resourceGroup().location, copyIndex('ipSecurityRestrictions'))]"
                        }
                    }
                ]
            }
        }
    ]
}

Supongamos que ipAddressArray es un parámetro de cadena que representa un conjunto de direcciones IP divididas por una coma. 10.0.0.0/16,10.0.1.0/16,...

Esta ARM Template se compilará así:

result.json
{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "ipAddressArray": {
            "type": "string",
            "metadata": {
                "description": "IP Address split by comma"
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Web/sites/config",
            "name": "functionConfig",
            "apiVersion": "2018-11-01",
            "location": "japaneast",
            "scale": null,
            "properties": {
                "ipSecurityRestrictions": [
                    {
                        "ipAddress": "10.0.0.0/16",
                        "name": "japaneast0"
                    },
                    {
                        "ipAddress": "10.0.1.0/16",
                        "name": "japaneast1"
                    },
                    ...
                ]
            }
        }
    ]
}

Puede ver que ipSecurityRestrictions está definido por la función de copy . Para obtener más información, consulte el documento oficial de Microsoft 4.

Otras herramientas

Resource Explorer

Resource Explorer 1 también es útil para que comprenda cómo describir el recurso como formato json.

Resource Explorer

Esta herramienta es útil cuando desea verificar las propiedades del recurso. Suponga que necesita obtener managedId API Management .

resource-explorer
{
  "value": [
    {
      "id": "/subscriptions/your-subscription-id/resourceGroups/your-resource-group-name/providers/Microsoft.ApiManagement/service/your-api-management-service-name",
      "name": "your-apim-name",
      "type": "Microsoft.ApiManagement/service",
      "location": "Japan East",
      "etag": "xxx",
      "properties": {
        "publisherEmail": "xxx",
        "publisherName": "xxx",
        "notificationSenderEmail": "xxx",
        "provisioningState": "Succeeded",
        "targetProvisioningState": "",
        "createdAtUtc": "2020-04-13T09:37:25.5871876Z",
        "gatewayUrl": "https://your-apim-name.azure-api.net",
        "gatewayRegionalUrl": "xxx",
        "portalUrl": "https://your-apim-name.portal.azure-api.net",
        "developerPortalUrl": "https://your-apim-name.developer.azure-api.net",
        "managementApiUrl": "https://your-apim-name.management.azure-api.net",
        "scmUrl": "https://your-apim-name.scm.azure-api.net",
        "hostnameConfigurations": [],
        "publicIPAddresses": [
          "x.x.x.x"
        ],
        "privateIPAddresses": null,
        "additionalLocations": null,
        "virtualNetworkConfiguration": null,
        "customProperties": {
          "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10": "False",
          "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11": "False",
          "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Ssl30": "False",
          "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168": "False",
          "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10": "False",
          "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11": "False",
          "Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Ssl30": "False",
          "Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2": "False"
        },
        "virtualNetworkType": "None",
        "certificates": null
      },
      "sku": {
        "name": "Developer",
        "capacity": 1
      },
      "identity": {
        "type": "SystemAssigned",
        "principalId": "your-id",
        "tenantId": "your-tenant"
      }
    },

Resource Explorer lo ayudará a comprender la estructura del recurso. En este caso, puede recuperar la identificación a través de identity.principalId .

Entonces, aquí está la template function para acceder a la identificación;

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

ARM Template Viewer

ARM Template Viewer , que es una extensión de Visual Studio Code , también es útil para visualizar sus recursos. Aquí hay un diagrama creado por ARM Template Viewer .

ARM Template Viewer

Le ayudará a comprender cómo cada recurso depende el uno del otro.

Resumen

En este artículo, he explicado cómo crear eficientemente una nueva ARM Template . Ahora puede crear cualquier recurso que necesite a través de la ARM Template . ¡Buena suerte!

2019 Copyright Channel.241