共用方式為


.NET .NET Aspire 9.0 的新功能

9.0 是 的下一個重大上市發行版(GA)。它支援和

  • .NET 8.0 長期支援 (LTS)
  • .NET 9.0 標準術語支援 (STS)。

注意

您可以使用 .NET Aspire 9.0 搭配 .NET 8 或 .NET 9!

此版本可解決社群中一些最要求的功能和痛點。 最好的功能是社群驅動! 若要加入社群,請造訪我們 Discord 與小組成員聊天,並與我們在 GitHub上共同作業。

如需官方 .NET 版本和 .NET Aspire 版本支援的詳細資訊,請參閱:

升級至 .NET.NET Aspire 9

若要從舊版的 .NET Aspire 升級至 .NET Aspire 9,請遵循官方 升級至 .NET.NET Aspire 9 指南中的指示。 本指南提供如何將現有 .NET Aspire 解決方案升級至 .NET Aspire 9 的詳細指示。 不論您是手動執行還是使用升級助理,這個指南都能讓過程變得簡單快捷。

工具優化

.NET Aspire 9 可讓您更輕鬆地設定環境來開發 .NET Aspire 應用程式。 您不再需要 .NET 工作負載。 相反地,您會將新的 .NET.NET Aspire SDK 安裝到 .NET.NET Aspire 解決方案的應用程式主機專案中。 如需詳細資訊,請參閱 .NET.NET Aspire 安裝和工具

範本已移動

.NET .NET Aspire 9 會將原本透過工作環境安裝的內容移至獨立的 NuGet 套件。 這包括建立新 .NET.NET Aspire 項目和解決方案的範本。 這些範本是使用 dotnet new install 命令安裝。 您可以執行下列命令來安裝這些專案:

dotnet new install Aspire.ProjectTemplates::9.0.0

提示

如果您已安裝 .NET.NET Aspire 工作負載,則必須傳遞 --force 旗標來覆寫現有的範本。 您可以隨意卸載 .NET.NET Aspire 工作負載。

如需詳細資訊,請參閱 範本。

儀錶板 UX 增強功能和新的互動功能

.NET .NET Aspire 控制面板 會隨著每個版本不斷改進。

管理資源生命週期

儀錶板最要求的功能是管理所協調具名資源的生命週期。 具體而言,能夠停止、啟動和重新啟動資源。 此功能適用於專案、容器和可執行檔。 它可讓您重新啟動個別資源,而不需要重新啟動整個應用程式主機。 針對項目資源,附加調試程式時,會在重新啟動時重新附加。 如需詳細資訊,請參閱 .NET.NET Aspire 儀錶板:停止或啟動資源

行動裝置和回應式支援

.NET Aspire 儀錶板現在已具備行動裝置的友好介面,能靈活響應各種螢幕大小,並支持 .NET Aspire 應用程式的即時管理,方便隨時隨地操作。 已進行其他輔助功能改善,包括顯示行動裝置上的設定和內容溢位。

資源詳細信息中的敏感屬性、容量和健康檢查

資源詳細資料的顯示包含數項改善:

  • 屬性可以標示為敏感性,並在儀錶板 UI 中自動遮罩它們。 這項安全性功能有助於避免在與其他人共用儀錶板時意外洩漏密鑰或密碼。 例如,容器自變數可以傳遞敏感性資訊,因此預設會遮罩。

  • 已設定的容器磁碟區會列在資源詳細數據中。

  • .NET .NET Aspire 9 新增健康檢查的支援。 這些檢查的詳細資訊現在可以在 [資源詳細數據] 窗格中檢視,其中顯示資源可能標示為狀況不良或降級的原因。 在這裡深入瞭解健康情況檢查

彩色主控台記錄

ANSI 控制碼 格式化終端機中的文字,通過控制色彩(前景和背景)以及樣式如粗體、底線和斜體。 先前,儀錶板的控制台記錄頁面一次只能渲染一個 ANSI 轉義碼,當多個轉義碼結合使用時就會失敗。 例如,它可以顯示紅色文字,但不能顯示紅色和粗體文字。

