Wie zu Erstellen, Lambda-Funktionen, die Mit SAM

Während Lambda hat ein web-basierter editor für die Aktualisierung Ihrer Funktionen, es ist für Anfänger gedacht, und nicht, was Sie verwenden sollten in der Praxis. Erstellen von Funktionen mit SAM-Vorlagen können Sie Ihre Lambda-Funktionen in Ihre vorhandenen source control und CI/CD-pipeline.

Das Problem

Wenn Sie lernen AWS Lambda, Sie haben wahrscheinlich gesehen, diese Schnittstelle:

Dies ist die Lambda ‘ s-web-editor, das Ihnen erlaubt, Bearbeiten Sie die Funktion direkt von der Seite für diese Funktion. Es ist ideal für Anfänger, und können auch verwendet werden umfassend für kleine Projekte, wenn Sie verlängert werden mit der Cloud9-IDE, die es erlaubt lokale und remote-debugging.

Dies ist jedoch nicht der richtige Weg, Sie sollten schreiben, Lambda-Funktionen, vor allem, wenn Sie verwalten eine ganze microservices-backend läuft auf Hunderte von Ihnen.

Die Lösung ist AWS die Serverlose Anwendung Modell oder SAM kurz. AWS charakterisiert SAM wie ein Eichhörnchen, aus irgendeinem Grund:

In Wirklichkeit aber, SAM, ist ein YAML-template. In der Vorlage definieren Sie Ihre Anwendung, und alle Ressourcen, die er braucht, (wie die einzelnen Lambda-Funktionen). Anstatt die Aktualisierung Ihrer Funktionen manuell bereitstellen, können Sie updates über SAM, das werden handle es für Sie und aktualisieren Sie alle Ihre Funktionen auf einmal.

SAM ist eine Erweiterung von AWS CloudFormation. Sie teilen die meisten von der gleichen syntax, aber SAM ist optimiert und speziell für die Lambda. Immer, wenn eine neue änderung gemacht und bereitgestellt, SAM-updates die CloudFormation-Stacks, die es erstellt, wenn Sie zunächst die Bereitstellung der Vorlage.

Denn SAM ist nur eine YAML-Datei, kann es verfolgt und versioniert neben all Ihrer Funktionen. Dies ermöglicht es Ihnen, um es in einer CI/CD-pipeline zu automatisieren build-und deployment direkt aus dem Git. Mit allem eingerichtet, man könnte speichern Sie Ihre Lambda-Funktionen in einem Git-repository, und wenn Sie push-commits, CodePipeline werden den neuen änderungen automatisch und führen einen SAM-Bereitstellung erstellen Sie eine neue Lambda-version. Es ist sogar in der Lage, die Verlangsamung des fließenden Verkehrs zwischen den Versionen mit alias traffic balancing, die Ihnen helfen können, Fehler abzufangen, bevor Sie zu Problemen werden.

Wenn Sie mehr erfahren möchten über die Verwendung von SAM in einer CI/CD-pipeline zu automatisieren Lambda-Bereitstellungen können Sie Lesen Sie unsere Anleitung hier. Für jetzt aber konzentrieren wir uns auf die Verwendung von SAM selbst, und ausführen von manuellen Bereitstellungen von der CLI.

Wie Schreibt man eine SAM-Datei

Ein typisches SAM-Datei hat Folgendes format:

AWSTemplateFormatVersion: ‘2010-09-09’
Transformieren: AWS::Serverlose-2016-10-31
Beschreibung: Ein AWS-Serverlose Spezifikation template zur Beschreibung Ihrer Funktion
Ressourcen:
HelloWorld:
Typ: AWS::Serverlose::Funktion
Eigenschaften:
Handler: HelloWorld/index.handler
Laufzeit: nodejs8.10

Diese Vorlage definiert lediglich ein paar config-Variablen, und klicken Sie dann in der “Ressourcen” Abschnitt, der definiert, Lambda-Funktionen, indem Namen. Zum Beispiel, hier schaffen wir eine Funktion namens “HelloWorld.” diese Funktion läuft auf nodejs8.10, und seine handler (Startpunkt) befindet sich in einem Unterverzeichnis in ein index.js Datei.

Wir können, speichern Sie diese Vorlage als Vorlage.yml, und legen Sie Sie in ein Projekt-Verzeichnis neben den individuellen Verzeichnissen, die Funktion code.

Projektordner
|- Vorlage.yml
|- HelloWorld
|-index.js

Dies stellt bereits einen viel einfacheren Weg, um zu verwalten, Lambda-Funktionen. Mehrere Funktionen können verpackt werden in eine Vorlage, und alle bereitgestellten auf einmal.

