Blog de Amazon Web Services (AWS)

Cree, empaquete y publique funciones Lambda en .NET de C# con AWS CDK

Por Ulili Nhaga, Arquitecto de aplicaciones en la nube en AWS
El AWS Cloud Development Kit (CDK) es un framework de desarrollo de software de código abierto para definir infraestructura en la nube mediante código y realizar su aprovisionamiento mediante AWS CloudFormation. Proporciona una abstracción de alto nivel para definir los recursos de AWS mediante lenguajes de programación modernos. Entre sus componentes, incluye aws-s3-assets, que es una construcción de alto nivel que abstrae el empaquetamiento de funciones AWS Lambda. El comportamiento predeterminado de esta construcción es comprimir todo el contenido en una carpeta y subirlo a un bucket de Amazon Simple Storage Service (Amazon S3). Esto funciona muy bien en los entornos de ejecución de Lambda, como Python o Node.js, que no requieren compilación de código, pero en el caso de .NET, Java o Go, que requieren compilación de código, necesitarás realizar pasos adicionales para restaurar las dependencias externas, compilar el código y publicar el binario. En esta publicación se analizará cómo simplificar la creación, el empaquetado y la publicación de funciones Lambda con .NET mediante AWS CDK.

Descripción general de la arquitectura

En esta publicación, te mostraremos cómo configurar una arquitectura serverless básica mediante AWS CDK. Esta arquitectura creará una API REST mediante  Amazon API Gateway, la integración de proxy de Lambda y la API web de ASP.NET en Lambda. La API web de ASP.NET es un framework para crear APIs web sobre .NET, donde puedes alojar y ejecutar tus funciones Lambda. Esta implementación de AWS CDK creará tres funciones Lambda con una arquitectura similar, escritas en .NET y gestionadas como proyectos independientes de API web de ASP.NET. Según la URL solicitada, el API Gateway dirigirá el tráfico a la función Lambda específica.
Architecture diagram with API Gateway and Three Lambda Functions

Paso a paso del código

Prerrequisitos

Para permitir que la aplicación AWS CDK compile y despliegue una función Lambda escrita en .NET, primero debes crear un objeto a partir de la clase BundlingOptions. El constructor Lambda utilizará este objeto para compilar y generar los archivos binarios a partir del código fuente de las funciones de Lambda en .NET durante el tiempo de síntetización del proyecto AWS CDK.

El siguiente ejemplo muestra cómo se puede definir la clase BundlingOptions para la función Lambda en .NET. Estas son las propiedades relevantes que tendrás que definir:

  • Imagen: debe recibir una imagen de contenedor (container image) de AWS que corresponda al entorno de ejecución de la funcion Lambda.
  • Usuario: establece el permiso de ejecución a “root” para crear y generar el archivo binario de salida.
  • outputType: define cómo el CDK debe esperar el paquete. Para esta demo, se define como archivo ZIP.
  • Comando: está esperando las instrucciones de compilación y empaquetado. En el siguiente fragmento de código de ejemplo, puedes ver cómo está implementado con la utilidadLambda.Tools – para la ayuda con los comandos .NET para empaquetar funciones Lambda.
var buildOption = new BundlingOptions()
{
    Image = Runtime.DOTNET_6.BundlingImage,
    User = "root",
    OutputType = BundlingOutput.ARCHIVED,
    Command = new string[]{
   "/bin/sh",
    "-c",
    " dotnet tool install -g Amazon.Lambda.Tools"+
    " && dotnet build"+
    " && dotnet lambda package --output-package /asset-output/function.zip"
    }
};
C#

Con esta definición del objeto BundlingOption, el AWS CDK gestionará el proceso de despliegue de un proyecto de una funcion Lambda .NET. El siguiente código es un ejemplo de cómo enviar esta definición de objeto BundlingOption para crear la función en AWS CDK:

var lambdaFunctionOne = new Function(this, "my-funcOne", new FunctionProps
{
    ...
    Code = Code.FromAsset("../apps/src/FunctionOne/", new Amazon.CDK.AWS.S3.Assets.AssetOptions
    {
        Bundling = buildOption
    }),
});
C#

Despliegue y Demo