@mangeg 社群成員貢獻,改善了對 ANSI 逸出碼的支援度,並移除了這項限制。

彩色控制台記錄

主控台記錄的另一項改進是隱藏不支援的逸出碼。 與顯示文字無關的程式代碼,例如定位游標或與操作系統通訊的,因在此UI中沒有意義而被隱藏。

遙測以使用者為中心的功能新增

遙測 仍然是 .NET.NET Aspire的重要層面。 .NET .NET Aspire 9 中,遙測服務引進了許多新功能。

已改善遙測篩選

可以使用屬性值篩選追蹤。 例如,如果您只想檢視應用程式中一個端點的追蹤,HTTP 要求上的 http.route 屬性可以篩選為指定的值。

遙測篩選還支援對現有值的自動填寫功能。 [[添加篩選] 對話方塊提供下拉選單,讓您可從儀錶板的可用數值中選取。 這項功能可讓您更輕鬆地篩選實際數據,並自行輸入值來協助避免錯字。

如需更詳細的資訊,請參閱 .NET.NET Aspire 儀錶板:篩選追蹤

結合多個來源的遙測数据

當資源有多個複本時,您現在可以篩選遙測,以一次檢視所有實例的數據。 選取標示為 (application)的父資源。 如需詳細資訊,請參閱 .NET.NET Aspire 儀錶板:結合多個資源的遙測

瀏覽器遙測支援

儀錶板支援在 HTTP 上的 OpenTelemetry 通訊協定 (OTLP) 和跨來源資源共享 (CORS)。 這些功能可解除鎖定將 OpenTelemetry 從瀏覽器應用程式傳送至 .NET Aspire 儀錶板的功能。

例如,瀏覽器型單頁應用程式 (SPA) 可以設定 JavaScript OpenTelemetry SDK,以將瀏覽器中建立的結構化記錄、追蹤和計量傳送至儀錶板。 瀏覽器遙測會與 server 遙測一起顯示。

追蹤詳細頁面使用瀏覽器遙測功能

如需設定瀏覽器遙測的詳細資訊,請參閱 啟用瀏覽器遙測 檔。

應用程式主機(編排)

.NET .NET Aspire 應用程式主機.NET.NET Aspire最重要的 功能之一。 在 .NET.NET Aspire 9 中,應用程式主機已新增數個特定的新功能。

等候依賴關係

如果您一直在追蹤 .NET.NET Aspire,那麼您應該已經知道,應用程式宿主專案是您定義應用程式模型的地方。 您可以建立分散式應用程式產生器、新增和設定資源,以及表達其相依性。 現在,您可以設定資源應該 等候 另一個資源才開始。 這可協助避免在啟動時發生連線錯誤,方法是只在相依性「就緒」時啟動資源。

var builder = DistributedApplication.CreateBuilder(args);

var rabbit = builder.AddRabbitMQ("rabbit");

builder.AddProject<Projects.WebApplication1>("api")
       .WithReference(rabbit)
       .WaitFor(rabbit); // Don't start "api" until "rabbit" is ready...

builder.Build().Run();

當應用程式主機啟動時,它會等候 rabbit 資源準備好,再啟動 api 資源。

有兩種方法可用來等待資源:

  • WaitFor:等候資源準備好再啟動另一個資源。
  • WaitForCompletion:等候資源完成再啟動另一個資源。

如需詳細資訊,請參閱 .NET.NET Aspire 應用程式主機:等候資源

資源健康狀況檢查

WaitFor API 會使用標準 .NET 健康狀態檢查 來判斷資源是否已就緒。 但「資源已準備好」是什麼意思? 使用者可以自行設定比預設值更高的配置,這是最棒的部分。

當資源未公開任何健康狀態檢查時,應用程式主機會在啟動相依資源之前,等候資源處於 Running 狀態。

對於公開 HTTP 端點的資源,您可以輕鬆地新增健康檢查,以輪詢特定路徑以獲得 HTTP 200 回應。

var builder = DistributedApplication.CreateBuilder(args);

var catalogApi = builder.AddContainer("catalog-api", "catalog-api")
                        .WithHttpEndpoint(targetPort: 8080)
                        .WithHttpHealthCheck("/health");

builder.AddProject<Projects.WebApplication1>("store")
       .WithReference(catalogApi.GetEndpoint("http"))
       .WaitFor(catalogApi);

builder.Build().Run();

上述範例會將健康情況檢查新增至 catalog-api 資源。 應用程式主機會等待健康檢查傳回健康狀態,然後再啟動 store 資源。 它會判斷當 /health 端點傳回 HTTP 200 狀態代碼時,資源已就緒。

store 正在等待 catalog-api 變成狀況良好時,儀錶板中的資源會顯示為:

開始 之前等待狀況不良的資源

應用程式主機的健康情況檢查機制是以來自 Microsoft.Extensions.Diagnostics.HealthChecks 命名空間的 IHealthChecksBuilder 實作為基礎而建置。

健康檢查報表數據顯示在儀錶板中:

儀錶板資源詳細數據檢視中的健康情況檢查詳細數據

建立自訂健康檢查很簡單。 首先,定義健康檢查,然後將其名稱與應用到的資源關聯。

var builder = DistributedApplication.CreateBuilder(args);

var healthyAfter = DateTime.Now.AddSeconds(20);

builder.Services.AddHealthChecks().AddCheck(
    "delay20secs",
    () => DateTime.Now > healthyAfter 
        ? HealthCheckResult.Healthy() 
        : HealthCheckResult.Unhealthy()
    );

var cache = builder.AddRedis("cache")
                   .WithHealthCheck("delay20secs");

builder.AddProject<Projects.MyApp>("myapp")
       .WithReference(cache)
       .WaitFor(cache);

上述範例會將健康檢查加入至 cache 資源,在應用程式主機啟動後的前 20 秒,會報告其為不健康。 因此,myapp 資源會在開始前等候 20 秒,確保 cache 資源狀況良好。

AddCheckWithHealthCheck 方法提供簡單的機制來建立健康情況檢查,並將其與特定資源產生關聯。

永續性容器

應用程式主機現在支援 持續性 容器。 持續性容器的容器生命週期偏離了 .NET.NET Aspire 協調應用程式的典型模式,。 雖然它們 建立.NET Aspire 協調器開始(當尚未可用時),但 .NET Aspire不會終結它們。

當您想要在應用程式主機停止之後,讓容器繼續執行時,這非常有用。

重要

若要刪除這些容器,您必須使用容器運行時間手動停止這些容器。

若要定義具有永續性存留期的 IResourceBuilder<ContainerResource>,請呼叫 WithLifetime 方法並傳入 ContainerLifetime.Persistent

var builder = DistributedApplication.CreateBuilder(args);

var queue = builder.AddRabbitMQ("rabbit")
                   .WithLifetime(ContainerLifetime.Persistent);

builder.AddProject<Projects.WebApplication1>("api")
       .WithReference(queue)
       .WaitFor(queue);

builder.Build().Run();

儀表板會顯示帶有圖釘圖示的永久性容器:

持續性容器

應用程式主機停止之後,容器會繼續執行:

Docker 桌面顯示 RabbitMQ。

容器持續性機制會嘗試識別何時可能想要重新建立容器。 例如,如果容器的環境變更,則容器會重新啟動,如此一來,如果資源的輸入組態已變更,就不需要手動停止容器。

資源命令

應用程式主機支援將自定義命令新增至資源。 當您想要新增應用程式主機原本不支援的自定義功能時,這會很有用。 可能會有許多機會在資源上公開自定義擴充方法會很有用。 .NET .NET Aspire Community Toolkit 可能是分享這些擴充功能的好平台。

當您定義自定義命令時,其可在儀錶板中做為用戶體驗功能使用。

重要

這些 .NET.NET Aspire 儀錶板命令只能在本機執行儀錶板時使用。 在 Azure Container Apps中執行儀錶板時無法使用。

如需建立自定義資源命令的詳細資訊,請參閱 操作說明:在 .NET.NET Aspire中建立自定義資源命令。

容器網路

應用程式主機現在會將所有容器新增至名為 default-aspire-network的通用網路。 當您想要在容器之間通訊而不經過主機網路時,這非常有用。 這也可讓您更輕鬆地從 docker 撰寫移轉至應用程式主機,因為容器可以使用容器名稱彼此通訊。

事件模型

事件模型可讓開發人員連結至應用程式和資源的生命週期。 這對於在應用程式生命週期中的特定點執行自定義程式代碼很有用。 有多種方式可以訂閱事件,包括全域事件和針對每個資源的事件。

全域事件:

  • BeforeStartEvent:在應用程式啟動之前觸發的事件。 這是觀察到應用程式模型變更的最後一個位置。 這會在「執行」和「發佈」模式中執行。 這是封鎖事件,這表示應用程式在完成所有處理程式之前不會啟動。
  • AfterResourcesCreatedEvent:建立資源之後觸發的事件。 僅在執行模式下運行。
  • AfterEndpointsAllocatedEvent:在為所有資源配置完端點後觸發的事件。 這只能在執行模式下運行。

全域事件類似於應用程式主機生命週期事件。 如需詳細資訊,請參閱應用程式主機生命週期。

每個資源事件:

  • BeforeResourceStartedEvent:在單一資源啟動之前觸發的事件。 此功能僅在運行模式下運作。 這是封鎖事件,這表示資源要等到所有處理程式完成才會啟動。
  • ConnectionStringAvailableEvent:當連接字串可供資源使用時觸發的事件。 僅在執行模式下運行。
  • ResourceReadyEvent:當資源準備好使用時觸發的事件。 僅在執行模式下運行。

如需詳細資訊,請參閱 中的 事件。

系統整合

.NET .NET Aspire 會繼續新增整合,讓您輕鬆開始使用您慣用的服務與工具。 如需詳細資訊,請參閱 .NET.NET Aspire 整合概觀

Redis Insight

支持 Redis Insights 現已在 Redis 資源上提供。

var builder = DistributedApplication.CreateBuilder(args);

builder.AddRedis("redis")
       .WithRedisInsight(); // Starts a Redis Insight container image
                            // that is pre-configured to work with the
                            // Redis instance.

WithRedisInsight 擴充方法可以套用至多個 Redis 資源,而且每個資源都會顯示在 Redis Insight 儀錶板上。

Redis 洞察儀表板,其中顯示多個 Redis 實例

如需詳細資訊,請參閱 新增 Redis 資源並使用 Redis Insights

OpenAI (預覽)

從 .NET Aspire 9 開始,有額外的 OpenAI 整合,允許直接使用最新的官方 OpenAI dotnet 函式庫。 client 整合會將 OpenAIClient 註冊為服務集合中的單一服務。 client 可用來與 OpenAIREST API 互動。

此外,已強化 .NET AspireAzureOpenAI 整合,以便靈活地配置 OpenAIClient 無論是用於 Azure AI OpenAI 服務還是專用的 OpenAIREST API,利用新 AddOpenAIClientFromConfiguration(IHostApplicationBuilder, String) 構建方法。 下列範例會偵測連接字串是否為 AzureAzure AI OpenAI 服務,並自動註冊最適當的 OpenAIClient 實例。

builder.AddOpenAIClientFromConfiguration("openai");

例如,如果 openai 連線看起來像 Endpoint=https://{account}.azure.com;Key={key};,它會猜測因為網域名稱而可以註冊 Azure AI OpenAIclient。 否則會使用常見的 OpenAIClient

如需詳細資訊,請參閱 Azure-agnostic client 解析

MongoDB

已新增功能,可在使用 AddMongoDB(IDistributedApplicationBuilder, String, Nullable<Int32>, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>) 擴充方法時指定 MongoDB 用戶名稱和密碼。 如果未指定,則會產生隨機的使用者名稱和密碼,但可以使用參數資源手動指定。

var builder = DistributedApplication.CreateBuilder(args);

var username = builder.AddParameter("mongousername");
var password = builder.AddParameter("mongopassword", secret: true);

var db = builder.AddMongo("db", username, password);

重要 Azure 改善

以下各節描述 .NET Aspire 9 中新增的 Azure 改進。 如需查閱全部重大變更的清單,請參閱 9中的 重大變更。

Azure 資源自定義

在 .NET Aspire 8 中,自訂 Azure 資源被標示為實驗性的狀態,因為基礎的 Azure.Provisioning 函式庫是新的,因此會收集使用者意見,以便將來能標示為穩定。 在 .NET.NET Aspire 9 中,這些 API 已更新並移除實驗屬性。

Azure 資源命名重大變更

作為更新 Azure.Provisioning 函式庫的一部分,Azure 資源的預設命名方案已經改進,以便更好地支援各種命名政策。 不過,此更新會導致資源命名方式變更。 新的命名原則可能會導致現有的 Azure 資源被放棄,並在將 .NET Aspire 應用程式從 8 更新為 9 之後,建立新的 Azure 資源。 若要從 .NET.NET Aspire 8 繼續使用相同的命名原則,您可以將下列程式代碼新增至 AppHost Program.cs

var builder = DistributedApplication.CreateBuilder(args);

builder.Services.Configure<AzureProvisioningOptions>(options =>
{
    options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});

Azure SQL、PostgreSQL和 Redis 更新

Azure SQL、PostgreSQL和 Redis 資源與其他 Azure 資源不同,因為這些技術有本機容器資源。 在 .NET Aspire 8 中,若要創建這些 Azure 資源,您需要從本機容器資源開始,然後將其透過「As」或「PublishAs」轉換為 Azure 資源。 此設計引進了問題,且不符合其他 API。

例如,您可能在 .NET.NET Aspire 8 中有這段程式碼:

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .PublishAsAzureSqlDatabase();

var pgsql = builder.AddPostgres("pgsql")
                   .PublishAsAzurePostgresFlexibleServer();

var cache = builder.AddRedis("cache")
                   .PublishAsAzureSqlDatabase();

在 .NET.NET Aspire 9 中,這些 API 標示為過時,並實作新的 API 模式:

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddAzureSqlServer("sql")
                 .RunAsContainer();

var pgsql = builder.AddAzurePostgresFlexibleServer("pgsql")
                   .RunAsContainer();

var cache = builder.AddAzureRedis("cache")
                   .RunAsContainer();
預設Microsoft Entra標識符

為了讓 .NET Aspire 應用程式更安全,Azure 的 PostgreSQL 和 Azure Cache for Redis 資源資料庫已更新為預設使用 Microsoft Entra ID。 這需要變更需要連線到這些資源的應用程式。 請參閱下列內容,以更新應用程式以使用 Microsoft Entra ID 來連線到這些資源:

下列範例示範如何使用 Microsoft Entra 識別碼,設定應用程式以連線到 Azure 資源:

如果您需要使用密碼或存取金鑰驗證(不建議),您可以使用以下代碼選擇使用:

var builder = DistributedApplication.CreateBuilder(args);

var pgsql = builder.AddAzurePostgresFlexibleServer("pgsql")
                   .WithPasswordAuthentication();

var cache = builder.AddAzureRedis("cache")
                   .WithAccessKeyAuthentication();

支援 Azure 功能(預覽)

Azure Functions 支援是 .NET.NET Aspire 問題追蹤器上最廣泛要求的功能之一,我們很高興在此版本中推出預覽支援。 為了示範此支援,讓我們使用 .NET.NET Aspire 來建立及部署Webhook。

若要開始使用,請使用 [Visual Studio 新增專案] 對話框建立新的 Azure Functions 專案。 出現提示時,請在建立專案時,選取 [ 協調流程] 複選框中的 [登記]。

建立新的 .NET AspireAzure Functions 專案。

在應用程式主機專案中,觀察到新 📦Aspire.Hosting.Azure.Functions NuGet 套件的 PackageReference

<ItemGroup>
    <PackageReference Include="Aspire.Hosting.AppHost" Version="9.0.0" />
    <PackageReference Include="Aspire.Hosting.Azure.Functions" Version="9.0.0" />
</ItemGroup>

此套件提供可在應用程式主機中叫用的 AddAzureFunctionsProject<TProject>(IDistributedApplicationBuilder, String) API,以在 .NET Aspire 主機內設定 Azure Functions 專案:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureFunctionsProject<Projects.PigLatinApp>("piglatinapp");

builder.Build().Run();

在此範例中,Webhook 負責將輸入字串轉譯成 Pig Latin。 使用下列程式代碼更新我們的觸發器內容:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using System.Text;
using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute;

namespace PigLatinApp;

public class Function1(ILogger<Function1> logger)
{
    public record InputText(string Value);
    public record PigLatinText(string Value);

    [Function("Function1")]
    public IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
        [FromBody] InputText inputText)
    {
        logger.LogInformation("C# HTTP trigger function processed a request.");

        var result = TranslateToPigLatin(inputText.Value);

        return new OkObjectResult(new PigLatinText(result));
    }

    private static string TranslateToPigLatin(string input)
    {
        if (string.IsNullOrEmpty(input))
        {
            return input;
        }

        var words = input.Split(' ');
        StringBuilder pigLatin = new();

        foreach (string word in words)
        {
            if (IsVowel(word[0]))
            {
                pigLatin.Append(word + "yay ");
            }
            else
            {
                int vowelIndex = FindFirstVowelIndex(word);
                if (vowelIndex is -1)
                {
                    pigLatin.Append(word + "ay ");
                }
                else
                {
                    pigLatin.Append(
                        word.Substring(vowelIndex) + word.Substring(0, vowelIndex) + "ay ");
                }
            }
        }

        return pigLatin.ToString().Trim();
    }

    private static int FindFirstVowelIndex(string word)
    {
        for (var i = 0; i < word.Length; i++)
        {
            if (IsVowel(word[i]))
            {
                return i;
            }
        }
        return -1;
    }

    private static bool IsVowel(char c) =>
        char.ToLower(c) is 'a' or 'e' or 'i' or 'o' or 'u';
}

