Dela via


Konfigurera Azure Container Apps miljöer

Det är enkelt att använda någon av de stödda API:erna för att Azure Container Apps

Dessa API:er skapar automatiskt en ACA-standardmiljö när du publicerar din app. Även om den här standardkonfigurationen fungerar bra för de flesta scenarier kan du behöva anpassa ACA-miljön för att uppfylla specifika krav. För att uppnå detta, använd metoden AddAzureContainerAppEnvironment.

Aspire AppHost förenklar etableringen av infrastrukturen genom att generera kod för att skapa Azure resurser för dina program. Med den här metoden kan du modellera och konfigurera distributionsrelaterade aspekter direkt i C#, vilket minskar behovet av att förlita dig på verktyg som Bicep. Dessa aspekter omfattar konfiguration av ACA-miljöer, som tillhandahåller en serverlös plattform för att köra containerbaserade program.

Genom att använda API:erna Azure.Provisioning (beskrivs i Anpassa Azure resurser) kan du konfigurera och anpassa ACA-miljöer tillsammans med relaterade resurser, till exempel containerregister och filresursvolymer. Alla tillgängliga distributionsinställningar kan konfigureras. Mer information om tillgängliga inställningar finns i Microsoft.App managedEnvironments.

Den här artikeln vägleder dig genom processen att skräddarsy ACA-miljöer för dina Aspire lösningar.

Lägga till en ACA-miljö

Typen AzureContainerAppEnvironmentResource modellerar en ACA-miljöresurs. När du anropar metoden AddAzureContainerAppEnvironment skapas en instans av den här typen (omsluten i IResourceBuilder<T>).

var builder = DistributedApplication.CreateBuilder(args);

// By calling this API, you register that ACA environment as infrastructure 
// the AppHost owns. Any project or container resources you later publish 
// as Azure Container Apps automatically attach to this environment.
builder.AddAzureContainerAppEnvironment("aca-env");

// Omitted for brevity...but this is where you would add containers and/or 
// project resources.

builder.Build().Run();

Viktigt!

Du behöver inte använda eller behålla den returnerade builder-variabeln. Att anropa AddAzureContainerAppEnvironment registrerar helt enkelt ACA-miljön som infrastruktur som AppHost äger. Alla projekt eller containerresurser som du senare publicerar som Azure Container Apps blir automatiskt anslutna till den miljön.

Som standardinställning genererar anropet av det här API:et för att lägga till en ACA-miljö följande Bicep-modul för provisionering:

@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

Den här modulen konfigurerar:

  • En användartilldelad hanterad identitet för ACA-miljön.
  • Ett Azure containerregister (ACR) för ACA-miljön.
  • En Log Analytics-arbetsyta för ACA-miljön.
  • En Azure Container Apps miljö.
  • DashboardAspire för ACA-miljön.
  • En rolltilldelning för användarens huvudnamns-ID till ACA-miljön.
  • Olika resultat för ACA-miljön.

Med hjälp av variabeln acaEnv kan du länka ett anrop till API:et ConfigureInfrastructure för att anpassa ACA-miljön efter behov. Mer information finns i Konfigurera infrastruktur.

Hantera namngivningskonventioner

Som standard AddAzureContainerAppEnvironment använder ett annat Azure resursnamnsschema än Azure Developer CLI (azd). Om du uppgraderar en befintlig distribution som tidigare använde azd, kan du se dubbletter av Azure resurser. För att undvika det här problemet, anropa metoden WithAzdResourceNaming för att återgå till namngivningskonventionen som används av azd:

var builder = DistributionApplicationBuilder.Create(args);

builder.AddAzureContainerAppEnvironment("aca-env")
       .WithAzdResourceNaming();

// Omitted for brevity...

builder.Build().Run();

Genom att anropa det här API:et ser du till att dina befintliga Azure resurser förblir konsekventa och förhindrar duplicering.

Anpassa infrastruktur för provisionering

Alla AspireAzure resurser är underklasser av den AzureProvisioningResource typen. Detta möjliggör anpassning av den genererade Bicep genom att tillhandahålla ett fluent API för att konfigurera Azure resurser med hjälp av ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>)-API:et.

using Azure.Provisioning;
using Azure.Provisioning.AppContainers;

var builder = DistributedApplication.CreateBuilder(args);

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

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

    // Set a custom name for the environment
    containerEnvironment.Name = "my-custom-aca-environment";
    
    // Set the location
    containerEnvironment.Location = AzureLocation.EastUS;
    
    // Add tags for metadata and organization
    containerEnvironment.Tags.Add("Environment", "Production");
    containerEnvironment.Tags.Add("Project", "MyAspireApp");
    containerEnvironment.Tags.Add("Owner", "Development Team");
});

// Omitted for brevity...

builder.Build().Run();

Föregående kod:

Anmärkning

Du kan konfigurera många andra egenskaper för Container Apps-miljön med den här metoden. En fullständig lista över tillgängliga konfigurationsalternativ finns i mallreferensen Microsoft.App managedEnvironments.

Se även