Uso de la CLI de .NET Lambda Global - AWS Lambda

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de la CLI de .NET Lambda Global

La CLI de .NET y la extensión .NET Lambda Global Tools (Amazon.Lambda.Tools) ofrecen una forma multiplataforma para crear aplicaciones Lambda basadas en .NET, empaquetarlas e implementarlas en Lambda. En esta sección, aprenderá a crear nuevos proyectos .NET de Lambda mediante la CLI de .NET y las plantillas de Amazon Lambda, y a empaquetarlos e implementarlos mediante Amazon.Lambda.Tools

Requisitos previos

SDK para .NET 8

Si aún no lo ha hecho, instale el SDK y el tiempo de ejecución de .NET 8.

AWS Plantillas de proyecto .NET Amazon.Lambda.Templates

Para generar el código de la función de Lambda, utilice el paquete NuGet Amazon.Lambda.Templates. Para instalar este paquete de plantillas, ejecute el siguiente comando:

dotnet new install Amazon.Lambda.Templates
AWS Herramientas globales para la CLI de .NET Amazon.Lambda.Tools

Para crear sus funciones de Lambda, utilice la extensión de herramientas globales de .NET Amazon.Lambda.Tools. Ejecute el siguiente comando para instalar Amazon.Lambda.Tools:

dotnet tool install -g Amazon.Lambda.Tools

Para obtener más información sobre la Amazon.Lambda.Tools de la extensión de la CLI de .NET, consulte el repositorio en GitHub Extensiones de AWS para la CLI de .NET.

Creación de proyectos .NET mediante la CLI de .NET

En la CLI de .NET se usa el comando dotnet new para crear proyectos .NET desde la línea de comando. Lambda ofrece plantillas adicionales mediante el paquete Amazon.Lambda.Templates NuGet.

Tras la instalación de este paquete, ejecute el siguiente comando para ver una lista de las plantillas disponibles.

dotnet new list

Para examinar los detalles acerca de una plantilla, utilice la opción help. Por ejemplo, para ver los detalles de la plantilla lambda.EmptyFunction, ejecute el siguiente comando.

dotnet new lambda.EmptyFunction --help

Para crear una plantilla básica para una función de Lambda .NET, utilice la plantilla lambda.EmptyFunction. Esto crea una función sencilla que toma una cadena como entrada y la convierte a mayúsculas mediante el método ToUpper. Esta plantilla es compatible con las siguientes opciones:

  • --name: el nombre de la función.

  • --region: la región AWS para crear la función dentro.

  • --profile: el nombre de un perfil en su archivo de credenciales de AWS SDK for .NET. Para obtener más información sobre los perfiles de credenciales en .NET, consulte Configurar credenciales AWS en SDK AWS para Guía para desarrolladores de .NET.

En este ejemplo, creamos una nueva función vacía llamada myDotnetFunction con el perfil y la configuración Región de AWS predeterminados:

dotnet new lambda.EmptyFunction --name myDotnetFunction

Este comando crea los siguientes archivos y directorios en el directorio de su proyecto.

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

En el directorio src/myDotnetFunction, examine los archivos siguientes:

  • aws-lambda-tools-defaults.json: aquí se especifican las opciones de línea de comando al implementar su función de Lambda. Por ejemplo:

    "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: el código de la función de controlador de Lambda. Es una plantilla de C# que incluye la biblioteca Amazon.Lambda.Core predeterminada y un atributo LambdaSerializer predeterminado. Para obtener más información acerca de las opciones y los requisitos de serialización, consulte Serialización de las funciones de Lambda. También incluye una función de muestra que puede editar para aplicar el código de su función de 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(); } }
  • myDotnetFunction.csproj: un archivo MSBuild que enumera los archivos y ensamblados que componen la aplicación.

    <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: use este archivo para documentar su función de Lambda.

En el directorio myfunction/test, examine los archivos siguientes:

  • myDotnetFunction.Tests.csproj: como se ha indicado con anterioridad, este es un archivo MSBuild que enumera los archivos y los ensamblados que componen el proyecto de prueba. Tenga en cuenta que también incluye la biblioteca Amazon.Lambda.Core, de modo que puede integrar a la perfección cualquier plantilla de Lambda necesaria para probar la función.

    <Project Sdk="Microsoft.NET.Sdk"> ... <PackageReference Include="Amazon.Lambda.Core" Version="2.2.0 " /> ...
  • FunctionTest.cs: el mismo archivo de plantilla de código C# que se incluye en el directorio src. Edite este archivo para reflejar el código de producto de su función y probarlo antes de cargar su función de Lambda en un entorno de producción.

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

Implementación de proyectos.NET mediante la CLI de .NET

Para crear su paquete de implementación e implementarlo en Lambda, utilice las herramientas de CLI Amazon.Lambda.Tools. Para implementar la función a partir de los archivos que creó en los pasos anteriores, primero navegue hasta la carpeta que contiene el archivo .csproj de la función.

cd myDotnetFunction/src/myDotnetFunction

Para implementar el código en Lambda como un paquete de implementación .zip, ejecute el siguiente comando. Elija su propio nombre de función.

dotnet lambda deploy-function myDotnetFunction

Durante la implementación, el asistente le pide que seleccione un Rol de ejecución de Lambda. Para este ejemplo, seleccione lambda_basic_role.

Una vez implementada la función, puede probarla en la nube con el comando dotnet lambda invoke-function. Para el código de ejemplo de la plantilla lambda.EmptyFunction, puede probar su función pasando una cadena mediante la opción --payload.

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

Si la función se ha implementado correctamente, debería ver un resultado similar al siguiente.

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

Uso de capas de Lambda con la CLI de .NET

nota

El uso de capas con funciones en un lenguaje compilado, como C#, puede no ofrecer las mismas ventajas que con un lenguaje interpretado, como Python. Como C# es un lenguaje compilado, las funciones aún tienen que cargar de forma manual los ensamblajes compartidos en la memoria durante la fase de inicio, lo que puede aumentar los tiempos de arranque en frío. En su lugar, se recomienda incluir cualquier código compartido en el momento de la compilación para aprovechar las optimizaciones del compilador integradas.

La CLI de .NET admite comandos que lo ayudan a publicar capas e implementar funciones de C# que consumen capas. Para publicar una capa en un bucket de Amazon S3 específico, ejecute el siguiente comando en el mismo directorio que su archivo .csproj:

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

Luego, cuando implemente la función mediante la CLI de .NET, especifique el ARN de la capa que consumirá en el siguiente comando:

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

Para conocer un ejemplo completo de una función “Hola, mundo”, consulte la muestra blank-csharp-with-layer.