El repositorio de GitHub «aws-samples/aws-cdk-build-package-publish-dotnet-lambda-function» proporciona la demo completa, para que puedas desplegarla y realizar peticiones a tres APIs de ejemplo para ver la implementación.

Despliegue

Siga los pasos que se indican a continuación para desplegar y probar las funciones Lambda .NET:

  1. Clonar el repositorio de GitHub
git clone https://github.com/aws-samples/aws-cdk-build-package-publish-dotnet-lambda-function.git
Bash

2. Abrir una sesión en un terminal y navegar a la carpeta infra dentro del código fuente del proyecto

cd /aws-cdk-build-package-publish-dotnet-lambda-function/infra
Bash

3. Na pasta Infra, digite CDK deploy usando seu perfil de conta da AWS

cdk deploy --profile <o alias do perfil de sua conta AWS>
Bash

Demo

Cuando finalice el despliegue, copie el Endpoint de la salida del terminal. El formato debe ser similar a: https://xxxyyyzzz .execute-api.us-east-1.amazonaws.com/prod/.  Utilice este endpoint  en su cliente de API REST favorito para realizar la solicitud. Esta demo utiliza Thunder Client. O puedes pegar la URL en la barra de direcciones del navegador y recibir los mensajes de esa manera. El siguiente ejemplo muestra una Petición y una Respuesta HTTP:

HTTP Get Request to FunctionOne URL using VSCode Thunder Client

O puedes usar CURL para realizar la peticion HTTP, como se muestra en el siguiente ejemplo:

Request: curl https://xxxyyyzzz.execute-api.us-west-2.amazonaws.com/prod/

Response: Welcome to running ASP.NET Core Minimal API on AWS Lambda - Function One!
Bash

Para probar la otra función Lambda, cambie la URL añadiendo /functiontwo o/ functionthree al final de la URL original. Por ejemplo, utilice https://xxxyyyzzz .execute-api.us-east-1.amazonaws.com/prod/functiontwo y realice una petición.

HTTP Get Request to FunctionTwo using VSCode Thunder Client

O puedes usar CURL para realizar la petición HTTP, como se muestra en el siguiente ejemplo:

Request: curl https://xxxyyyzzz.execute-api.us-west-2.amazonaws.com/prod/functiontwo

Response: Welcome to running ASP.NET Core Minimal API on AWS Lambda - Function Two!
Bash

Limpiando

Siga uno de estos dos métodos para eliminar el despliegue:

  1. Dentro de la consola de administración de AWS vaya a la sección de CloudFormation stacks y elimine el stack: InfraStack
  2. Desde línea de comandos, escriba CDK destroy en el mismo directorio desde el que realizó el despliegue.
cd ./aws-cdk-build-package-publish-dotnet-lambda-function/infra
cdk destroy --profile <your AWS account profile alias>
Bash

Conclusión

En esta publicacion, ha aprendido cómo optimizar la creación, el empaquetado y la publicación de funciones de Lambda con .NET mediante AWS CDK. También puedes aplicar pasos similares a otros entornos de ejecución Lambda que requirien compilación de código, como Java o Go. Este enfoque simplifica el proceso al gestionar la compilación del código de la función Lambda .NET y aprovisionar la infraestructura, lo que te permite crear e implementar funciones Lambda sin pasos de compilación adicionales ajenos al proceso de implementación de AWS CDK.

 

Este artículo fue traducido del Blog da AWS en Inglés.

 


Acerca del autor

Ulili Nhaga es arquitecto de aplicaciones en la nube en Amazon Web Services en San Diego, California. Ayuda a los clientes a migrar, modernizar, diseñar y crear aplicaciones nativas en la nube altamente escalables en AWS. Fuera del trabajo, a Ulili le encanta jugar al fútbol, correr, andar en bicicleta, hacer barbacoas brasileñas y disfrutar del tiempo en la playa.

 

 

 

 

Revisores

Borja Prado es Senior Solutions Architect en AWS, especializado en tecnologías Microsoft. Trabaja ayudando a nuestros clientes en la migración, despliegue y modernización de cargas de trabajo Windows en AWS. Además, está especializado en el diseño y arquitectura de soluciones escalables con .NET y es SME en Sitecore.