Suche…


Einführung

Als Teil der Serverless- Bewegung kündigte AWS kürzlich die C # -Unterstützung für AWS-Lambda-Funktionen an. In diesem Artikel zeige ich Ihnen, wie Sie mit Visual Studio 2015 eine einfache C # AWS-Lambda-Funktion entwickeln, installieren und aufrufen.

Bevor Sie mit diesem Beispiel beginnen, gehen Sie zuerst zum Abschnitt "Anmerkungen" dieses Dokuments und vergewissern Sie sich, dass alle erforderlichen Komponenten installiert sind.

Bemerkungen

Installieren Sie die erforderlichen Komponenten

Zum Zeitpunkt dieses Schreibens (Januar 2017) müssen die folgenden Komponenten in dieser Reihenfolge auf Ihrem Computer installiert werden. Auf dem Computer, den ich verwendete, war Windows 10 Home installiert.

  1. Visual Studio 2015-Update 3
  2. AWS Toolkit für Visual Studio 2015 - Version 1.11.2.0
  3. Microsoft .NET Core Tools (Vorschau 2) - Version 14.1.21111.0

Jede dieser Komponenten wird aktiv entwickelt und veröffentlicht. Überprüfen Sie daher die Links und Versionen und aktualisieren Sie dieses Dokument bei Bedarf.

Die Installation kann einige Zeit in Anspruch nehmen. Seien Sie also geduldig und führen Sie nacheinander Fehler aus, um Fehler zu minimieren.

Letztendlich ist ein Neustart von Windows vor dem Start der Entwicklung eine traurige Sache, aber immer eine gute Idee, nachdem umfangreiche Entwicklungswerkzeuginstallationen auf einer Windows-Box durchgeführt wurden.

Schritt 1. Erstellen Sie eine neue Lösung in Visual Studio

  1. Öffnen Sie Visual Studio und wählen Sie Datei -> Neues Projekt
  2. AWS-Lambda-Projekt mit Tests auswählen (.NET Core) Geben Sie hier die Bildbeschreibung ein
  3. Als Nächstes wird der Bildschirm " Blueprint auswählen" angezeigt. Wählen Sie Leere Funktion und klicken Sie auf die Schaltfläche Fertig stellen: Geben Sie hier die Bildbeschreibung ein
  4. Gehen Sie zu Extras -> NuGet Package Manager -> Package Manager Console.
  5. Geben Sie im Konsolenfenster Install-Package Amazon.Lambda.Core ein
  6. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, und wählen Sie Pakete wiederherstellen. Dies ist der letzte Vorbereitungsschritt, bevor Sie mit dem Schreiben von Code beginnen.

Geben Sie hier die Bildbeschreibung ein

Schritt 2. Fügen Sie Code hinzu und ändern Sie ihn in Ihrem Projekt

  1. Öffnen Sie Function.cs und ersetzen Sie den Klassencode durch Folgendes:

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

Sie müssen die folgenden using-Anweisungen oben hinzufügen:

using System.Collections.Generic;
using Amazon.Lambda.Core;
  1. Fügen Sie dem Projekt eine Datei mit dem Namen SimpleSerializer.cs
  2. Fügen Sie den folgenden Code in diese Datei ein:
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. Ändern Sie in dem Testprojekt Zeile 23 von FunctionTest.cs wie folgt:

            var upperCase = function.FunctionHandler(null);
    
  2. Bauen Sie Ihre Lösung auf - Sie sollten keine Buildfehler haben.

Schritt 3 - Installieren Sie Ihre Lambda-Funktion in AWS

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie In AWS Lambda veröffentlichen ...

  2. Der Bildschirm Upload to AWS Lambda wird angezeigt. Stellen Sie sicher, dass der richtige Bereich ausgewählt ist. Behalten Sie alle Standardeinstellungen bei. Geben Sie dann nur den Funktionsnamen ein: AWSLambdaFunctionAgeInYears und klicken Sie dann auf Weiter. Geben Sie hier die Bildbeschreibung ein

  3. Wählen Sie auf der nächsten Seite AWSLambdaRole für das Feld Rollenname aus. Klicken Sie auf Hochladen und die Funktion sollte ohne Fehler hochgeladen werden. Geben Sie hier die Bildbeschreibung ein

Schritt 4. Rufen Sie Ihre AWS-Lambda-Funktion in Visual Studio auf

  1. Nach Schritt 3 öffnet Visual Studio das Fenster View Function mit Ihrer geladenen Funktion.
  2. Geben Sie im linken unteren Bereich dieses Bildschirms den folgenden Json in das Feld Sample Input ein :
{
"month": "10",
"day": "28",
"year": "1979"
}

Geben Sie hier die Bildbeschreibung ein

  1. Letzter Schritt: Klicken Sie auf die grüne Schaltfläche " Invoke" . Die Funktion läuft auf AWS und die Antwort wird in den unteren rechten Antwortfenstern angezeigt.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow