Compartilhar via


Personalizar AspireAzure implantações

O Azure Developer CLI (azd) fornece um recurso poderoso chamado geração de infraestrutura que permite que você gere e personalize o código de infraestrutura subjacente para seus Aspire aplicativos. Essa funcionalidade é essencial para cenários de produção em que você precisa de controle refinado sobre Azure recursos, configurações de segurança e padrões de implantação.

Este artigo aborda como usar azd infra gen para:

  • Gere arquivos de infraestrutura Bicep a partir do modelo de aplicativo Aspire.
  • Personalize a infraestrutura gerada para os requisitos de produção.
  • Aplique as práticas recomendadas de segurança aos recursos gerados.
  • Gerenciar a infraestrutura como código com controle de versão adequado.

Pré-requisitos

Para trabalhar com Aspire, você precisa do seguinte instalado localmente:

Para obter mais informações, consulte Aspire configuração e ferramentas e Aspire SDK.

Você também precisará ter o Azure Developer CLIinstalado localmente.

Como funciona a geração de infraestrutura

A geração de infraestrutura em azd transforma o modelo de aplicativo Aspire em definições de infraestrutura concretas Azure, usando modelos Bicep. Esse processo faz a ponte entre a orquestração no tempo de desenvolvimento em Aspire e a infraestrutura de produção que é necessária em Azure.

Quando você executa azd infra gen, a CLI:

  1. Analisa seu Aspire projeto AppHost.
  2. Identifica todos os recursos e suas dependências.
  3. Gera definições de recurso correspondentes Azure no Bicep.
  4. Cria arquivos de configuração de suporte para implantação.

Usar a geração de infraestrutura

Chame o comando gerar infraestrutura em sua Aspire solução:

azd infra gen

Esse comando cria uma infra pasta no diretório do projeto AppHost com a seguinte estrutura:

└───📂 infra
     ├─── abbreviations.json   # Azure resource naming conventions  
     ├─── main.bicep           # Main infrastructure entry point
     ├─── main.parameters.json # Parameter values for deployment
     └─── resources.bicep      # Resource definitions    

Considerações sobre produção

A infraestrutura gerada fornece uma base sólida para sua implantação, mas os ambientes de produção exigem configuração adicional para segurança, escalabilidade e manutenção. Esta seção aborda as principais áreas que você deve personalizar ao se preparar para a implantação de produção.

Configurações de segurança

Ao se preparar para implantações de produção, examine e aprimore a infraestrutura gerada com os controles de segurança apropriados:

Isolamento de rede:

// Example: Configure Container Apps Environment with network restrictions
resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2023-05-01' = {
  name: environmentName
  location: location
  properties: {
    vnetConfiguration: {
      infrastructureSubnetId: subnetId
      internal: true
    }
    workloadProfiles: [
      {
        name: 'Consumption'
        workloadProfileType: 'Consumption'
      }
    ]
  }
}

Gerenciamento de identidade e acesso:

// Example: Configure managed identity with least privilege access
resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: identityName
  location: location
}

// Assign specific roles rather than broad permissions
resource acrPullRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: containerRegistry
  name: guid(containerRegistry.id, managedIdentity.id, 'AcrPull')
  properties: {
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') // AcrPull
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}

Dimensionamento e escalonamento de recursos

Examine as configurações de recursos gerados para requisitos de produção:

// Example: Configure appropriate resource limits
resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
  name: appName
  location: location
  properties: {
    configuration: {
      ingress: {
        external: true
        targetPort: 8080
        allowInsecure: false // Ensure HTTPS only
      }
    }
    template: {
      containers: [
        {
          name: containerName
          image: image
          resources: {
            cpu: json('1.0')      // Adjust based on load requirements
            memory: '2.0Gi'       // Adjust based on memory needs
          }
        }
      ]
      scale: {
        minReplicas: 2          // Ensure availability
        maxReplicas: 10         // Control costs
        rules: [
          {
            name: 'http-requests'
            http: {
              metadata: {
                concurrentRequests: '100'
              }
            }
          }
        ]
      }
    }
  }
}

Configurações específicas do ambiente

Use parâmetros para gerenciar configurações específicas do ambiente:

@description('Environment name (dev, staging, prod)')
param environmentType string = 'dev'

@description('Application tier configuration')
var tierConfigurations = {
  dev: {
    skuName: 'Consumption'
    replicas: 1
  }
  staging: {
    skuName: 'Dedicated'
    replicas: 2
  }
  prod: {
    skuName: 'Dedicated'
    replicas: 3
  }
}

var currentTier = tierConfigurations[environmentType]

Fluxo de trabalho de personalização iterativa

Depois de gerar a infraestrutura inicial, estabeleça um fluxo de trabalho para personalização contínua:

  1. Faça alterações de infraestrutura nos arquivos Bicep gerados.
  2. Testar implantações em ambientes de desenvolvimento.
  3. Controle de versão das alterações de infraestrutura.
  4. Personalizações de documentos para colaboração em equipe.

Importante

Executar azd infra gen novamente irá regenerar os arquivos e poderá sobrescrever suas personalizações. Sempre controle as alterações e esteja preparado para aplicar novamente as personalizações após a regeneração.

Padrões avançados de personalização

Definições de recursos personalizados

Estender a infraestrutura gerada com recursos adicionais Azure :

// Add Application Insights for monitoring
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: '${resourceBaseName}-ai'
  location: location
  kind: 'web'
  properties: {
    Application_Type: 'web'
    Flow_Type: 'Redfield'
    Request_Source: 'IbizaWebAppExtensionCreate'
    WorkspaceResourceId: logAnalyticsWorkspace.id
  }
}

// Configure container apps to use Application Insights
resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
  // ... other properties
  properties: {
    template: {
      containers: [
        {
          // ... other container properties
          env: [
            {
              name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
              value: applicationInsights.properties.ConnectionString
            }
          ]
        }
      ]
    }
  }
}

Validação de infraestrutura

Adicione regras de validação para garantir a configuração adequada de recursos:

@description('Validates that environment type is supported')
@allowed(['dev', 'staging', 'prod'])
param environmentType string

@description('Validates location is in allowed regions')
@allowed(['eastus', 'westus2', 'northeurope'])
param location string

Práticas recomendadas

  • Controle de versão: sempre confirme arquivos de infraestrutura gerados no controle do código-fonte.
  • Separação de ambiente: use grupos de recursos separados e convenções de nomenclatura para ambientes diferentes.
  • Verificação de segurança: implemente a verificação automatizada de segurança de modelos Bicep.
  • Monitoramento de custos: configure alertas de orçamento e marcas de recurso para acompanhamento de custos.
  • Documentação: manter a documentação das personalizações e sua lógica.

Próximas etapas