Partager via


Personnaliser les AspireAzure déploiements

Le Azure Developer CLI (azd) fournit une fonctionnalité puissante appelée génération d’infrastructure qui vous permet de générer et de personnaliser le code d’infrastructure sous-jacent pour vos Aspire applications. Cette fonctionnalité est essentielle pour les scénarios de production où vous avez besoin d’un contrôle précis sur Azure les ressources, les configurations de sécurité et les modèles de déploiement.

Cet article explique comment utiliser azd infra gen :

  • Générez des fichiers d’infrastructure Bicep à partir de votre Aspire modèle d’application.
  • Personnaliser l’infrastructure générée pour les exigences de production.
  • Appliquez les meilleures pratiques de sécurité aux ressources générées.
  • Gérez l’infrastructure en tant que code avec un contrôle de version approprié.

Prerequisites

Pour travailler avec Aspire, vous avez besoin des éléments suivants installés localement :

Pour plus d’informations, consultez Aspire configuration et outils, et Aspire SDK.

Vous devez également avoir Azure Developer CLIinstallé localement.

Fonctionnement de la génération d’infrastructure

La génération d’infrastructure dans azd transforme votre modèle d’application Aspire en définitions concrètes d’infrastructure Azure à l’aide de modèles Bicep. Ce processus permet de combler le fossé entre l’orchestration au moment du développement dans Aspire et l’infrastructure de production requise dans Azure.

Lorsque vous exécutez azd infra gen, l’interface en ligne de commande (CLI) :

  1. Analyse votre Aspire projet AppHost.
  2. Identifie toutes les ressources et leurs dépendances.
  3. Génère les définitions de ressources correspondantes Azure dans Bicep.
  4. Crée des fichiers de configuration de prise en charge pour le déploiement.

Utiliser la génération d’infrastructure

Exécutez la commande pour générer l'infrastructure sur votre Aspire solution :

azd infra gen

Cette commande crée un infra dossier dans votre répertoire de projet AppHost avec la structure suivante :

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

Considérations relatives à la production

L’infrastructure générée fournit une base solide pour votre déploiement, mais les environnements de production nécessitent une configuration supplémentaire pour la sécurité, la scalabilité et la maintenance. Cette section traite des domaines clés que vous devez personnaliser lors de la préparation du déploiement de production.

Configurations de sécurité

Lors de la préparation des déploiements de production, passez en revue et améliorez l’infrastructure générée avec les contrôles de sécurité appropriés :

Isolation du réseau :

// 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'
      }
    ]
  }
}

Gestion des identités et des accès :

// 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'
  }
}

Dimensionnement et mise à l’échelle des ressources

Passez en revue les configurations de ressources générées pour connaître les exigences de production :

// 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'
              }
            }
          }
        ]
      }
    }
  }
}

Configurations spécifiques à l’environnement

Utilisez des paramètres pour gérer les paramètres spécifiques à l’environnement :

@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]

Workflow de personnalisation itérative

Après avoir généré l’infrastructure initiale, établissez un flux de travail pour la personnalisation en cours :

  1. Apportez des modifications d’infrastructure aux fichiers Bicep générés.
  2. Testez les déploiements dans les environnements de développement.
  3. Contrôle de version des modifications apportées à votre infrastructure.
  4. Personnalisations de document pour la collaboration d’équipe.

Important

Lancer azd infra gen à nouveau régénérera les fichiers et pourrait remplacer vos personnalisations. Contrôlez toujours vos modifications et préparez-vous à réinscrire les personnalisations après la régénération.

Modèles de personnalisation avancés

Définitions de ressources personnalisées

Étendre l’infrastructure générée avec des ressources supplémentaires 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
            }
          ]
        }
      ]
    }
  }
}

Validation de l’infrastructure

Ajoutez des règles de validation pour garantir une configuration appropriée des ressources :

@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

Meilleures pratiques

  • Contrôle de version : validez toujours les fichiers d’infrastructure générés dans le contrôle de code source.
  • Séparation de l’environnement : utilisez des groupes de ressources distincts et des conventions d’affectation de noms pour différents environnements.
  • Analyse de la sécurité : implémentez l’analyse automatisée de la sécurité des modèles Bicep.
  • Surveillance des coûts : configurez des alertes budgétaires et des étiquettes de ressources pour le suivi des coûts.
  • Documentation : conservez la documentation des personnalisations et leur logique.

Étapes suivantes