Freigeben über


Konfigurieren von Azure Container Apps Umgebungen

Es ist einfach, Ressourcen mithilfe einer der unterstützten APIs als Azure Container Apps (ACA) zu veröffentlichen :

Diese APIs erstellen automatisch eine Standard-ACA-Umgebung, wenn Sie Ihre App veröffentlichen. Obwohl diese Standardeinrichtung für die meisten Szenarien gut funktioniert, müssen Sie die ACA-Umgebung möglicherweise an bestimmte Anforderungen anpassen. Verwenden Sie die AddAzureContainerAppEnvironment Methode, um dies zu erreichen.

Der .NET.NET Aspire App-Host vereinfacht die Infrastrukturbereitstellung, indem Code generiert wird, um Ressourcen für Ihre Anwendungen zu erstellen Azure . Mit diesem Ansatz können Sie bereitstellungsbezogene Aspekte direkt in C# modellieren und konfigurieren, wodurch die Notwendigkeit reduziert wird, sich auf Tools wie Bicep zu verlassen. Diese Aspekte umfassen das Konfigurieren von ACA-Umgebungen, die eine serverlose Plattform für die Ausführung von containerisierten Anwendungen bieten.

Mithilfe der APIs (erläutert in Customize Azure resourcesAzure.Provisioning) können Sie ACA-Umgebungen zusammen mit verwandten Ressourcen konfigurieren und anpassen, z. B. Containerregistrierungen und Dateifreigabevolumes. Jede verfügbare Bereitstellungseinstellung kann konfiguriert werden. Weitere Informationen zu den verfügbaren Einstellungen finden Sie unter Microsoft.App managedEnvironments.

Dieser Artikel führt Sie durch den Prozess der Anpassung von ACA-Umgebungen für Ihre .NET.NET Aspire Lösungen.

Eine ACA-Umgebung hinzufügen

Der AzureContainerAppEnvironmentResource Typ modelliert eine ACA-Umgebungsressource. Wenn Sie die AddAzureContainerAppEnvironment Methode aufrufen, wird eine Instanz dieses Typs erstellt (umschlossen in der IResourceBuilder<T>).

var builder = DistributedApplication.CreateBuilder(args);

var acaEnv = builder.AddAzureContainerAppEnvironment("aca-env");

// Omitted for brevity...

builder.Build().Run();

Standardmäßig generiert der Aufruf dieser API zum Hinzufügen einer ACA-Umgebung das folgende Bicep-Bereitstellungsmodul:

@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location

param userPrincipalId string

param tags object = { }

resource aca_env_mi 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: take('aca_env_mi-${uniqueString(resourceGroup().id)}', 128)
  location: location
  tags: tags
}

resource aca_env_acr 'Microsoft.ContainerRegistry/registries@2023-07-01' = {
  name: take('acaenvacr${uniqueString(resourceGroup().id)}', 50)
  location: location
  sku: {
    name: 'Basic'
  }
  tags: tags
}

resource aca_env_acr_aca_env_mi_AcrPull 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(aca_env_acr.id, aca_env_mi.id, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d'))
  properties: {
    principalId: aca_env_mi.properties.principalId
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')
    principalType: 'ServicePrincipal'
  }
  scope: aca_env_acr
}

resource aca_env_law 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
  name: take('acaenvlaw-${uniqueString(resourceGroup().id)}', 63)
  location: location
  properties: {
    sku: {
      name: 'PerGB2018'
    }
  }
  tags: tags
}

resource aca_env 'Microsoft.App/managedEnvironments@2024-03-01' = {
  name: take('acaenv${uniqueString(resourceGroup().id)}', 24)
  location: location
  properties: {
    appLogsConfiguration: {
      destination: 'log-analytics'
      logAnalyticsConfiguration: {
        customerId: aca_env_law.properties.customerId
        sharedKey: aca_env_law.listKeys().primarySharedKey
      }
    }
    workloadProfiles: [
      {
        name: 'consumption'
        workloadProfileType: 'Consumption'
      }
    ]
  }
  tags: tags
}

