aws-lambda
Cómo desarrollar aws-lambda (C #) en una máquina local
Buscar..
Introducción
Como parte del movimiento Serverless , AWS anunció recientemente la compatibilidad con C # para las funciones de AWS Lambda. En este artículo, le mostraré cómo desarrollar, instalar y llamar a una simple función Lambda C # AWS utilizando Visual Studio 2015.
Antes de comenzar este ejemplo, primero vaya a la sección de Comentarios de este documento y asegúrese de tener todos los componentes necesarios instalados.
Observaciones
Instale los componentes requeridos
En el momento de redactar este documento (enero de 2017), los siguientes componentes deberán instalarse en su máquina en este orden. La máquina que utilicé tenía instalado Windows 10 Home.
- Visual Studio 2015 actualización 3
- AWS Toolkit para Visual Studio 2015 - versión 1.11.2.0
- Microsoft .NET Core Tools (Vista previa 2) - versión 14.1.21111.0
Cada uno de estos componentes se ha desarrollado y publicado activamente, por lo tanto, revise los enlaces y las versiones y actualice este documento cuando sea necesario.
Cada uno de estos puede tardar un tiempo en instalarse , así que tenga paciencia, haga uno por vez para minimizar los errores.
Por último, es triste reiniciar Windows antes de iniciar el desarrollo, pero siempre es una buena idea después de realizar importantes instalaciones de herramientas de desarrollo en un cuadro de Windows.
Paso 1. Crea una nueva solución en Visual Studio.
- Abra Visual Studio y seleccione Archivo -> Nuevo proyecto
- Seleccione AWS Lambda Project with Tests (.NET Core)
- A continuación se mostrará la pantalla Seleccionar plano . Seleccione Función vacía y haga clic en el botón Finalizar:
- Vaya a Herramientas -> NuGet Package Manager -> Package Manager Console.
- En la ventana de la consola, escriba Install-Package Amazon.Lambda.Core
- Haga clic con el botón derecho en su proyecto en el explorador de soluciones y seleccione Restaurar paquetes. Este es el paso final de preparación antes de comenzar a escribir el código.
Paso 2. Agrega y cambia el código en tu proyecto.
Abra
Function.cs
y reemplace el código de clase con lo siguiente:public class Function { /// <summary> /// A simple function that takes a birth date and returns Age in years /// </summary> /// <param name="input"></param> /// <returns>Age is years</returns> /// [LambdaSerializer(typeof(SimpleSerializer))] public string FunctionHandler(Dictionary<string, int> input) { var defaultMessage = "Age could not be determined."; var birthDate = new DateTime(input["year"], input["month"], input["day"]); var ageInYears = DateTime.Today.Year - birthDate.Year; if (birthDate.DayOfYear > DateTime.Today.DayOfYear) ageInYears--; defaultMessage = $"Age in years: {ageInYears}"; return defaultMessage; } }
Deberá agregar las siguientes declaraciones de uso cerca de la parte superior:
using System.Collections.Generic;
using Amazon.Lambda.Core;
- Agregue un archivo al proyecto llamado
SimpleSerializer.cs
- Coloque el siguiente código en ese archivo:
using System;
using System.IO;
using Amazon.Lambda.Core;
using Newtonsoft.Json;
namespace AWSLambdaFunctionAgeInYears
{
public class SimpleSerializer : ILambdaSerializer
{
public T Deserialize<T>(Stream requestStream)
{
string text;
using (var reader = new StreamReader(requestStream))
text = reader.ReadToEnd();
try
{
return JsonConvert.DeserializeObject<T>(text);
}
catch (Exception ex)
{
if (typeof(T) == typeof(System.String))
return (T)Convert.ChangeType(text, typeof(T));
throw ex;
}
}
public void Serialize<T>(T response, Stream responseStream)
{
StreamWriter streamWriter = new StreamWriter(responseStream);
try
{
string text = JsonConvert.SerializeObject(response);
streamWriter.Write(text);
streamWriter.Flush();
}
catch (Exception ex)
{
if (typeof(T) == typeof(System.String))
{
streamWriter.Write(response);
streamWriter.Flush();
return;
}
throw ex;
}
}
}
}
En el Proyecto de prueba, cambie la línea 23 de
FunctionTest.cs
a lo siguiente:var upperCase = function.FunctionHandler(null);
Construye tu solución - no deberías tener errores de compilación.
Paso 3 - Instale su función Lambda en AWS
Haga clic derecho en su proyecto y seleccione Publicar en AWS Lambda ...
Aparecerá la pantalla Cargar en AWS Lambda. Asegúrese de seleccionar la región correcta. Mantener todos los valores predeterminados. Luego solo ingrese el Nombre de la Función: AWSLambdaFunctionAgeInYears y luego haga clic en siguiente.
En la página siguiente, seleccione AWSLambdaRole para el campo Nombre de rol. Haga clic en Cargar y la función debería cargarse sin error.
Paso 4. Invoque su función AWS Lambda desde Visual Studio
- Después del paso 3 anterior, Visual Studio abrirá la ventana
View Function
con la función cargada. - En la parte inferior izquierda de esta pantalla, ingrese el siguiente json en el cuadro de entrada de muestra :
{
"month": "10",
"day": "28",
"year": "1979"
}
- Último paso: haz clic en el botón verde Invocar . La función se ejecutará en AWS y la respuesta se mostrará en la ventana de respuesta de la parte inferior derecha.