Aber Lambda ist nicht nur code, und braucht viel mehr Konfiguration zu bekommen arbeiten. Vor allem, Lambda-Funktionen, benötigen Sie ein Ereignis auslösen der. Sie können definieren, das unter den “Eigenschaften” – Abschnitt für eine Funktion. Zum Beispiel, um die Funktion zur Auslösung eines API-Gateway

AWSTemplateFormatVersion: ‘2010-09-09’
Transformieren: AWS::Serverlose-2016-10-31
Beschreibung: Ein AWS-Serverlose Spezifikation template zur Beschreibung Ihrer Funktion
Ressourcen:
HelloWorld:
Typ: AWS::Serverlose::Funktion
Eigenschaften:
Handler: HelloWorld/index.handler
Laufzeit: nodejs8.10
Veranstaltungen:
HelloWorldApi:
Typ: Api
Eigenschaften:
Pfad: /helloworld
Methode: GET

Wenn dieser bereitgestellt wird, wird ein neuer API-Gateway für die Lambda-Projekt wird automatisch erstellt von SAM im CloudFormation, und im Zusammenhang mit der neu geschaffenen Funktion auf die Pfade angegeben.

SAM unterstützt alle Lambda anderen Quelle-Arten. Finden Sie weitere Unterlagen für die anderen Arten auf SAM ‘ s Github-Seite.

SAM kann auch bereitstellen, mehr als nur die Lambda-Funktionen. Weil es eine vollständige Erweiterung CloudFormation bereitstellen, können Sie andere Ressourcen, die Ihre Anwendung benötigen, die alle von SAM. Verwenden Sie zum Beispiel Lambda-Ausdruck mit API-Gateway, müssen Sie die grant-API-Gateway die Berechtigung zum aufrufen der Funktion. Sie können tun, dass mit dem folgenden Stück code, der die Definition einer AWS::Lambda::Permission resource:

AWSTemplateFormatVersion: ‘2010-09-09’
Transformieren: AWS::Serverlose-2016-10-31
Beschreibung: Ein AWS-Serverlose Spezifikation template zur Beschreibung Ihrer Funktion
Ressourcen:
HelloWorld:
Typ: AWS::Serverlose::Funktion
Eigenschaften:
Handler: HelloWorld/index.handler
Laufzeit: nodejs8.10
HelloWorldPermission:
Typ: AWS::Lambda::Zustimmung
Eigenschaften:
Aktion: lambda:InvokeFunction
FunctionName:
Fn::GetAtt:
– HelloWorld
– Arn
AUFTRAGGEBER: apigateway.amazonaws.com
SourceArn:
Fn::Sub: arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:*/*/*/*

Dies ist ein wenig komplizierter, aber im Grunde ist es Zuschüsse API-Gateway die Berechtigung zum aufrufen der Funktion in der FunctionName-Eigenschaft. Die Funktion Fn::GetAtt ist eine interne Funktion, die zurückgibt, die ARN für das “HelloWorld” – Funktion, da Sie nicht wissen, was die genaue ARN wird.

Dies ist nur an der Oberfläche kratzen alle, dass SAM das tun können. Für mehr Informationen über SAM template-Spezifikation sind, können Sie sich das vollständige schema auf Github oder Lesen der AWS-Developer-Guides für die Verwendung von SAM.

Die Bereitstellung einer SAM-Datei

Um für die SAM-Datei ist, etwas zu machen, es müssen bereitgestellt werden. Dies erfolgt automatisch, wenn Sie mit CodePipeline, aber Sie können auch auslösen, Bereitstellung manuell, was ist besser für Anfänger.

SAM hat seine eigene CLI getrennt von der standard-AWS ein. Können Sie es von pip:

pip installieren aws-sam-cli

Erste, Sie brauchen, um Paket alles, und senden Sie die Artefakte zu einem S3-bucket:

sam-Paket
–template-Datei template.yml
–Ausgabe-Vorlage-Datei-Paket.yml
–s3-bucket, bucket-Namen

Dann können Sie die Bereitstellung mithilfe der Ausgabe-Vorlage generiert aus dem vorherigen Befehl:

sam deploy
–template-Datei-Paket.yml
–stack-Namen sam-Hallo-Welt –
–Funktionen CAPABILITY_IAM

Beachten Sie, dass dieser Befehl implementiert einen stack mit einem bestimmten Namen definiert, die durch diesen Befehl; es gibt nichts, setzt den stack-Namen in der SAM-Vorlage selbst. Wenn Sie bereitstellen möchten, einen neuen Stapel, können Sie diesen Namen ändern hier. Ansonsten halten die gleichen Namen, und der stack wird aktualisiert, statt.

Wenn die SAM-Bereitstellung abgeschlossen ist, sehen Sie eine neue Anwendung mit Ihren Funktionen, sowie einen neuen stack in CloudFormation:


Posted

in

by

Tags: