含まれるもの: ホスティング統合のみ —
Client 統合は含まれません
Von Bedeutung
.NET Aspire Azure Container Registry の統合は現在プレビュー段階であり、変更される可能性があります。
Azure Container Registry (ACR) は、コンテナー イメージのストレージ、管理、デプロイを簡略化するマネージド Docker コンテナー レジストリ サービスです。 .NET Aspire統合を使用すると、既存のAzure Container Registry をプロビジョニングまたは参照し、アプリのコンピューティング環境とシームレスに統合できます。
概要
.NET .NET Aspire 多くの場合、アプリはコンテナー イメージをローカルでビルドして実行しますが、ステージング環境と運用環境ではセキュリティで保護されたレジストリが必要です。 Azure Container Registry 統合には、次の機能があります。
- 既存の Azure Container Registry をプロビジョニングまたは参照します。
- 適切な資格情報フローを確保するために、任意のコンピューティング環境リソース ( Azure Container Apps、 Docker、 Kubernetesなど) にレジストリをアタッチします。
- 他の Azure リソースに、きめ細かい ACR ロールの割り当てを付与します。
サポートされているシナリオ
Azure Container Registry 統合では、次のシナリオがサポートされています。
- 新しいレジストリのプロビジョニング: アプリの新しい Azure Container Registry を自動的に作成します。
- 既存のレジストリの参照: 名前とリソース グループを指定して、既存の Azure Container Registry を使用します。
- 資格情報管理: セキュリティで保護されたイメージ プルのために、コンピューティング環境に資格情報を自動的にフローします。
-
ロールの割り当て: 特定のロール (
AcrPush
など) を割り当てて、サービスがイメージをレジストリにプッシュできるようにします。
ホスティング統合
Azure Container Registry 統合は、.NET Aspire ホスティング モデルの一部です。 これにより、宣言型の方法でアプリのリソースを定義および管理できます。 統合はAspire NuGet パッケージAzureで利用可能です。
dotnet add package Aspire.Hosting.Azure.ContainerRegistry
詳細については、「dotnet でのパッケージの追加」または「.NET アプリケーションでのパッケージの依存関係の管理」を参照してください。
新しいコンテナー レジストリをプロビジョニングする
次の例では、新しい Azure Container Registry をプロビジョニングし、コンテナー アプリ環境にアタッチする方法を示します。
using Azure.Provisioning.ContainerRegistry;
var builder = DistributedApplication.CreateBuilder(args);
// Add (or reference) the registry
var acr = builder.AddAzureContainerRegistry("my-acr");
// Wire an environment to that registry
builder.AddAzureContainerAppEnvironment("env")
.WithAzureContainerRegistry(acr);
builder.Build().Run();
前述のコード:
-
Azureという名前の新しい
my-acr
コンテナー レジストリを作成します。 - レジストリを Azure Container Apps という名前の
env
環境にアタッチします。 - 必要に応じて、
AcrPush
という名前のプロジェクト リソースにapi
ロールを付与し、レジストリにイメージをプッシュできるようにします。
詳細については、Azure Container Appsを参照してください。
Von Bedeutung
AddAzureContainerRegistry
またはAddAzureContainerAppEnvironment
を呼び出すと、暗黙的にべき等AddAzureProvisioningが呼び出されます。これによって、アプリの起動時にAzureリソースを動的に生成するためのサポートが追加されます。 アプリは、適切なサブスクリプションと場所を構成する必要があります。 詳細については、「 ローカル プロビジョニング: 構成」を参照してください。
プロビジョニングによって生成されたBicep
Bicep を初めて使う場合、これは Azure リソースを定義するためのドメイン固有の言語です。 .NET .NET Aspireでは、Bicep を手動で記述する必要はありません。代わりに、プロビジョニング API によって Bicep が生成されます。 アプリを発行すると、生成された Bicep がマニフェスト ファイルと共に出力されます。 Azure Container Registry リソースを追加すると、次の Bicep が生成されます。
@description('The ___location for the resource(s) to be deployed.')
param ___location string = resourceGroup().___location
resource my_acr 'Microsoft.ContainerRegistry/registries@2023-07-01' = {
name: take('myacr${uniqueString(resourceGroup().id)}', 50)
___location: ___location
sku: {
name: 'Basic'
}
tags: {
'aspire-resource-name': 'my-acr'
}
}
output name string = my_acr.name
output loginServer string = my_acr.properties.loginServer
上記の Bicep は、 Azure Container Registry リソースをプロビジョニングします。 さらに、追加された Azure Container App 環境リソースも生成されます。
@description('The ___location for the resource(s) to be deployed.')
param ___location string = resourceGroup().___location
param userPrincipalId string
param tags object = { }
param my_acr_outputs_name string
resource env_mi 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: take('env_mi-${uniqueString(resourceGroup().id)}', 128)
___location: ___location
tags: tags
}
resource my_acr 'Microsoft.ContainerRegistry/registries@2023-07-01' existing = {
name: my_acr_outputs_name
}
resource my_acr_env_mi_AcrPull 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(my_acr.id, env_mi.id, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d'))
properties: {
principalId: env_mi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')
principalType: 'ServicePrincipal'
}
scope: my_acr
}
resource env_law 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
name: take('envlaw-${uniqueString(resourceGroup().id)}', 63)
___location: ___location
properties: {
sku: {
name: 'PerGB2018'
}
}
tags: tags
}
resource env 'Microsoft.App/managedEnvironments@2024-03-01' = {
name: take('env${uniqueString(resourceGroup().id)}', 24)
___location: ___location
properties: {
appLogsConfiguration: {
destination: 'log-analytics'
logAnalyticsConfiguration: {
customerId: env_law.properties.customerId
sharedKey: 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: env
}
resource env_Contributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(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: env
}
output MANAGED_IDENTITY_NAME string = env_mi.name
output MANAGED_IDENTITY_PRINCIPAL_ID string = env_mi.properties.principalId
output AZURE_LOG_ANALYTICS_WORKSPACE_NAME string = env_law.name
output AZURE_LOG_ANALYTICS_WORKSPACE_ID string = env_law.id
output AZURE_CONTAINER_REGISTRY_NAME string = my_acr_outputs_name
output AZURE_CONTAINER_REGISTRY_ENDPOINT string = my_acr.properties.loginServer
output AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID string = env_mi.id
output AZURE_CONTAINER_APPS_ENVIRONMENT_NAME string = env.name
output AZURE_CONTAINER_APPS_ENVIRONMENT_ID string = env.id
output AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN string = env.properties.defaultDomain
生成された Bicep は開始点であり、C# のプロビジョニング インフラストラクチャへの変更の影響を受ける。 Bicep ファイルのカスタマイズは直接上書きされるため、C# プロビジョニング API を通じて変更を加えて、生成されたファイルに反映されるようにします。
既存のコンテナー レジストリを参照する
既存の Azure Container Registry を参照するには、レジストリ名とリソース グループで PublishAsExisting メソッドを使用します。
var builder = DistributedApplication.CreateBuilder(args);
var registryName = builder.AddParameter("registryName");
var rgName = builder.AddParameter("rgName");
// Add (or reference) the registry
var acr = builder.AddAzureContainerRegistry("my-acr")
.PublishAsExisting(registryName, rgName);
// Wire an environment to that registry
builder.AddAzureContainerAppEnvironment("env")
.WithAzureContainerRegistry(acr);
builder.Build().Run();
前述のコード:
- 指定したリソース グループ内の Azure という名前の既存の
my-acr
Container Registry を参照します。 - レジストリを Azure Container Apps という名前の
env
環境にアタッチします。 - パラメーターを使用して、レジストリ名とリソース グループの動的な構成を許可します。
- 必要に応じて、
AcrPush
という名前のプロジェクト リソースにapi
ロールを付与し、レジストリにイメージをプッシュできるようにします。
主な機能
資格情報の自動フロー
Azure Container Registry をコンピューティング環境にアタッチすると、Aspireは、セキュリティで保護されたイメージ プルで正しい資格情報が使用できることを自動的に確認します。
きめ細かいロールの割り当て
特定のロールを Azure リソースに割り当てて、コンテナー レジストリへのアクセスを制御できます。 たとえば、 AcrPush
ロールを使用すると、サービスはイメージをレジストリにプッシュできます。
builder.AddProject("api", "../Api/Api.csproj")
.WithRoleAssignments(acr, ContainerRegistryBuiltInRole.AcrPush);
こちらも参照ください
.NET Aspire