Tipps und Tricks für AWS SAM

Serverless Applications implementieren und ausrollen

| Autor / Redakteur: Sascha Möllering * / Stephan Augsten

AWS SAM ermöglicht es, APIs, Lambda-Funktionen und DynamoDB-Tabellen für serverlose Applikationen bereitzustellen.
AWS SAM ermöglicht es, APIs, Lambda-Funktionen und DynamoDB-Tabellen für serverlose Applikationen bereitzustellen. (Bild: Amazon Web Services)

„Wir würden gerne eine Architektur ohne Server implementieren, um die Wartungsaufwände zu minimieren. Welche Empfehlungen und Entwurfsmuster existieren für serverlose Applikationen?“

In den vorangehenden Teilen dieser Blog-Serie haben wir einzelne Bestandteile einer serverlosen Applikation mit Frontend (Amazon S3), RESTful API (Amazon API Gateway), Geschäftslogik (AWS Lambda) und Datenbank (Amazon DynamoDB) vorgestellt. In diesem Blogpost wollen wir zeigen, wie sich mit Hilfe dieser Services eine serverlose Applikation implementieren und durch AWS SAM ausrollen lässt.

Das AWS Serverless Application Model, kurz AWS SAM, ist eine Erweiterung von AWS CloudFormation, die es auf einfache Weise ermöglicht, Amazon API Gateway APIs, AWS Lambda-Funktionen und Amazon DynamoDB-Tabellen bereitzustellen, die von serverlosen Applikationen genutzt werden.

Die Infrastruktur einer serverlosen Anwendung kann als SAM-Template in Form einer JSON- oder YAML-Datei beschrieben werden. Die vollständige Spezifikation von AWS SAM mit den nutzbaren Ressourcentypen ist bei Github zu finden. Folgender Ausschnitt aus einem Template beschreibt eine CRUD-Applikation (Create, Read, Update, Delete), die Amazon API Gateway, AWS Lambda und Amazon DynamoDB nutzt.

AWSTemplateFormatVersion: 2010-09-09
Transform:
- AWS::Serverless-2016-10-31
- AWS::CodeStar

Parameters:
   ProjectId:
      Type: String
      Description: AWS SAM example application

Resources:
   getUsers:
      Type: AWS::Serverless::Function
      Properties:
         Handler: com.aws.codestar.projecttemplates.handler.GetUsersHandler
         Runtime: java8
         Timeout: 60
         CodeUri: codeStarCrud.jar
         MemorySize: 256
         Policies: AmazonDynamoDBReadOnlyAccess
         Environment:
            Variables:
               TABLE_NAME: !Ref MySimpleTable
         Role:
            Fn::ImportValue:
               !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
         Events:
            GetEvent:
               Type: Api
               Properties:
                  Path: /users/{id}
                  Method: get

   createUsers:
         Type: AWS::Serverless::Function
         Properties:
            Handler: com.aws.codestar.projecttemplates.handler.CreateUsersHandler
            Runtime: java8
            Timeout: 60
            CodeUri: codeStarCrud.jar
            MemorySize: 256
            Policies: AmazonDynamoDBFullAccess
            Environment:
               Variables:
                  TABLE_NAME: !Ref MySimpleTable
            Role:
               Fn::ImportValue:
                  !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
            Events:
               GetEvent:
                  Type: Api
                  Properties:
                     Path: /users
                     Method: post

   MySimpleTable:
         Type: 'AWS::Serverless::SimpleTable'
         PrimaryKey:
            Name: id
            Type: String
         ProvisionedThroughput:
            ReadCapacityUnits: 5
            WriteCapacityUnits: 5

Unter Resources finden sich die auszurollenden Bestandteile der Gesamtapplikation; in dem Beispiel werden zwei REST-Ressourcen mit den entsprechenden HTTP-Verben definiert sowie die Lambda-Funktionen, die durch diese Ressourcen aufgerufen werden. Für die Lambda-Funktionen sind die Handler und zusätzliche Parameter wie beispielsweise die Runtime und die Speichergröße spezifiziert.

In dem SAM-Template kann darüber hinaus angegeben werden, welche IAM-Policies für die Ausführungsrolle der Lambda-Funktion genutzt werden, um zu steuern, welche Zugriffsrechte die jeweilige Lambda-Funktion besitzt. In diesem Beispiel werden für die Lambda-Funktionen minimale Zugriffsrechte vergeben: die Funktion zum Lesen der Daten auf der Tabelle erhält lediglich die Berechtigung zum Lesen.

Im unteren Abschnitt des AWS-SAM-Templates wird die für Anwendung notwendige DynamoDB-Tabelle mit jeweils fünf Read- und Write-Capacity Units mit Hilfe der Ressource AWS::Serverless::SimpleTable definiert. SimpleTable erzeugt eine einfach DynamoDB-Tabelle mit einem einzelnen Primärschlüssel. In diesem Fall wird als Primärschlüssel das Attribut „id“ genutzt, das eine Zeichenkette enthält. Falls eine komplexere Tabelle genutzt werden soll, eignet sich der Ressourcentyp AWS::DynamoDB::Table.

Um eine auf AWS SAM basierende Anwendung zu paketieren und auszurollen, kann die AWS CLI folgendermaßen genutzt werden:

aws cloudformation package \
   --template-file sam_template.yaml \
   --output-template-file serverless-output.yaml \
   --s3-bucket s3-bucket-name

Dieses package-Kommando generiert ein AWS SAM-Template mit dem Namen serverless-output.yaml, das eine CodeUri enthält, die auf die auszurollende ZIP-Datei im spezifizierten S3-Bucket zeigt. Nun kann die Anwendung mit dem deploy-Kommando ausgerollt werden:

aws cloudformation deploy \
   --template-file serverless-output.yaml \
   --stack-name new-stack-name \
   --capabilities CAPABILITY_IAM

Sascha Möllering
Sascha Möllering (Bild: AWS Germany GmbH)

Um die Ergebnisse nach dem Deployment zu verifizieren, lässt sich AWS CloudFormation in der AWS-Konsole öffnen, um den neu erzeugten CloudFormation Stack überprüfen zu können.

* Sascha Möllering arbeitet als Solutions Architect bei der Amazon Web Services Germany GmbH. Seine Interessen liegen in den Bereichen Automation, Infrastructure as Code, Distributed Computing, Container und JVM.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 44831652 / Tipps und Tricks mit AWS)