Run 方法 logger.LogInformation 的第一行上設定斷點,然後按 F5 以啟動 Functions 主機。 一旦 .NET.NET Aspire 儀錶板啟動,您就會觀察下列事項:

使用 Azure 函數應用程式執行之 .NET Aspire 的螢幕快照。

.NET .NET Aspire 具有:

  • 已設定一個模擬的 Azure 存儲資源,以供主機用於記帳。
  • 在本地啟動作為目標註冊的 Functions 專案主機。
  • 啟用 launchSettings 中定義的埠。json 是用於接聽的函式專案。

使用您慣用的 HTTP client,將請求傳送至觸發器,並在調試器中觀察從請求主體綁定的輸入。

curl --request POST \
  --url http://localhost:7282/api/Function1 \
  --header 'Content-Type: application/json' \
  --data '{
  "value": "Welcome to Azure Functions"
}'

.NET Aspire 儀錶板的螢幕快照:偵錯 Azure 函數應用程式。

現在您已準備好將應用程式部署至 Azure Container Apps (ACA)。 部署目前依賴於 Azure Functions Worker 和 Worker SDK 套件的預覽構建。 如有必要,請升級 Functions 項目中參考的版本:

<ItemGroup>
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="2.0.0-preview2" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.0-preview2" />
</ItemGroup>

