Utilizzo della CLI globale Lambda di .NET - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo della CLI globale Lambda di .NET

La CLI .NET e l'estensione degli strumenti globali Lambda .NET (Amazon.Lambda.Tools) offrono un modo multi-piattaforma per creare applicazioni Lambda basate su .NET, impacchettarle e implementarle in Lambda. In questa sezione, scoprirai come creare nuovi progetti Lambda .NET utilizzando la CLI .NET e i modelli Amazon Lambda e come impacchettarli e implementarli tramite Amazon.Lambda.Tools

Prerequisiti

.NET 8 SDK

Se non l'hai già fatto, installa .NET 8 SDK e Runtime.

AWS Amazon.Lambda.Templates: modelli di progetto.NET

Per generare il codice della funzione Lambda, usa il Amazon.Lambda.Templates NuGet pacchetto. Per installare questo pacchetto del modello, esegui il comando riportato:

dotnet new install Amazon.Lambda.Templates
AWS Strumenti CLI globali Amazon.Lambda.Tools.NET

Per creare le funzioni Lambda, usa l'estensione degli strumenti globali .NET Amazon.Lambda.Tools. Per installare Amazon.Lambda.Tools, esegui il comando riportato:

dotnet tool install -g Amazon.Lambda.Tools

Per ulteriori informazioni sull'Amazon.Lambda.Toolsestensione.NET CLI, consulta l'archivio AWS Extensions for .NET CLI su. GitHub

Creazione di progetti .NET con la CLI .NET

Nella CLI .NET, utilizzi il comando dotnet new per creare progetti .NET da una riga di comando. Lambda offre modelli aggiuntivi utilizzando il Amazon.Lambda.Templates NuGet pacchetto.

Dopo aver installato questo pacchetto, esegui il comando di seguito per visualizzare un elenco di modelli disponibili.

dotnet new list

Per esaminare i dettagli relativi a un modello, utilizzare l'opzione help. Ad esempio, per visualizzare i dettagli del modello lambda.EmptyFunction, emetti il seguente comando.

dotnet new lambda.EmptyFunction --help

Per creare un modello di base per una funzione Lambda .NET, usa il modello lambda.EmptyFunction. In questo modo viene creata una funzione semplice che accetta una stringa come input e la converte in lettere maiuscole utilizzando il metodo ToUpper. Questo modello supporta le seguenti opzioni:

  • --name: il nome della funzione.

  • --region— La AWS regione in cui creare la funzione.

  • --profile— Il nome di un profilo nel file delle AWS SDK for .NET credenziali. Per ulteriori informazioni sui profili di credenziali in.NET, consulta Configurare AWS le credenziali nella AWS SDK for .NET Developer Guide.

In questo esempio, creiamo una nuova funzione vuota denominata myDotnetFunction utilizzando il profilo e le impostazioni predefiniti: Regione AWS

dotnet new lambda.EmptyFunction --name myDotnetFunction

Questo comando crea i seguenti file e directory nella directory di progetto.

└── myDotnetFunction ├── src │   └── myDotnetFunction │   ├── Function.cs │   ├── Readme.md │   ├── aws-lambda-tools-defaults.json │   └── myDotnetFunction.csproj └── test └── myDotnetFunction.Tests ├── FunctionTest.cs └── myDotnetFunction.Tests.csproj

