지원되는 API를 사용하여 리소스를 ACA로 쉽게 게시할 수 있습니다.
- AzureContainerAppProjectExtensions.PublishAsAzureContainerApp
- AzureContainerAppContainerExtensions.PublishAsAzureContainerApp
- AzureContainerAppExecutableExtensions.PublishAsAzureContainerApp
이러한 API는 앱을 게시할 때 자동으로 기본 ACA 환경을 만듭니다. 이 기본 설정은 대부분의 시나리오에서 잘 작동하지만 특정 요구 사항을 충족하도록 ACA 환경을 사용자 지정해야 할 수 있습니다. 이를 위해 메서드를 AddAzureContainerAppEnvironment
사용합니다.
앱 호스트는.NET.NET Aspire 애플리케이션에 대한 리소스를 만드는 Azure 코드를 생성하여 인프라 프로비저닝을 간소화합니다. 이 방법을 사용하면 C#에서 직접 배포 관련 측면을 모델링하고 구성할 수 있으므로 Bicep과 같은 도구에 의존할 필요가 줄어듭니다. 이러한 측면에는 컨테이너화된 애플리케이션을 실행하기 위한 서버리스 플랫폼을 제공하는 ACA 환경 구성이 포함됩니다.
API(리소스 사용자 지정Azure에 설명됨)를 사용하여 Azure.Provisioning 컨테이너 레지스트리 및 파일 공유 볼륨과 같은 관련 리소스와 함께 ACA 환경을 구성하고 사용자 지정할 수 있습니다. 사용 가능한 모든 배포 설정을 구성할 수 있습니다. 사용 가능한 설정에 대한 자세한 내용은 Microsoft.App managedEnvironments를 참조하세요.
이 문서에서는 솔루션에 맞게 .NET.NET Aspire ACA 환경을 조정하는 프로세스를 안내합니다.
ACA 환경 추가
형식은 AzureContainerAppEnvironmentResource
ACA 환경 리소스를 모델화합니다.
AddAzureContainerAppEnvironment
메서드를 호출하면 이 형식의 인스턴스가 생성되어 IResourceBuilder<T>에 포함됩니다.
var builder = DistributedApplication.CreateBuilder(args);
var acaEnv = builder.AddAzureContainerAppEnvironment("aca-env");
// Omitted for brevity...
builder.Build().Run();
기본적으로 ACA 환경을 추가하기 위해 이 API를 호출하면 다음 프로비전 Bicep 모듈이 생성됩니다.
@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
이 모듈은 다음을 구성합니다.
- ACA 환경에 대한 사용자 할당 관리 ID입니다.
- Azure ACA 환경에 대한 ACR(Container Registry)입니다.
- ACA 환경에 대한 Log Analytics 작업 영역입니다.
- Azure Container Apps 환경입니다.
- ACA 환경에 대한 대시보드입니다..NET.NET Aspire
- ACA 환경에 대한 사용자 주체 ID의 역할 할당입니다.
- ACA 환경에 대한 다양한 출력입니다.
변수를 acaEnv
사용하여 API에 대한 호출을 연결하여 ConfigureInfrastructure ACA 환경을 원하는 대로 사용자 지정할 수 있습니다. 자세한 내용은 인프라 구성을 참조하세요.
명명 규칙을 다루기
기본적으로 AddAzureContainerAppEnvironment
azd
사용합니다. 이전에 사용한 azd
기존 배포를 업그레이드하는 경우 중복 Azure 리소스가 표시될 수 있습니다. 이 문제를 방지하려면 WithAzdResourceNaming
메서드를 호출하여 azd
에서 사용된 명명 규칙으로 되돌아가야 합니다.
var builder = DistributionApplicationBuilder.Create(args);
var acaEnv = builder.AddAzureContainerAppEnvironment("aca-env")
.WithAzdResourceNaming();
// Omitted for brevity...
builder.Build().Run();
이 API를 호출하면 기존 Azure 리소스가 일관성을 유지하고 중복을 방지할 수 있습니다.
프로비저닝 인프라 사용자 지정
모든 .NET AspireAzure 리소스는 AzureProvisioningResource 형식의 하위 클래스입니다. 이렇게 하면 Azure API를 사용하여 ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>) 리소스를 구성하는 흐름 API를 제공하여 생성된 Bicep을 사용자 지정할 수 있습니다.
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");
});
앞의 코드는 다음과 같습니다.
-
ConfigureInfrastructure API에 대한 호출을 연결합니다.
-
infra
매개 변수는 AzureResourceInfrastructure 형식의 인스턴스입니다. - 프로비전 가능한 리소스는 GetProvisionableResources() 메서드를 호출하여 검색됩니다.
- 단일 ContainerAppManagedEnvironment 리소스가 검색됩니다.
- 키 Azure Container Apps 와 값
ExampleKey
이 있는 태그가 환경 리소스에 추가Example value
됩니다.
-
참고하십시오
.NET Aspire