Zoeken…


Invoering

Als onderdeel van de Serverless- beweging heeft AWS onlangs C # -ondersteuning voor AWS Lambda-functies aangekondigd. In dit artikel zal ik je laten zien hoe je een eenvoudige C # AWS Lambda-functie kunt ontwikkelen, installeren en aanroepen met Visual Studio 2015.

Voordat u met dit voorbeeld begint, gaat u eerst naar de sectie Opmerkingen van dit document en controleert u of alle vereiste componenten zijn geïnstalleerd.

Opmerkingen

Vereiste componenten installeren

Op het moment van schrijven (januari 2017) moeten de volgende componenten in deze volgorde op uw machine worden geïnstalleerd. Op de machine die ik gebruikte, was Windows 10 Home geïnstalleerd.

  1. Update 3 voor Visual Studio 2015
  2. AWS Toolkit voor Visual Studio 2015 - versie 1.11.2.0
  3. Microsoft .NET Core Tools (Preview 2) - versie 14.1.21111.0

Elk van deze componenten is actief ontwikkeld en vrijgegeven, dus controleer de koppelingen en versies dubbel en update dit document indien nodig.

Elk van deze kan enige tijd duren om te installeren , dus wees geduldig, doe een voor een om fouten te minimaliseren.

Ten slotte is het triest om Windows opnieuw op te starten voordat de ontwikkeling wordt gestart, maar altijd een goed idee na het uitvoeren van belangrijke installaties van ontwikkeltools op een Windows-box.

Stap 1. Maak een nieuwe oplossing in Visual Studio

  1. Open Visual Studio en selecteer Bestand -> Nieuw project
  2. Selecteer AWS Lambda-project met tests (.NET Core) voer hier de afbeeldingsbeschrijving in
  3. Vervolgens wordt het scherm Selecteer blauwdruk weergegeven. Selecteer de functie Leeg en klik op de knop Voltooien: voer hier de afbeeldingsbeschrijving in
  4. Ga naar Extra -> NuGet Pakketbeheer -> Pakketbeheerconsole.
  5. Typ in het consolevenster Install-Package Amazon.Lambda.Core
  6. Klik met de rechtermuisknop op uw project in de oplossingsverkenner en selecteer Pakketten herstellen. Dit is de laatste voorbereidingsstap voordat u begint met het schrijven van code.

voer hier de afbeeldingsbeschrijving in

Stap 2. Code toevoegen en wijzigen in uw project

  1. Open Function.cs en vervang de klassecode door het volgende:

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

U moet het volgende toevoegen met behulp van verklaringen bovenaan:

using System.Collections.Generic;
using Amazon.Lambda.Core;
  1. Voeg een bestand toe aan het project SimpleSerializer.cs
  2. Plaats de volgende code in dat bestand:
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;
        }

    }
}
}
  1. Wijzig in het testproject regel 23 van de FunctionTest.cs als volgt:

            var upperCase = function.FunctionHandler(null);
    
  2. Bouw uw oplossing - u zou geen buildfouten moeten hebben.

Stap 3 - Installeer uw Lambda-functie in AWS

  1. Klik met de rechtermuisknop op uw project en selecteer Publiceren naar AWS Lambda ...

  2. Het scherm Uploaden naar AWS Lambda verschijnt. Zorg ervoor dat de juiste regio is geselecteerd. Bewaar alle standaardwaarden. Voer vervolgens alleen de functienaam in: AWSLambdaFunctionAgeInYears en klik vervolgens op volgende. voer hier de afbeeldingsbeschrijving in

  3. Selecteer op de volgende pagina AWSLambdaRole voor het veld Rolnaam. Klik op Uploaden en de functie zou zonder fouten moeten uploaden. voer hier de afbeeldingsbeschrijving in

Stap 4. Roep uw AWS Lambda-functie op vanuit Visual Studio

  1. Na stap 3 hierboven opent Visual Studio het venster View Function met uw functie geladen.
  2. Voer linksonder in dit scherm de volgende json in het vak Sample Input in:
{
"month": "10",
"day": "28",
"year": "1979"
}

voer hier de afbeeldingsbeschrijving in

  1. Laatste stap: klik op de groene knop Invoke . De functie zal draaien op AWS en de reactie wordt weergegeven in de rechterbenedenhoek Response-venster.


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow