Criar uma frota de computação do Azure usando um modelo ARM

Este artigo descreve como usar um modelo ARM para criar uma Frota de Computação do Azure.

Um modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo utiliza sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Pré-requisitos

  • Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
  • Antes de usar o Compute Fleet, conclua o registro do recurso e configure os controles de acesso baseados em função (RBAC).

Registo de funcionalidades

Registre o provedor de recursos do Azure Compute Fleet com sua assinatura usando o PowerShell ou o portal do Azure. O registro pode levar até 30 minutos para ser exibido com sucesso como registrado.

Register-AzResourceProvider -ProviderNamespace Microsoft.AzureFleet

Permissões de controlo de acesso baseado em funções

Atribua as permissões RBAC adequadas para utilizar o Azure Compute Fleet.

  1. No portal Azure, navegue até as suas assinaturas.
  2. Selecione a subscrição para a qual quer ajustar as permissões RBAC.
  3. Selecione Controlo de Acesso (IAM).
  4. Selecione Adicionar e, em seguida , Adicionar Atribuição de Função.
  5. Procure por Colaborador de Máquina Virtual e destaque-o. Selecione Seguinte.
  6. Clique em + Selecionar Membros.
  7. Pesquise a função Provedor de Recursos de Frota do Azure.
  8. Selecione o Azure Fleet Resource Provider e selecione Review + Assign.
  9. Repita as etapas anteriores para a função de Colaborador de Rede e a função de Operador de Identidade Gerenciada .

Se você estiver usando imagens armazenadas na Galeria de Computação ao implantar sua Frota de Computação, repita também as etapas anteriores para a função de Administrador de Compartilhamento da Galeria de Computação.

Para obter mais informações sobre como atribuir funções, consulte Atribuir funções do Azure usando o portal do Azure.

modelo do ARM

Um modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo utiliza sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Os modelos ARM permitem implantar grupos de recursos relacionados. Em um único modelo, você pode criar o Conjunto de Dimensionamento de Máquina Virtual, instalar aplicativos e configurar regras de dimensionamento automático. Com o uso de variáveis e parâmetros, esse modelo pode ser reutilizado para atualizar os existentes ou criar conjuntos de escala extra. Pode implementar modelos através do portal do Azure, da CLI do Azure ou do Azure PowerShell ou a partir de pipelines de integração contínua/entrega contínua (CI/CD).

Rever o modelo

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "fleetName": {
            "type": "string",
            "metadata": {
                "description": "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources, and resource-specific information is appended."
            }
        },
        "adminUsername": {
            "type": "string",
            "defaultValue": "testusername",
            "metadata": {
                "description": "Admin username on all VMs."
            }
        },
        "adminPassword": {
            "type": "string",
            "metadata": {
                "description": "Admin password on all VMs."
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "Location for all resources."
            }
        }
    },
    "variables": {
        "vnName": "[format('{0}-vnet', parameters('fleetName'))]",
        "lbName": "[format('{0}-lb', parameters('fleetName'))]",
        "imageReference": {
            "publisher": "MicrosoftWindowsServer",
            "offer": "WindowsServer",
            "sku": "2019-DataCenter-GS",
            "version": "latest"
        }
    },
    "resources": [
        {
            "type": "Microsoft.Network/virtualNetworks",
            "apiVersion": "2022-07-01",
            "name": "[variables('vnName')]",
            "location": "[parameters('location')]",
            "properties": {
                "addressSpace": {
                    "addressPrefixes": [
                        "10.0.0.0/16"
                    ]
                },
                "subnets": [
                    {
                        "name": "default",
                        "properties": {
                            "addressPrefix": "10.0.0.0/24"
                        }
                    }
                ]
            }
        },
        {
            "type": "Microsoft.Network/loadBalancers",
            "apiVersion": "2022-07-01",
            "name": "[variables('lbName')]",
            "location": "[parameters('location')]",
            "sku": {
                "name": "Standard"
            },
            "properties": {
                "frontendIPConfigurations": [
                    {
                        "name": "[variables('lbName')]",
                        "properties": {
                            "privateIPAddress": "10.0.0.4",
                            "privateIPAllocationMethod": "Dynamic",
                            "subnet": {
                                "id": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vnName'))).subnets[0].id]"
                            }
                        }
                    }
                ],
                "backendAddressPools": [
                    {
                        "name": "[variables('lbName')]"
                    }
                ]
            },
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', variables('vnName'))]"
            ]
        },
        {
            "type": "Microsoft.AzureFleet/fleets",
            "apiVersion": "2024-05-01-Preview",
            "name": "[toLower(parameters('fleetName'))]",
            "location": "[parameters('location')]",
            "properties": {
                "vmSizesProfile": [
                    {
                        "name": "Standard_F2s_v2"
                    },
                    {
                        "name": "Standard_DS1_v2"
                    },
                    {
                        "name": "Standard_DS2_v2"
                    }
                ],
                "spotPriorityProfile": {
                    "capacity": 10,
                    "evictionPolicy": "Delete",
                    "allocationStrategy": "CapacityOptimized",
                    "maintain": false
                },
                "regularPriorityProfile": {
                    "capacity": 50,
                    "minCapacity": 30,
                    "allocationStrategy": "LowestPrice"
                },
                "computeProfile": {
                    "platformFaultDomainCount": 1,
                    "computeApiVersion": "2024-03-01",
                    "baseVirtualMachineProfile": {
                        "storageProfile": {
                            "osDisk": {
                                "osType": "Windows",
                                "createOption": "fromImage",
                                "caching": "ReadWrite",
                                "managedDisk": {
                                    "storageAccountType": "Standard_LRS"
                                }
                            },
                            "imageReference": "[variables('imageReference')]"
                        },
                        "osProfile": {
                            "computerNamePrefix": "[parameters('fleetName')]",
                            "adminUsername": "[parameters('adminUsername')]",
                            "adminPassword": "[parameters('adminPassword')]"
                        },
                        "networkProfile": {
                            "networkApiVersion": "2022-07-01",
                            "networkInterfaceConfigurations": [
                                {
                                    "name": "[variables('vnName')]",
                                    "properties": {
                                        "primary": true,
                                        "enableIPForwarding": true,
                                        "enableAcceleratedNetworking": false,
                                        "ipConfigurations": [
                                            {
                                                "name": "[variables('vnName')]",
                                                "properties": {
                                                    "subnet": {
                                                        "id": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vnName'))).subnets[0].id]"
                                                    },
                                                    "primary": true,
                                                    "applicationGatewayBackendAddressPools": [],
                                                    "loadBalancerBackendAddressPools": [
                                                        {
                                                            "id": "[format('{0}/backendAddressPools/{1}', resourceId('Microsoft.Network/loadBalancers', variables('lbName')), variables('lbName'))]"
                                                        }
                                                    ]
                                                }
                                            }
                                        ]
                                    }
                                }
                            ]
                        }
                    }
                }
            },
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', variables('vnName'))]",
                "[resourceId('Microsoft.Network/loadBalancers', variables('lbName'))]"
            ]
        }
    ]
}