resource aspireDashboard 'Microsoft.App/managedEnvironments/dotNetComponents@2024-10-02-preview' = {
  name: 'aspire-dashboard'
  properties: {
    componentType: 'AspireDashboard'
  }
  parent: aca_env
}

resource aca_env_Contributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(aca_env.id, userPrincipalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c'))
  properties: {
    principalId: userPrincipalId
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
  }
  scope: aca_env
}

output MANAGED_IDENTITY_NAME string = aca_env_mi.name

output MANAGED_IDENTITY_PRINCIPAL_ID string = aca_env_mi.properties.principalId

output AZURE_LOG_ANALYTICS_WORKSPACE_NAME string = aca_env_law.name

output AZURE_LOG_ANALYTICS_WORKSPACE_ID string = aca_env_law.id

output AZURE_CONTAINER_REGISTRY_NAME string = aca_env_acr.name

output AZURE_CONTAINER_REGISTRY_ENDPOINT string = aca_env_acr.properties.loginServer

output AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID string = aca_env_mi.id

output AZURE_CONTAINER_APPS_ENVIRONMENT_NAME string = aca_env.name

output AZURE_CONTAINER_APPS_ENVIRONMENT_ID string = aca_env.id

output AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN string = aca_env.properties.defaultDomain

Dieses Modul konfiguriert:

  • Eine vom Benutzer zugewiesene verwaltete Identität für die ACA-Umgebung.
  • Eine Azure Container Registry (ACR) für die ACA-Umgebung.
  • Ein Log Analytics-Arbeitsbereich für die ACA-Umgebung.
  • Eine Azure Container Apps-Umgebung.
  • Das .NET.NET Aspire Dashboard für die ACA-Umgebung.
  • Eine Rollenzuweisung für die Benutzerprinzipal-ID in der ACA-Umgebung.
  • Verschiedene Ausgaben für die ACA-Umgebung.

Mithilfe der acaEnv Variablen können Sie einen Aufruf der ConfigureInfrastructure API verketten, um die ACA-Umgebung nach Ihren Wünschen anzupassen. Weitere Informationen finden Sie unter Konfigurieren der Infrastruktur.

Umgang mit Benennungskonventionen

Verwendet standardmäßig AddAzureContainerAppEnvironment ein anderes Azure Ressourcenbenennungsschema als das Azure Developer CLI (azd). Wenn Sie eine vorhandene Bereitstellung aktualisieren, die zuvor azd verwendet hat, werden möglicherweise doppelte Azure Ressourcen angezeigt. Um dieses Problem zu vermeiden, rufen Sie die WithAzdResourceNaming-Methode auf, um zur von azd verwendeten Benennungskonvention zurückzukehren.

var builder = DistributionApplicationBuilder.Create(args);

var acaEnv = builder.AddAzureContainerAppEnvironment("aca-env")
                    .WithAzdResourceNaming();

// Omitted for brevity...

builder.Build().Run();

Durch Aufrufen dieser API wird sichergestellt, dass Ihre vorhandenen Azure Ressourcen konsistent bleiben und Duplizierungen verhindert werden.

Bereitstellungsinfrastruktur anpassen

Alle .NET AspireAzure Ressourcen sind Unterklassen des AzureProvisioningResource Typs. Dadurch wird die Anpassung des generierten Bicep ermöglicht, indem eine Fluent-API bereitgestellt wird, die es ermöglicht, die Azure-Ressourcen mithilfe der ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>)-API zu konfigurieren.

var builder = DistributionApplicationBuilder.Create(args);

var acaEnv = builder.AddAzureContainerAppEnvironment(Config.ContainEnvironmentName);

acaEnv.ConfigureInfrastructure(config =>
{
    var resources = config.GetProvisionableResources();
    var containerEnvironment = resources.OfType<ContainerAppManagedEnvironment>().FirstOrDefault();

    containerEnvironment.Tags.Add("ExampleKey", "Example value");
});

Der vorherige Code:

Siehe auch