您也需要公開 Azure Functions 專案的公用端點,以便將要求傳送至 HTTP 觸發程式:

builder.AddAzureFunctionsProject<Projects.PigLatinApp>("piglatinapp")
       .WithExternalHttpEndpoints();

若要使用 azd CLI部署應用程式,您需要先取得最新版本。 若要安裝最新版本,如果您的版本已過期,您會看到警告。 請依照指示更新至最新版本。

安裝之後,瀏覽至包含應用程式主機專案的資料夾,然後執行 azd init

$ azd init

Initializing an app to run on Azure (azd init)

? How do you want to initialize your app? Use code in the current directory

  (✓) Done: Scanning app code in current directory

Detected services:

  .NET (Aspire)
  Detected in: ./PigLatinApp/PigLatinApp.AppHost/PigLatinApp.AppHost.csproj

azd will generate the files necessary to host your app on Azure using Azure Container Apps.

? Select an option Confirm and continue initializing my app
? Enter a new environment name: azfunc-piglatin

Generating files to run your app on Azure:

  (✓) Done: Generating ./azure.yaml
  (✓) Done: Generating ./next-steps.md

SUCCESS: Your app is ready for the cloud!

然後,執行 azd up來部署應用程式:

$ azd up 
? Select an Azure Subscription to use: 130. [redacted]
? Select an Azure location to use: 50. (US) West US 2 (westus2)