Esses recursos são definidos no modelo:

Criar uma frota no modo de Lançamento (Pré-visualização)

Para criar uma frota no modo de Lançamento (Pré-visualização), defina mode para Launch na frota properties e use a 2026-04-01-preview versão da API. No modo de lançamento, a frota abastece as VMs e depois entrega o controlo; o objeto da frota apaga-se automaticamente algumas horas depois enquanto as VMs persistem.

O excerto seguinte mostra as adições do modo Lançamento ao Microsoft.AzureFleet/fleets recurso. A vmNamePrefix propriedade atribui às VMs provisionadas nomes compatíveis com o orquestrador e requer a 2026-04-01-preview versão da API.

{
    "type": "Microsoft.AzureFleet/fleets",
    "apiVersion": "2026-04-01-preview",
    "name": "[toLower(parameters('fleetName'))]",
    "location": "[parameters('location')]",
    "zones": [ "1", "2", "3" ],
    "properties": {
        "mode": "Launch",
        "vmNamePrefix": "myapp",
        "vmSizesProfile": [
            { "name": "Standard_D2s_v3" },
            { "name": "Standard_D4s_v3" },
            { "name": "Standard_E2s_v3" }
        ],
        "regularPriorityProfile": {
            "capacity": 50,
            "allocationStrategy": "LowestPrice"
        },
        "spotPriorityProfile": {
            "capacity": 50,
            "allocationStrategy": "CapacityOptimized"
        },
        "computeProfile": {
            "computeApiVersion": "2024-03-01",
            "baseVirtualMachineProfile": {
                "storageProfile": { "...": "..." },
                "osProfile": { "...": "..." },
                "networkProfile": { "...": "..." }
            }
        }
    }
}

No modo «Launch», não definas a preferência spotPriorityProfile.maintain - aplica-se apenas ao modo «Managed». Como o provisionamento é assíncrono, use a API List VMs para recuperar os IDs dos recursos VM e monitorizar o estado do provisionamento após a submissão da implementação.

Importante

O modo de lançamento do Azure Compute Fleet está atualmente em pré-visualização. Para mais informações, consulte Modo de Lançamento para o Azure Compute Fleet (Pré-visualização).

Clean up resources (Limpar recursos)

Quando já não for necessário, pode utilizar az group delete para remover o grupo de recursos, o conjunto de dimensionamento e todos os recursos relacionados da seguinte forma. O parâmetro --no-wait devolve o controlo à linha de comandos, sem aguardar a conclusão da operação. O --yes parâmetro confirma que você deseja excluir os recursos sem outro prompt para fazê-lo.

az group delete --name myResourceGroup --yes --no-wait

Próximos passos