.NET Aspire Azure 功能集成(预览版)
重要
.NET Aspire Azure 功能集成目前处于预览状态,可能会发生变更。
Azure Functions 是一种无服务器解决方案,可用于编写更少的代码、维护更少的基础结构以及节省成本。 使用 .NET AspireAzure Functions 集成,可以在应用主机中开发、调试和协调 Azure Functions .NET 项目。
预计您已安装所需的 Azure 工具:
- 配置 Visual Studio,以便使用 .NET 进行 Azure 开发
- 使用 .NET 配置 Visual Studio Code 进行 Azure 开发
支持的方案
.NET Aspire Azure Functions 集成具有几个关键支持的场景。 本部分概述了方案,并提供与每种方法的实现相关的详细信息。
支持的触发器
下表列出了 .NET Aspire 集成中 Azure Functions 支持的触发器:
触发 | 属性 | 详情 |
---|---|---|
Azure Event Hubs 触发器 | EventHubTrigger |
📦 Aspire.托管.Azure.EventHubs |
Azure Service Bus 触发器 | ServiceBusTrigger |
📦 Aspire。托管。Azure。ServiceBus |
Azure 存储 Blob 触发器 | BlobTrigger |
📦 Aspire。托管。Azure。存储 |
Azure Storage Queues 触发器 | QueueTrigger |
📦 Aspire.托管.Azure.存储 |
HTTP 触发器 | HttpTrigger |
无需任何额外的资源依赖即可支持。 |
计时器触发器 | TimerTrigger |
无需其他资源依赖即可支持 - 依赖于隐式主机存储。 |
重要
在 .NET AspireAzure Functions 集成中,目前不支持其他 Azure 函数的触发器和绑定。
部署
目前,仅支持使用 Microsoft.Azure.Functions.Worker.Sdk
中的 SDK 容器发布函数在 Azure Container Apps (ACA) 上的容器进行部署。 此部署方法目前不支持基于 KEDA 的自动缩放。
配置外部 HTTP 终结点
若要公开访问 HTTP 触发器,请对 AzureFunctionsProjectResource调用 WithExternalHttpEndpoints API。 有关详细信息,请参阅 添加 Azure Functions 资源。
Azure 函数项目约束
.NET Aspire Azure 功能的集成具有以下项目约束:
- 必须面向 .NET 8.0 或更高版本。
- 必须使用 .NET 9 SDK。
- 它目前仅支持 隔离工作者模型的 .NET 工人。
- 需要以下 NuGet 包:
-
📦 Microsoft。Azure。Functions.Worker:使用
FunctionsApplicationBuilder
。 -
📦 Microsoft。Azure。Functions.Worker.Sdk:添加了对
dotnet run
和azd publish
的支持。 - 📦 Microsoft。Azure。Functions.Http.AspNetCore:添加 HTTP 触发器支持 API。
-
📦 Microsoft。Azure。Functions.Worker:使用
如果在 Azure Functions 项目中遇到问题,例如:
没有与项目中指定的版本匹配的函数运行时
在 Visual Studio中,尝试检查 Azure Functions 工具集是否有更新。 打开 选项 对话框,导航到 项目和解决方案,然后选择 Azure 函数。 选择“检查更新”按钮,以确保你拥有最新版本的 Azure Functions 工具:
托管集成
Azure Functions 托管集成将 Azure Functions 资源建模为 AzureFunctionsProjectResource 类型(ProjectResource的一个子类型)。 若要访问此类型和 API 并将其添加到 应用主机 项目,请安装 📦Aspire.Hosting.Azure.Functions NuGet 包。
dotnet add package Aspire.Hosting.Azure.Functions --prerelease
有关详细信息,请参阅 dotnet add package 或 管理 .NET 应用程序中的包依赖关系。
添加 Azure 函数资源
在应用主机项目中,对 builder
实例调用 AddAzureFunctionsProject 以添加 Azure Functions 资源:
var builder = DistributedApplication.CreateBuilder(args);
var functions = builder.AddAzureFunctionsProject<Projects.ExampleFunctions>("functions")
.WithExternalHttpEndpoints();
builder.AddProject<Projects.ExampleProject>()
.WithReference(functions)
.WaitFor(functions);
// After adding all resources, run the app...
当 .NET Aspire 将 Azure Functions 项目资源添加到应用主机时,如上述示例所示,则 functions
资源可以被其他项目资源引用。
WithReference 方法在名为 "functions"
的 ExampleProject
中配置连接。 如果部署了 Azure 资源并公开了 HTTP 触发器,那么由于调用了 WithExternalHttpEndpoints,其终结点将对外可见。 有关详细信息,请参阅 参考资源。
添加带有主机存储的 Azure Functions 资源
如果要修改 Azure Functions 主机使用的默认主机存储帐户,请对 Azure Functions 项目资源调用 WithHostStorage 方法:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage")
.RunAsEmulator();
var functions = builder.AddAzureFunctionsProject<Projects.ExampleFunctions>("functions")
.WithHostStorage(storage);
builder.AddProject<Projects.ExampleProject>()
.WithReference(functions)
.WaitFor(functions);
// After adding all resources, run the app...
上述代码依赖于 📦Aspire托管Azure存储 NuGet 包,以添加作为模拟器运行的 Azure 存储资源。 然后将 storage
资源传递给 WithHostStorage
API,将主机存储显式设置为模拟资源。
注意
如果不使用隐式主机存储,则必须手动将 StorageAccountContributor
角色分配给已部署实例的资源。 此角色会自动分配给隐式生成的主机存储。
Azure Functions 中的引用资源
若要在 Azure Functions 项目中引用其他 Azure 资源,请在 Azure Functions 项目资源上链接 WithReference
调用,并提供要引用的资源:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator();
var blobs = storage.AddBlobs("blobs");
builder.AddAzureFunctionsProject<Projects.ExampleFunctions>("functions")
.WithHostStorage(storage)
.WithReference(blobs);
builder.Build().Run();
前面的代码将 Azure 存储资源添加到应用主机,并在 Azure Functions 项目中引用它。 将 blobs
资源添加到 storage
资源,然后由 functions
资源引用。 连接到 blobs
资源所需的连接信息会自动注入到 Azure Functions 项目中,并使项目能够定义依赖于 blobs
资源的 BlobTrigger
。