本地 Azure 预配置
.NET .NET Aspire 使用其引人注目的应用主机模型简化了本地云原生应用开发。 使用此模型,可以使用与 Azure相同的配置和服务在本地运行应用。 本文介绍如何通过 .NET.NET Aspire 应用主机从本地开发环境预配 Azure 资源。
注意
为了清楚起见,资源在 Azure中预配,但预配过程是从本地开发环境启动的。 若要优化本地开发体验,请考虑在可用时使用模拟器或容器。 有关详细信息,请参阅 典型的开发人员体验。
要求
本文假定你有一个 Azure 帐户和订阅。 如果没有 Azure 帐户,可以在 Azure 免费帐户创建一个免费帐户。 若要使预配功能正常工作,需要使用 Azure进行身份验证。 确保已安装 Azure Developer CLI。 此外,需要提供一些配置值,以便预配逻辑可以代表你创建资源。
应用宿主配置 API
应用主机提供一组 API 来表达 Azure 资源。 这些 API 可用作托管库 .NET AspireAzure 中的扩展方法,从而扩展 IDistributedApplicationBuilder 接口。 将 Azure 资源添加到应用主机时,它们将隐式添加适当的预配功能。 换句话说,无需直接调用任何预配 API。
应用主机启动时,将执行以下预配逻辑:
-
Azure
配置部分已经验证。 - 当仪表板和应用主机输出无效时,会提示缺少的内容。 有关详细信息,请参阅 缺少配置值提示。
- 在有条件地预配有效 Azure 资源时:
- 如果给定资源的 Azure 部署不存在,则会创建并配置该部署。
- 上述部署的配置带有一个校验和,这是为了仅在必要时支持资源预配而采取的措施。
使用现有 Azure 资源
应用主机会自动管理 Azure 资源的分配。 首次运行应用主机时,它会预配应用主机中指定的资源。 除非应用主机配置发生更改,否则后续运行不会再次预配资源。
如果已在应用主机外部预配了 Azure 资源并想要使用这些资源,则可以使用 AddConnectionString API 提供连接字符串,如以下 Azure Key Vault 示例所示:
// Service registration
var secrets = builder.ExecutionContext.IsPublishMode
? builder.AddAzureKeyVault("secrets")
: builder.AddConnectionString("secrets");
// Service consumption
builder.AddProject<Projects.ExampleProject>()
.WithReference(secrets)
前面的代码片段演示如何将 Azure Key Vault 添加到应用主机。
AddAzureKeyVault API 用于将 Azure Key Vault 添加到应用主机。
AddConnectionString
API 用于向应用主机提供连接字符串。
或者,对于某些 Azure 资源,可以选择使用 RunAsEmulator
API 将其作为模拟器运行。 此 API 可用于 Azure Cosmos DB 和 Azure 存储 集成。 例如,若要以模拟器的形式运行 AzureAzure Cosmos DB,可以使用以下代码片段:
var cosmos = builder.AddAzureCosmosDB("cosmos")
.RunAsEmulator();
RunAsEmulator API 将 Azure Cosmos DB 资源配置为使用具有 NoSQL API 的 Azure Cosmos DB 模拟器进行模拟。
.NET Aspire Azure 托管集成
如果您在应用主机中使用 Azure 资源,说明您使用了一个或多个 .NET AspireAzure 托管集成。 这些托管库为 IDistributedApplicationBuilder 接口提供扩展方法,以将 Azure 资源添加到应用主机。
配置
在本地开发环境中利用 Azure 资源时,需要提供必要的配置值。 配置值在 Azure
节下指定:
-
SubscriptionId
:Azure 订阅 ID。 -
AllowResourceGroupCreation
:指示是否创建新资源组的布尔值。 -
ResourceGroup
:要使用的资源组的名称。 -
Location
:要使用的 Azure 区域。
请考虑以下示例 appsettings.json 配置:
{
"Azure": {
"SubscriptionId": "<Your subscription id>",
"AllowResourceGroupCreation": true,
"ResourceGroup": "<Valid resource group name>",
"Location": "<Valid Azure location>"
}
}
重要
建议将这些值存储为应用机密。 有关详细信息,请参阅 管理应用机密。
配置必要的值后,可以开始在本地开发环境中预配 Azure 资源。
Azure 预配凭据存储
.NET Aspire 应用主机使用凭据存储来认证和授权 Azure 资源。 根据订阅的不同,多租户预配方案可能需要正确的凭据存储。
安装了 📦Aspire托管Azure 的 NuGet 包后,如果您的应用主机依赖于 Azure 资源,则默认的 Azure 凭据存储依赖于 DefaultAzureCredential。 若要更改此行为,可以在 appsettings.json 文件中设置凭据存储值,如以下示例所示:
{
"Azure": {
"CredentialSource": "AzureCli"
}
}
与所有基于 配置的设置一样,可以使用替代提供程序(例如 用户机密 或 环境变量)来配置这些设置。
Azure:CredentialSource
值可以设置为以下值之一:
- 将委托
AzureCli
给AzureCliCredential。 -
AzurePowerShell
:指派至AzurePowerShellCredential。 -
VisualStudio
委托给 VisualStudioCredential。 -
VisualStudioCode
:委托给 VisualStudioCodeCredential。 -
AzureDeveloperCli
:委托给 AzureDeveloperCliCredential。 -
InteractiveBrowser
:委派给 InteractiveBrowserCredential。
提示
要了解更多关于
工具支持
在 Visual Studio中,可以使用连接服务配置默认 Azure 预配设置。 选择应用主机项目,右键单击 连接服务 节点,然后选择 Azure 资源预配设置:
这将打开一个对话框,可在其中配置 Azure 预配设置,如以下屏幕截图所示:
缺少配置值提示
当缺少 Azure
配置部分、缺少值或无效时,.NET.NET Aspire 仪表板 提供了有用的提示。 例如,考虑一个应用主机,它缺少 SubscriptionId
配置值并正在尝试使用 Azure Key Vault 资源。
资源 页显示 状态 为 缺少订阅配置:
此外,控制台日志 也会显示此信息,请查看以下屏幕截图:
已知限制
以这种方式预配 Azure 资源后,必须手动清理 Azure 门户中的资源,因为 .NET Aspire 不提供用于删除 Azure 资源的内置机制。 实现此目的的最简单方法是删除配置的资源组。 这可以在 Azure 门户 或使用 Azure CLI 完成。
az group delete --name <ResourceGroupName>
将 <ResourceGroupName>
替换为要删除的资源组的名称。 有关详细信息,请参阅 az group delete。