Nella directory src/myDotnetFunction esaminare i file seguenti:

  • aws-lambda-tools-defaults.json: file in cui si specificano le opzioni della riga di comando quando si distribuisce la funzione Lambda. Ad esempio:

    "profile" : "default", "region" : "us-east-2", "configuration" : "Release", "function-architecture": "x86_64", "function-runtime":"dotnet8", "function-memory-size" : 256, "function-timeout" : 30, "function-handler" : "myDotnetFunction::myDotnetFunction.Function::FunctionHandler"
  • Function.cs: codice della funzione del gestore Lambda. Si tratta di un modello C# che include la libreria Amazon.Lambda.Core e un attributo LambdaSerializer predefiniti. Per ulteriori informazioni sui requisiti e sulle opzioni di serializzazione, consulta Serializzazione nelle funzioni Lambda. Include anche una funzione di esempio che è possibile modificare per applicare il codice della funzione Lambda.

    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 myDotnetFunction; public class Function { /// <summary> /// A simple function that takes a string and does a ToUpper /// </summary≫ /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public string FunctionHandler(string input, ILambdaContext context) { return input.ToUpper(); } }
  • my DotnetFunction .csproj: un file MSBuild che elenca i file e gli assembly che compongono l'applicazione.

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <!-- This property 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.2.0" /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.0" /> </ItemGroup> </Project>
  • Readme: file che consente di documentare la funzione Lambda.

Nella directory myfunction/test esaminare i file seguenti:

  • my DotnetFunction .tests.csproj: Come indicato in precedenza, si tratta di un file MSBuild che elenca i file e gli assembly che compongono il progetto di test. Si noti anche che nel file è inclusa la libreria Amazon.Lambda.Core, che consente di integrare in modo semplice qualsiasi modello Lambda necessario per eseguire il test della funzione.

    <Project Sdk="Microsoft.NET.Sdk"> ... <PackageReference Include="Amazon.Lambda.Core" Version="2.2.0 " /> ...
  • FunctionTest.cs: lo stesso file modello di codice C# incluso nella directory. src Modificare questo file per eseguire il mirroring del codice di produzione della funzione e per eseguirne il test prima di caricare la funzione Lambda in un ambiente di produzione.

    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); } } }

Implementazione di progetti .NET con la CLI .NET

Per creare il pacchetto di implementazione e implementarlo in Lambda, utilizzi gli strumenti della CLI Amazon.Lambda.Tools. Per implementare la funzione dai file creati nei passaggi precedenti, per prima cosa accedi alla cartella contenente il file .csproj della funzione.

cd myDotnetFunction/src/myDotnetFunction

Per implementare il codice in Lambda come pacchetto di implementazione .zip, emetti il comando seguente. Scegli il nome della tua funzione.

dotnet lambda deploy-function myDotnetFunction

Durante la distribuzione, la procedura guidata chiede di selezionare un. Definizione delle autorizzazioni della funzione Lambda con un ruolo di esecuzione Per questo esempio, seleziona lambda_basic_role.

Dopo aver implementato la funzione, puoi testarla nel cloud con il comando dotnet lambda invoke-function. Per il codice di esempio nel modello lambda.EmptyFunction, puoi testare la tua funzione inserendo una stringa utilizzando l'opzione --payload.

dotnet lambda invoke-function myDotnetFunction --payload "Just checking if everything is OK"

Se la funzione è stata implementata con successo, dovresti vedere un output simile al seguente.

dotnet lambda invoke-function myDotnetFunction --payload "Just checking if everything is OK" Amazon Lambda Tools for .NET Core applications (5.8.0) Project Home: https://github.com/aws/aws-extensions-for-dotnet-cli, https://github.com/aws/aws-lambda-dotnet 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

Utilizzo dei livelli Lambda con la CLI di .NET

Nota

L'uso di livelli con funzioni in un linguaggio compilato come C# potrebbe non offrire gli stessi vantaggi di un linguaggio interpretato come Python. Siccome C# è un linguaggio compilato, le funzioni devono comunque caricare manualmente gli assembly condivisi in memoria durante la fase di inizializzazione, per cui i tempi di avvio a freddo possono aumentare. È preferibile, invece, includere qualunque codice condiviso in fase di compilazione per sfruttare le ottimizzazioni integrate del compilatore.

La CLI di .NET supporta comandi che facilitano la pubblicazione di livelli e l'implementazione di funzioni C# che utilizzano livelli. Per pubblicare un livello in un bucket Amazon S3 specificato, utilizza il comando seguente nella stessa directory del tuo file .csproj:

dotnet lambda publish-layer <layer_name> --layer-type runtime-package-store --s3-bucket <s3_bucket_name>

Quando implementi la funzione utilizzando la CLI di .NET, quindi, specifica l'ARN utilizzato dal livello nel seguente comando:

dotnet lambda deploy-function <function_name> --function-layers arn:aws:lambda:us-east-1:123456789012:layer:layer-name:1

Per un esempio completo di una funzione Hello World, vedi l' blank-csharp-with-layeresempio.