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.
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.
Aquí, puede ver que su recurso se describe como ARM Template
.
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.
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.
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.
{
"$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í:
{
"$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.
Resource Explorer
Resource Explorer
1 también es útil para que comprenda cómo describir el recurso como formato json.
Esta herramienta es útil cuando desea verificar las propiedades del recurso.
Suponga que necesita obtener managedId
API Management
.
{
"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;
"[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
.
Le ayudará a comprender cómo cada recurso depende el uno del otro.
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!