Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det är enkelt att använda någon av de stödda API:erna för att Azure Container Apps
- AzureContainerAppProjectExtensions.PublishAsAzureContainerApp
- AzureContainerAppContainerExtensions.PublishAsAzureContainerApp
- AzureContainerAppExecutableExtensions.PublishAsAzureContainerApp
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:
- Kedjar ett anrop till ConfigureInfrastructure-API:et:
- Parametern
infraär en instans av den AzureResourceInfrastructure typen. - De tillgängliga resurserna hämtas genom att anropa GetProvisionableResources()-metoden.
- Den enda ContainerAppManagedEnvironment resursen har hämtats.
- Miljönamnet är inställt på ett anpassat värde i stället för att använda det automatiskt genererade namnet.
- Platsen är uttryckligen satt till "Östra USA".
- Flera taggar läggs till för miljömetadata och organisation.
- Parametern
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
- översikt över AspireAzure integreringar
- Azure Container Apps överblick