Packaging services (azd package)


Provisioning Azure resources (azd provision)
Provisioning Azure resources can take some time.

Subscription: [redacted]
Location: West US 2

  You can view detailed progress in the Azure Portal:
  [redacted]

  (✓) Done: Resource group: rg-azfunc-piglatin (967ms)
  (✓) Done: Container Registry: [redacted] (13.316s)
  (✓) Done: Log Analytics workspace: [redacted] (16.467s)
  (✓) Done: Container Apps Environment: [redacted] (1m35.531s)
  (✓) Done: Storage account: [redacted] (21.37s)

Deploying services (azd deploy)

  (✓) Done: Deploying service piglatinapp
  - Endpoint: {{endpoint-url}}

  Aspire Dashboard: {{dashboard-url}}

最後,使用您慣用的 HTTP client測試已部署的 Functions 應用程式:

curl --request POST \
  --url {{endpoint-url}}/api/Function1 \
  --header 'Content-Type: application/json' \
  --data '{
  "value": "Welcome to Azure Functions"
}'

.NET Aspire 中對 Azure Functions 的支援仍處於預覽狀態,支援一組有限的觸發程式,包括:

如需詳細資訊,請參閱官方 .NET AspireAzure Functions 整合(預覽版)

自訂 Azure Container Apps

