.NET Core CLI - AWS Lambda

.NET Core CLI

.NET Core CLI 提供一種跨平台方式讓您建立以 .NET 為基礎的 Lambda 應用程式。本節假設您已安裝 .NET Core CLI。如果您還沒有,請參閱 Microsoft 網站上的下載 .NET

在 .NET CLI 中,使用 new 命令從命令列建立 .NET 專案。如果您想要在 Visual Studio 之外建立專案,這就很實用。若要檢視可用專案類型的清單,請開啟命令列,導覽到您安裝 .NET Core 執行時間的地方並執行下列命令:

dotnet new -all Usage: new [options] ... Templates Short Name Language Tags ---------------------------------------------------------------------------------------------------------------------------- Console Application console [C#], F#, VB Common/Console Class library classlib [C#], F#, VB Common/Library Unit Test Project mstest [C#], F#, VB Test/MSTest xUnit Test Project xunit [C#], F#, VB Test/xUnit ... Examples: dotnet new mvc --auth Individual dotnet new viewstart dotnet new --help

Lambda 透過 Amazon.Lambda.Templates Nuget 套件提供額外的範本。若要安裝此套件,請執行下列命令:

dotnet new -i Amazon.Lambda.Templates

完成安裝後,Lambda 範本將顯示為 dotnet new 的一部分。若要檢查範本的詳細資訊,請使用 help 選項。

dotnet new lambda.EmptyFunction --help

lambda.EmptyFunction 範本支援以下選項︰

這些選項會儲存到名為 aws-lambda-tools-defaults.json 的檔案。

使用 lambda.EmptyFunction 範本建立函式專案。

dotnet new lambda.EmptyFunction --name MyFunction

src/myfunction 目錄下,檢查下列檔案:

  • aws-lambda-tools-defaults.json:您在部署 Lambda 函數時,在此檔案中指定命令列選項。例如:

    "profile" : "default", "region" : "us-east-2", "configuration" : "Release", "function-runtime":"dotnet6", "function-memory-size" : 256, "function-timeout" : 30, "function-handler" : "MyFunction::MyFunction.Function::FunctionHandler"
  • Function.cs:您的 Lambda 處理常式函數程式碼。它是 C# 範本,包含了預設的 Amazon.Lambda.Core 程式庫和預設的 LambdaSerializer 屬性。如需關於序列化需求及選項的詳細資訊,請參閱序列化 Lambda 函數。它也包含可編輯以套用 Lambda 函數程式碼的範例函數。

    using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Amazon.Lambda.Core; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace MyFunction { public class Function { public string FunctionHandler(string input, ILambdaContext context) { return input.ToUpper(); } } }
  • MyFunction.csprojMSBuild 檔案列出了構成您的應用程式的檔案和組件。

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <!-- Makes the build directory similar to a publish directory and helps the AWS .NET Lambda Mock Test Tool find project dependencies. --> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <!-- Generate ready to run images during publishing to improve cold start time. --> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.1.0 " /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.2.0" /> </ItemGroup> </Project>
  • Readme:使用此檔案來記錄您的 Lambda 函數。

myfunction/test 目錄下,檢查下列檔案:

  • myFunction.Tests.csproj:如上所述,這是 MSBuild 檔案,其列出了構成您的測試專案的檔案和組件。也請注意,它包含 Amazon.Lambda.Core 程式庫,以便您順利整合測試函數時所需要的任何 Lambda 範本。

    <Project Sdk="Microsoft.NET.Sdk"> ... <PackageReference Include="Amazon.Lambda.Core" Version="2.1.0 " /> ...
  • FunctionTest.cs:包含在 src 目錄中的相同的 C# 程式碼範本檔案。編輯此檔案以鏡像您的函數的生產程式碼,並在上傳 Lambda 函數至生產環境之前進行測試。

    using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Xunit; using Amazon.Lambda.Core; using Amazon.Lambda.TestUtilities; using MyFunction; namespace MyFunction.Tests { public class FunctionTest { [Fact] public void TestToUpperFunction() { // Invoke the lambda function and confirm the string was upper cased. var function = new Function(); var context = new TestLambdaContext(); var upperCase = function.FunctionHandler("hello world", context); Assert.Equal("HELLO WORLD", upperCase); } } }

您的函數通過其測試後,即可使用 Amazon.Lambda.Tools .NET Core Global Tool 進行建置和部署。若要安裝 .NET Core Global Tool,請執行以下命令︰

dotnet tool install -g Amazon.Lambda.Tools

如果您已安裝此工具,您可以使用以下命令,確保使用的是最新版本。

dotnet tool update -g Amazon.Lambda.Tools

如需有關 Amazon.Lambda.Tools .NET Core Global Tool 的詳細資訊,請參閱 GitHub 上的 .NET CLI 儲存庫的 AWS 延伸項目

安裝 Amazon.Lambda.Tools 之後,您就可以使用以下命令部署函數:

dotnet lambda deploy-function MyFunction --function-role role

部署後,您可以在生產環境中使用下列命令重新測試一遍,並傳入不同的值到您的 Lambda 函數處理常式:

dotnet lambda invoke-function MyFunction --payload "Just Checking If Everything is OK"

如果一切順利,您會看到下列項目:

dotnet lambda invoke-function MyFunction --payload "Just Checking If Everything is OK" Payload: "JUST CHECKING IF EVERYTHING IS OK" Log Tail: START RequestId: id Version: $LATEST END RequestId: id REPORT RequestId: id Duration: 0.99 ms Billed Duration: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB