//

Eine Pipeline für Lambda mit AWS CodeStar erstellen

12.4.2018 | 4 Minuten Lesezeit

Im ersten Teil dieser Serie haben wir uns angesehen, wie wir das Alexa Skills Kit nutzen können, um einen Alexa Skill zu erstellen. In diesem Teil erstellen wir eine Deployment Pipeline für die Lambda Funktion, die die Funktionalität unseres Skills ausmacht. Dazu werden wir AWS CodeStar nutzen, denn durch CodeStar bekommen wir einerseits eine komplette Pipeline erzeugt und wir erhalten bereits Boilerplate Code in unserer Lambda, um direkt in die Entwicklung unseres Alexa Skills einzusteigen. Die Deployment Pipeline können wir dann in dem für uns erstellten CloudFormation Template nach unseren Wünschen anpassen.

Die Pipeline wäre für eine einfache Lambda nicht unbedingt nötig. Man könnte auch die Kommandozeile nutzen, um die Lambda zu deployen oder sie manuell per Zip-Datei in der AWS Konsole hochladen. Wenn das Projekt jedoch größer wird und mehrere Personen an der Lambda arbeiten, ist es von Vorteil, wenn z.B. Unit-Tests per CodeBuild ausgeführt werden und man auch mehrere Stages für Produktion und Development einrichten kann.

CodeStar Projekt erstellen

Eines gleich vorneweg: Wir müssen das CodeStar Projekt in der Region “EU (Ireland)” erstellen, weil wir sonst als Trigger der Lambda nicht das Alexa Skills Kit auswählen können.

Wir erstellen in CodeStar ein neues Projekt.

Wir werden aufgefordert, für CodeStar eine neue Rolle anzulegen, sodass CodeStar in der Lage ist, weitere Ressourcen wie die Lambda oder ein CodeCommit Repo zu erstellen. Wir können das einfach mit “Yes, create role” bestätigen.

Im nächsten Dialog wählen wir das CodeStar Template. Dazu suchen wir links im Suchfeld nach “Alexa” und wählen dann den “Fact Skill” aus. Dieser bietet uns schon etwas Boilerplate Code innerhalb der Lambda und konfiguriert die Lambda Trigger entsprechend unserer Bedürfnisse. Man könnte auch einen der anderen Alexa Skill Templates nutzen und würde einfach einen anderen Boilerplate Code in der Lambda bekommen.

Dann wählen wir den Projektnamen “WebsiteNavigator” und nutzen AWS CodeCommit für unser Git-Repository.

Anschließend sehen wir, wie die Pipeline aussehen wird, was wir mit einem Klick auf “Create Projekt” wohlwollend hinnehmen.

Im nächsten Dialog sehen wir bereits die URL für unser Repository am unteren Ende. Die Konfiguration einer IDE können wir überspringen durch einen Klick auf “Skip”.

Das war auch schon Alles. In den nächsten Minuten wird unsere Deployment Pipeline das erste Mal durchlaufen und unsere Lambda wird erzeugt und mit dem Boilerplate Code initialisiert. Wir können dem Status der Pipeline zusehen, wenn wir im Dashboard des CodeStar Projektes nach unten scrollen. Alternativ können wir in der linken Navigationsleiste auch auf den Punkt “Pipeline” klicken und sehen dort noch ein paar mehr Details.

Wenn die Pipeline durchgelaufen ist und alle Boxen grün sind, können wir uns einmal die Lambda anschauen, die für uns angelegt wurde. Wir wechseln dazu auf den AWS Service “Lambda” im Hauptmenü.

Die Lambda hat einen etwas kryptischen Namen, aber den können wir noch anpassen. Leider sind die Einstellungen für die Lambda noch nicht optimal. Zum Beispiel läuft die Lambda standardmäßig mit Node.js 4.3, obwohl es schon die neuere Version 8.10 gibt. Dies und andere Sachen werden wir noch kurz anpassen.

Die template.yml anpassen

Wir klonen uns nun das neu erstellte CodeCommit Repository mit dem Befehl:
git clone https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/WebsiteNavigator

Damit das funktioniert, müssen wir zuerst die AWS CLI und unsere Credentials richtig eingerichtet haben. Hier nochmal der Link mit einer Anleitung: https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up.html

Wenn wir uns den Code dann ansehen, ist alles noch recht übersichtlich:

Wir öffnen nun die template.yml, um die Einstellungen für die Lambda anzupassen.

1AWSTemplateFormatVersion: 2010-09-09
2Transform:
3- AWS::Serverless-2016-10-31
4- AWS::CodeStar
5 
6Parameters:
7  ProjectId:
8    Type: String
9    Description: AWS CodeStar projectID used to associate new resources to team members
10 
11Resources:
12  AlexaSkillFunction:
13    Type: AWS::Serverless::Function
14    Properties:
15      Handler: index.handler
16      Runtime: nodejs8.10      Timeout: 10      FunctionName: website-navigator      Role:
17          Fn::ImportValue:
18              !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
19      Events:
20          AlexaSkillEvent:
21                Type: AlexaSkill
22

Was wir hier sehen, ist ein CloudFormation Template, das Codestar für uns erzeugt hat. Es ist mit dem Serverless Application Model, kurz SAM, geschrieben. Die Befehle sind ein wenig kompakter gegenüber den normalen CloudFormation Befehlen. Dieses Template definiert unsere Lambda Funktion als Resource und konfiguriert als Trigger das Event mit dem Typ “AlexaSkill”. Dadurch wird unsere Lambda mit dem Alexa Skill Kit Trigger erstellt. Weitere Infos zu SAM gibt es hier: https://github.com/awslabs/serverless-application-model

Wir ändern den Wert für die Runtime von nodejs4.3 auf nodejs8.10 und fügen die Werte Timeout: 10 und FunctionName: website-navigator hinzu.

Warum ändern wir die Werte? Mit Node 8.10 haben wir mehr ES6 Features, die uns beim Programmieren das Leben etwas leichter machen. Das Timeout von 10 Sekunden ist notwendig, da wir Requests zu externen Servern machen werden und dafür Promises nutzen. Wenn die Promises resolved werden, erzeugen wir die Antwort für Alexa. Bei zu geringem Timeout (der Default sind 3 Sekunden) könnte unsere Lambda-Funktion sonst Gefahr laufen, vorzeitig beendet zu werden, ohne dass eine Antwort an Alexa gesendet wurde. Der FunctionName benennt unsere kryptische Lambda Funktion einfach um.

Wenn wir den Code einchecken und pushen, geht unsere Pipeline wieder los und die Lambda Funktion wird aktualisiert.

Nach der Aktualisierung hat unsere Funktion in der Liste der Lambda Funktionen den erwarteten Namen.

Damit ist unsere Pipeline komplett. Im nächsten Schritt werden wir die Lambda anpassen und die Logik für unseren Alexa Skill implementieren.

Bei Fragen oder Anregungen freue ich mich über einen Kommentar.

Beitrag teilen

Gefällt mir

0

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//

Gemeinsam bessere Projekte umsetzen

Wir helfen Deinem Unternehmen

Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.

Hilf uns, noch besser zu werden.

Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.