.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
dotnet new -i Amazon.Lambda.Templates
完成安裝後,Lambda 範本將顯示為 dotnet new
的一部分。若要檢查範本的詳細資訊,請使用 help
選項。
dotnet new lambda.EmptyFunction --help
lambda.EmptyFunction
範本支援以下選項︰
-
--name
- 函數的名稱 -
--profile
- 您的 AWS SDK for .NET 登入資料檔案中的設定檔名稱 -
--region
- 要建立函數的 AWS 區域
這些選項會儲存到名為 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.csproj:MSBuild
檔案列出了構成您的應用程式的檔案和組件。 <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
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