用戶要求最多的功能之一是能夠自訂應用程式主機所建立的 Azure Container Apps,而不需要觸碰 Bicep。 這可以使用 Aspire.Hosting.Azure.AppContainers 命名空間中的 PublishAsAzureContainerApp<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure,ContainerApp>)PublishAsAzureContainerApp<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure,ContainerApp>) API。 這些方法會自定義應用程式主機所建立 Azure 容器應用程式定義。

將套件參考新增至項目檔:

<ItemGroup>
  <PackageReference Include="Aspire.Hosting.Azure.AppContainers"
                    Version="9.0.0" />
</ItemGroup>

下列範例示範如何將 Azure 容器應用程式調整為零 (0) 複本:

var builder = DistributedApplication.CreateBuilder(args);

var db = builder.AddAzurePostgresFlexibleServer("pg")
                .RunAsContainer()
                .AddDatabase("db");

// Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
#pragma warning disable AZPROVISION001

builder.AddProject<Projects.WebApplication1>("api")
       .WithReference(db)
       .PublishAsAzureContainerApp((module, containerApp) =>
       {
           // Scale to 0
           containerApp.Template.Value!.Scale.Value!.MinReplicas = 0;
       });

#pragma warning restore AZPROVISION001

builder.Build().Run();

上述程式碼範例延後產生 Azure 容器應用程式的定義,由應用程式主機處理。 這可讓您自定義 Azure 容器應用程式定義,而不需要執行 azd infra synth 或不安全地修改已生成的 bicep 檔案。

另請參閱