使用 AWS Lambda 函數開始使用 .NET

使用 AWS Lambda 函數開始使用 .NET

AWS Lambda Functions 是一種無服務器計算模型,允許您在沒有服務器的情況下運行代碼。它們通常用 JavaScript 和 Python 等語言編寫,但 AWS 現在支持許多不同的運行時,包括。NET 用於 C#。

為什麼用。NET 的 Lambda?

Lambda 現在有很多不同的語言可用,所以你有很多選擇。通常,JavaScript 和 Python 用於負責快速啟動和運行的簡單自動化功能。但是它們對於繁重的處理並不是性能最好的,而動態類型的腳本語言對於復雜的應用程序來說是一個嚴重的缺點。

如果您更喜歡 C# 語言,將其用於 Lambda 並沒有太多缺點,尤其是如果切換到 Python 或 JavaScript 太繁瑣的話。AWS 提供的工具也很好,您可以訪問整個 AWS 開發工具包,這意味著您可以輕鬆搜索 Lambda 和 DynamoDB 等服務。

此外,AWS 支持整個運行時。NET,這意味著你可以使用除 C# 之外的其他語言編譯成二進製文件。網。C# 是最流行的,但您也可以在 F# 或 VB.NET 中編寫 lambda 函數

這個怎麼運作?

像 Java 和 C# 這樣的語言往往要好很多,但使用它們也有缺點。它們都被編譯成需要在啟動時編譯的字節碼,因此它們有更多的啟動時間,尤其是在冷啟動時。“冷啟動”是指 AWS 在過去幾分鐘內沒有運行某個功能,因此它不會被緩存,它需要及時再次編譯才能運行它。此過程可能會導致您的函數需要一秒鐘或更長時間才能響應,這對 Web 應用程序不利。

但是,如果您經常使用 Lambda,這個問題會大大緩解。您還可以通過專用並行性完全減少冷啟動時間。典型的響應時間。NET 非常龐大,性能與 Go 和 Rust 等完全編譯的語言相當。

如果您當前使用 Java 來實現 Lambda 函數,C# 可能是一個可行的替代品,因為它是現代運行時。NET 6 使用的內存更少,並且在大多數情況下啟動速度比 JVM 快。

設置 C# lambda 函數

首先,您需要一個已安裝的。網。AWS 支持。NET 核心 3.1 和. NET 6,因此這兩個運行時中的任何一個都可以工作,但最重要的是,您需要dotnet 安裝 CLI,以便安裝 Lambda 模板。你可以得到。NET 從 Microsoft 文檔門戶

您將需要安裝 Lambda 模板和全局 Lambda 工具。

dotnet new -i Amazon.Lambda.Templates

dotnet tool install -g Amazon.Lambda.Tools

這設置了很多選項;您可以將它們全部列出:

dotnet new --list

該工具非常方便,因為它帶有許多針對不同用例預先配置的打包模板。通常,每個項目需要一個函數來保持較小的構建大小,但如果您使用使用 CloudFormation 模板部署的 AWS 無服務器模板,則可以在單個 DLL 中擁有多個函數。它們更難管理,因此只有在它們對您有益時才使用它們。

但是對於解決方案文件。NET,您可以有多個並行項目引用共享程序集,所以這沒什麼大不了的。

現在,我們將使用一個簡單的“空函數”模板來創建一個項目。NET 6。您可以從命令行或編輯器的新項目屏幕創建它。

dotnet new lambda.EmptyFunction --name SimpleLambdaFunction --profile default --region us-east-1

這會生成一個非常簡單的函數 – 它接受一個字符串作為輸入並通過ILambdaContext. 這Main() 是您的 Lambda 的入口點函數,每當調用 Lambda 函數時都會由運行時調用。這個特定的函數返回string,但您也可以這樣做async 並返回Task<string?>

在頂部,您將看到配置 JSON 序列化程序的程序集屬性。在內部,Lambda 將為您反序列化輸入內容,然後調用您的函數。隨後,如果它返回一些東西,它將被寫入響應流。Lambda 庫為您處理此模式,包裝您的函數的代碼位於HandlerWrapper.

基本上,它將處理各種方法簽名,如果您的函數接受輸入,它將為您反序列化這些輸入。如果您的函數返回一個輸出,它將為您序列化該輸出。您實際上不需要做任何這些,因為您可以編寫對原始Stream 類進行操作的函數,但它是一個很好的包裝類,可以讓事情變得更容易。

這意味著您可以為傳入和傳出函數的輸入和輸出自由定義自己的模型,這是使用 C# 處理 JSON 的好處之一。

在這個函數中,它反序列InputModel 化類,異步等待一秒鐘,然後返回OutputModel 類。這個類被序列化回輸出流,以便 Lambda 可以處理它。

運行 lambda 函數

在創建函數後運行它非常容易,因為 Lambda 命令行界面。NET 提供了一種部署方法。只需deploy-function 運行

dotnet lambda deploy-function SimpleNETFunction

您將需要選擇一個 IAM 角色或創建一個新角色,並且您可能需要向該新角色添加權限。您現在應該在控制台中看到該函數:

Lambda 提供了一個內置測試器,您可以將 JSON 傳遞給該測試器。

這將執行並向您顯示有關執行的所有詳細信息。在這種情況下,通過非常小的最小函數,冷啟動時間不到 500 毫秒,這是相當不錯的。NET 和一般的 Lambda。一旦天氣變暖,付費持續時間就會減少到幾毫秒。

在這種情況下,該函數根本沒有使用太多內存,將函數減小到 128MB 並沒有造成任何問題。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *