當前位置: 妍妍網 > 碼農

【譯】釋出 .NET Aspire 預覽版 2(一)

2024-02-10碼農

點選上方「DotNet NB」 關註公眾號

1

/

D o t N e t N B 221

原文 | Damian Edwards

轉譯 | 鄭子銘

自上個月宣布並推出 .NET Aspire 以來,我們收到的反饋非常驚人!透過問題和拉取請求對回購協定的參與一直激勵著團隊。我們正在深入了解開發人員在分布式雲應用程式開發中如何使用(以及希望使用).NET Aspire 或其他元件。社群已經做出了一些很棒的貢獻,許多貢獻也在進行中。我代表團隊感謝您的興奮和反饋!

.NET Aspire 預覽版 2 現已推出!以下是此預覽版中新增內容的摘要:

  • 儀表板

  • 所有資源型別現在都合並到一個「資源」檢視中

  • 新的詳細資訊窗格設計

  • 所有資源型別的控制台日誌現在合並到一個「控制台日誌」檢視中

  • 添加到結構化日誌檢視的日誌類別名稱

  • 對其他資源和開發服務的傳出請求顯示為資源/服務名稱而不是 URL

  • 托管和編排

  • 容器現在支持配置在啟動時傳遞給它們的參數

  • 容器和可執行檔現在可以透過端點參照其他資源以進行服務發現配置

  • 添加沒有

    的計畫

  • 資源現在可以參照現有的 URI 端點來進行服務發現配置

  • 支持添加 Node.js 應用程式作為資源

  • 現在,無論有或沒有副本托管,計畫都使用啟動配置檔中的埠

  • 元件

  • 元件包現在有單獨的圖示

  • 新:添加了 MySqlConnector 元件

  • 新:添加了 MongoDB 元件

  • Azure SDK 元件現在預設啟用分布式跟蹤(服務匯流排除外)

  • 部署

  • Azure 開發人員 CLI 改進

  • Aspir8:社群開發的工具,用於將 .NET Aspire 應用程式部署到 Kubernetes

  • Dapr

  • 不再需要指定 Dapr sidecar 的 ID

  • 對描述應用程式模型中所有 Dapr 元件的一流支持

  • Azure 開發人員 CLI (AZD) 支持將使用 Dapr 的 .NET Aspire 套用部署到

    Azure 容器套用 (ACA)

  • 獲取 .NET Aspire 預覽版 2

    要安裝或升級到 .NET Aspire Preview 2,請執行以下步驟:

    1. 如果在 Windows 上並使用 Visual Studio 與 .NET Aspire 配合使用,請安裝/更新到最新的 Visual Studio 2022 預覽版(撰寫本文時為 17.9.0 預覽版 2.0)

  • 確保在 Visual Studio 安裝程式的「單獨元件」索引標籤下選擇「.NET Aspire SDK(預 (預覽版)」元件: 註意, 必須按照這些說明中的其余步驟更新到預覽版 2

    1. 如果在 Windows 上安裝了 Visual Studio 2022 17.8.x,但打算僅透過 .NET CLI (dotnet) 使用 .NET Aspire,請使用獨立安裝程式下載並安裝 .NET 8.0.100 SDK

    2. 如果在 macOS 或 Linux 上,請下載並安裝 .NET 8.0.100 SDK

    3. 從終端執行以下命令來更新 .NET Aspire 工作負載:

    dotnet workload update
    dotnet workload install aspire

    請註意,如果您已經安裝了 .NET Aspire 工作負載的 Preview 1 版本,您可能會看到訊息,通知您工作負載已安裝。這些可以安全地忽略。

    1. 有關安裝 .NET Aspire 的詳細說明,請參閱文件

    更新後,您可以執行 dotnet Workload List 檢視更新後的版本(註意:您的 Visual Sudio 版本可能有所不同):

    Installed Workload Id Manifest Version Installation Source
    ----------------------------------------------------------------------------------------------

    aspire 8.0.0-preview.2.23619.3/8.0.100 SDK 8.0.100, VS 17.9.34310.174

    更新現有應用程式

    對於現有 .NET Aspire 應用程式,執行上述步驟以獲取最新工作負載後,您將需要更改任何 Aspire 元件的包參照。將所有 Aspire 包參照(托管和元件)更新為 8.0.0-preview.2.23619.3,例如托管將更改為:

    <PackageReference Include="Aspire.Hosting"Version="8.0.0-preview.2.23619.3" />

    參照的所有其他包也應該更新到 Preview 2 版本。如果使用 Visual Studio,您還可以使用 NuGet 包管理器並更新透過 IDE 使用的所有包(請務必選中 UI 中的預釋出核取方塊)。

    API變更

    此外,我們在預覽版 2 中進行了一些托管 API 更改。在現有程式碼中,API 呼叫(例如 builder.AddPostgresContainer(...))現在應更改為 builder.AddPostgres(...) 以保留相同的行為(有類似的更改)也適用於其他資源型別)。我們希望在「抽象」資源型別的概念(例如 Redis 伺服器(例如 AddRedis(...)))和執行 Redis 的容器(例如 AddRedisContainer(...))之間添加區別。RedisContainer 等型別的構建器支持 WithEnvironment(...) 和 WithVolumeMount(...) 等擴充套件方法,而 RedisServer 等型別的構建器則不支持,因為預期 .NET Aspire 應用程式的部署工具可能會使用目標雲環境中的托管資源型別,不支持以這種方式進行自訂。

    此外,我們還刪除了 builder.AddXYZConnection(...) 方法,其中 XYZ 是資源型別的名稱。這些擴充套件是添加環境變量(例如 ConnectionString_myresource)的非常薄的包裝。

    儀表板更新

    我們在 .NET Aspire 的初始預覽版中得到了對儀表板的熱烈響應!人們非常熱衷於能夠輕松地了解 .NET Aspire 如何幫助預設情況下使應用程式可觀察,以及構成分布式系統的所有單獨資源的狀態。根據您的反饋,我們對預覽 2 中的儀表板進行了以下更改。

    資源和控制台日誌的新組合檢視

    在預覽版 1 中,儀表板上有單獨的頁面,用於檢視配置為 .NET Aspire 應用程式一部份的計畫、可執行檔和容器的詳細資訊。在預覽版 2 中,這些已合並為一個「資源」頁面,使您可以更輕松地在一個位置檢視所有資源的狀態和關鍵詳細資訊。「名稱」列現在包括計畫和可執行檔的行程 ID 以及容器的容器 ID。「源」列詳細說明了計畫和可執行檔的路徑,對於容器,顯示了影像名稱和標簽,以及容器埠(如果公開)。

    控制台日誌得到相同的處理,從而可以更輕松地從單個頁面選擇任何資源來檢視控制台日誌:

    可停靠的詳細資訊窗格

    現在使用新的詳細資訊窗格來顯示相關計畫的更多資訊,例如資源的環境變量,或者結構化日誌或跟蹤範圍的詳細資訊。該窗格可以停靠在當前檢視的底部或側面,從而可以更輕松地在當前檢視中顯示的不同計畫的詳細資訊之間進行切換。

    添加到結構化日誌檢視的日誌類別名稱

    日誌訊息的類別名稱現在顯示在結構化日誌檢視的詳細資訊窗格中,從而可以輕松檢視訊息的來源:

    發往已知目的地的傳出請求將顯示名稱而不是 URL

    現在,對已知目的地(例如由 Visual Studio 托管的其他資源和端點以支持開發體驗(例如瀏覽器連結))的傳出請求現在會在「跟蹤」檢視中自動解析和適當命名:

    托管和編排更新配置容器啟動參數

    現在,您可以使用 IResourceBuilder .WithArgs 方法配置要傳遞到 AppHost 計畫中配置的容器的參數。這些參數將在啟動時傳遞給容器。以下是使用此功能的範例,取自新添加的資料庫容器範例。

    var builder = DistributedApplication.CreateBuilder(args);
    var addressBookDb = builder.AddSqlServerContainer("sqlserver")
    // Mount the init scripts directory into the container.
    .WithVolumeMount("./sqlserverconfig", "/usr/config", VolumeMountType.Bind)
    // Mount the SQL scripts directory into the container so that the init scripts run.
    .WithVolumeMount("../DatabaseContainers.ApiService/data/sqlserver", "/docker-entrypoint-initdb.d", VolumeMountType.Bind)
    // Run the custom entrypoint script on startup.
    .WithArgs("/usr/config/entrypoint.sh")
    .AddDatabase("AddressBook");

    所有資源型別之間的服務發現

    現在可以使用 WithServiceBinding 方法配置容器和可執行檔以公開伺服端點,然後使用 WithReference 將它們作為對其他資源的參照傳遞,並將其伺服端點作為服務發現的配置註入。

    var builder =DistributedApplication.CreateBuilder(args);
    // Add customer API container built by partner team
    var customerApi = builder.AddContainer("customerapi", image: "contoso.com/eshop/customers")
    .WithServiceBinding(containerPort: 8080, scheme: "http");
    // Configure our storefront web project to reference the customer service API so that it can
    // reference the service by name instead of by IP address, e.g. http://customerapi
    var storeFront = builder.AddProject<Projects.Contoso_eShop_Storefront>("storefront")
    .WithReference(customerApi);

    根據計畫檔路徑添加計畫

    在某些情況下,將 AppHost 計畫中的計畫參照添加到服務計畫作為計畫參照可能是不合需要的。現在,只需將計畫檔路徑傳遞給 AddProject 方法,就可以將計畫添加為資源,而無需計畫參照。這可以使在更復雜的源布局情況下(例如,從當前解決方案外部整合計畫變得更容易)。當使用 git 子模組引入合作夥伴團隊儲存庫的內容時。

    var builder = DistributedApplication.CreateBuilder(args);
    var pathBasedProject = builder.AddProject(
    name: "customerapi",
    // The project will be resolved relative to the AppHost project directory
    projectPath: "../../submodules/customerapi/src/CustomerApi/CustomerApi.csproj");

    參照現有的 URI 端點以進行服務發現配置

    從當前解決方案外部參照服務甚至由不同團隊管理的另一種模式可以是使用專門為開發目的托管的服務的現有例項。您現在可以直接參照基於 HTTP 的服務,並使用服務發現所需的值配置使用資源:

    var builder = DistributedApplication.CreateBuilder(args);
    var cache = builder.AddRedis("cache");
    builder.AddProject<Projects.AspireApp30_Web>("webfrontend")
    .WithReference(cache)
    // The app can reference this service simply via http://apiservice
    .WithReference("apiservice", newUri("http://apiservice.v2.dev.contoso.com"));

    支持添加 Node.js 應用程式作為資源

    現在支持將基於 Node.js 的應用程式配置到 .NET Aspire AppHost 計畫中。AddNodeApp 和 AddNpmApp 方法可用於輕松地將 Node.js 應用程式包含在 Aspire AppHost 計畫中,例如基於 React 的前端。包含的 Node.js 應用程式可以參與服務發現和連線字串配置,並將註入儀表板 OTLP 端點 URL 以啟用 OpenTelemetry。要將應用程式配置為部署為容器,請對返回的資源呼叫 AsDockerFileInManifest 方法。

    Aspire with Node.js 範例已更新為使用此內建支持,並演示了如何配置 Node.js 應用程式以將 OpenTelemetry 跟蹤匯出到 Aspire 儀表板。

    var builder =DistributedApplication.CreateBuilder(args);
    var cache = builder.AddRedisContainer("cache");
    var apiservice = builder.AddProject<Projects.ApiService>("apiservice");
    builder.AddNodeApp("webapp", "../webapp/app.js")
    .WithReference(apiservice)
    .WithReference(cache)
    // Dynamically assign an http port for the the Node.js app.
    // The port will be set in the 'PORT' environment variable.
    .WithServiceBinding(scheme: "http", env: "PORT")
    .AsDockerfileInManifest();

    計畫現在一致使用其啟動配置檔中指定的埠

    啟動 AppHost 計畫時,Aspire.Hosting 會在所有配置的服務之前啟動反向代理,以便可以執行對配置的副本進行負載平衡等任務。計畫應用程式本身的例項將被分配隨機埠來偵聽,代理會將客戶端請求轉發到該埠。現在,在開發過程中本地執行時,代理將使用計畫啟動配置檔中指定的埠(即 Properties/launchSettings.json 檔中的「applicationUrl」內容)作為傳入埠。這意味著您用於存取計畫的本地主機 URL 現在應該在開發過程中保持一致,因為它由計畫的啟動配置檔控制,無論是直接啟動計畫,還是透過 AppHost 計畫啟動它,無論是否有副本。

    原文連結

    Announcing .NET Aspire Preview 2