Descrever recursos do Azure como ARM Template

⏱️3 min
Compartilhar:

ARM Template é um arquivo de formato json que define os recursos do Azure. ARM Template ajuda você a realizar a prática da infraestrutura como um código. No entanto, o ARM Template é um pouco difícil de criar em primeiro lugar. Então, desta vez, vou mostrar como criar um ARM Template eficiência, quando você precisar implantar um novo recurso. Começarei explicando a maneira de entender rapidamente como descrever um novo recurso como formato json e depois mostrarei alguns exemplos.

1. Exportar modelo do Azure Portal do Azure Portal

É difícil criar um modelo a partir do zero. Portanto, recomendo que você primeiro crie o recurso de destino no Portal do Azure e exporte o modelo do recurso para usá-lo como referência.

Export template1 Export template2

Aqui, você pode ver que seu recurso é descrito como ARM Template .

2. Leia documentos oficiais

Em seguida, você pode consultar os documentos oficiais da Microsoft 1. Neste documento, você pode encontrar que tipo de propriedades são definidas, que tipo de valor pode ser especificado, etc. Você pode modificar o modelo exportado lendo esses documentos. Você também pode encontrar modelos de amostra na parte inferior de cada página de referência.

Quick start template

3. Verifique a referência da API REST

Em alguns casos, você não encontra explicações sobre os detalhes de algum objeto de propriedade do ARM Template . Nesse caso, a referência da API REST pode ajudá-lo. Quando você executa seu ARM Template , as APIs REST associadas são chamadas no back-end. Isso significa que você pode adivinhar a definição do objeto pela referência da API REST 2.

Outras dicas

Template Function

Você pode usar funções de modelo para representar efetivamente os recursos do Azure. Por exemplo, você pode usar a função de copy para criar um objeto de matriz.

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}

Suponha que ipAddressArray é um parâmetro de string que representa um conjunto de endereços IP divididos por vírgula. 10.0.0.0/16,10.0.1.0/16,...

Este ARM Template será compilado assim:

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}

Você pode ver que ipSecurityRestrictions é definido pela função de copy . Para mais informações, consulte o documento oficial da Microsoft 3.

Outras ferramentas

Resource Explorer

Resource Explorer 4 também é útil para você entender como descrever o recurso como formato json.

Resource Explorer

Essa ferramenta é útil quando você deseja verificar as propriedades do recurso. Suponha que você precise obter o managedId de API Management do 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 o ajudará a entender a estrutura do recurso. Nesse caso, você pode recuperar o ID por meio de identity.principalId .

Então, aqui está a template function para acessar o id;

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

ARM Template Viewer

ARM Template Viewer , que é uma extensão do Visual Studio Code , também é útil para visualizar seus recursos. Aqui está um diagrama criado pelo ARM Template Viewer .

ARM Template Viewer

Isso ajudará você a entender como cada recurso depende um do outro.

Sumário

Neste artigo, expliquei como criar com eficiência um novo ARM Template . Agora você pode criar quaisquer recursos necessários através do ARM Template . Boa sorte!

Footnotes

  1. Define resources in Azure Resource Manager templates

  2. Azure REST API Reference

  3. Azure Resource Manager template functions

  4. Resource Explorer

Compartilhar:

Artigos relacionados