aws-lambda - RIP TutorialJava AWS-Lambda S3 wird ausgelöst Eine AWS-Lambda-Funktion kann an ein...

48
aws-lambda #aws- lambda

Transcript of aws-lambda - RIP TutorialJava AWS-Lambda S3 wird ausgelöst Eine AWS-Lambda-Funktion kann an ein...

aws-lambda

#aws-

lambda

Inhaltsverzeichnis

Über 1

Kapitel 1: Erste Schritte mit aws-lambda 2

Bemerkungen 2

Auslöser können sein: 2

Lambda ist am besten für die serverlose Datenverarbeitung in Echtzeit konzipiert, z. 2

Examples 2

Installation oder Setup 2

Java AWS-Lambda S3 wird ausgelöst 8

Kapitel 2: alexa-skills-kit 11

Examples 11

Erstelle Alexa Skills Kit mit Hilfe von Blueprint 11

Kapitel 3: AWS Lambda mit Python 13

Examples 13

Warum AWS Lambda? 13

Hallo Welt - Lambda-Funktion 13

Kapitel 4: AWS Lambda mit S3 25

Einführung 25

Examples 25

Cheatsheet 25

AWS-SDK für Javascript 25

Beispielfunktion 25

S3 ausführen 25

Verwenden Sie mit Elasticache Redis 25

Kapitel 5: AWS Lambda wird von S3 ausgelöst 27

Examples 27

Echo Input Args in Java 27

Kapitel 6: aws-lambda wird durch S3 ausgelöst 28

Syntax 28

Parameter 28

Bemerkungen 28

Dateinamen 28

Datensatzschlüssel 28

Weitere Beispiele & Tests 28

Examples 29

S3 PUT-Betrieb 29

Kapitel 7: Serverless Framework 30

Einführung 30

Bemerkungen 30

Examples 30

Serverlos 30

Einfache CRUD-Operation erstellen 30

Kapitel 8: Wie entwickelt man aws-lambda (C #) auf einem lokalen Rechner? 38

Einführung 38

Bemerkungen 38

Installieren Sie die erforderlichen Komponenten 38

Examples 38

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

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

Schritt 3 - Installieren Sie Ihre Lambda-Funktion in AWS 42

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

Credits 45

Über

You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: aws-lambda

It is an unofficial and free aws-lambda ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official aws-lambda.

The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.

Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to [email protected]

https://riptutorial.com/de/home 1

Kapitel 1: Erste Schritte mit aws-lambda

Bemerkungen

AWS Lambda ist ein serverloses Setup zum Ausführen von Funktionen in der Cloud. Es nutzt vorhandene Amazon Web Services-Technologien für eine unbegrenzte Skalierung und Ausführung, wenn dies in der eigenen isolierten Umgebung erforderlich ist. Mit Lambda können Sie Ihren Code hochladen, ihn so konfigurieren, dass er basierend auf einer Vielzahl von Triggern ausgeführt wird, und den Prozess nach dessen Abschluss automatisch außer Betrieb setzen. Es arbeitet mit einem Pay-per-Use-Modell und ist äußerst kostengünstig und leicht skalierbar.

AWS Lambda unterstützt Code, der in Node.js (JavaScript), Python, Java (Java 8-kompatibel) und C # (.NET Core) geschrieben ist. Ihr Code kann vorhandene Bibliotheken enthalten, auch native.

Auslöser können sein:

HTTP-Endpunkte

Mobile Apps•Andere AWS Services (einschließlich REST-Implementierung mit Amazon API Gateway)•

Lambda ist am besten für die serverlose Datenverarbeitung in Echtzeit konzipiert, z.

Dateiverarbeitung von UploadsTranskodierung○

Indizierung○

Validierung○

Größenänderung und Filterung○

Streaming-Datenanalyse•Telemetrie•Ausführen als methodenbasiertes Mobile- und Web-Backend•Erweiterung und Verknüpfung anderer AWS-Produkte•

Examples

Installation oder Setup

Melden Sie sich bei Ihrer AWS Console an und klicken Sie auf der Registerkarte Dienste auf Lambda .

1.

https://riptutorial.com/de/home 2

Unter Funktionen können Sie eine Lambda-Funktion mit der gleichnamigen Schaltfläche

erstellen .

2.

Es wird ein Bildschirm angezeigt, auf dem Sie einen Entwurf auswählen können. Dies sind einfach Ausgangspunkte für bestehende Lambda-Funktionen, um schnell mit Lambda zu beginnen.

3.

https://riptutorial.com/de/home 3

Auf dem nächsten Bildschirm können Sie alle Trigger konfigurieren, mit denen Sie diese Lambda-Funktion deaktivieren möchten. Sie können zwischen keinen Auslösern (durch manuelle Einrichtung später je nach Aufgabe), API-Gateway (zum Erstellen eines serverlosen REST-Clients), Alexa Skills oder einer Vielzahl anderer Funktionen auswählen, um die von Ihnen erstellte Funktion auszulösen.

4.

https://riptutorial.com/de/home 4

Sie schließen die Konfiguration auf dem nächsten Bildschirm ab, indem Sie Name , Beschreibung festlegen, eine Laufzeit auswählen, die Funktion bearbeiten, eine ZIP-Datei hochladen oder eine Datei aus Amazon S3 hochladen. Wählen Sie eine Rolle aus (nützlich für Berechtigungen) Interaktion zwischen AWS-Diensten), legen Sie den Speicher und die Grenzen fest und bereiten Sie Ihre App für den Live-Einsatz vor.

5.

https://riptutorial.com/de/home 5

https://riptutorial.com/de/home 6

Zuletzt überprüfen Sie Ihre Funktion und erstellen sie. Da Lambda das Pay-Per-Use-Modell verwendet, fallen keine Ladegeräte an, bis Sie Ihre neu erstellte Funktion verwenden.

6.

https://riptutorial.com/de/home 7

Java AWS-Lambda S3 wird ausgelöst

Eine AWS-Lambda-Funktion kann an ein bestimmtes Bucket-Ereignis angehängt werden. Wenn eine Datei / ein Ordner erstellt oder entfernt wird, kann ein Ereignis die Ausführung der Lambda-Funktion auslösen.

Eine einfache Lambda-Funktion zum Drucken des Namens einer hochgeladenen Datei

Dies ist ein einstufiges Lambda-Projekt zum Drucken des Namens einer hochgeladenen Datei. Für maven müssen wir diese Abhängigkeiten hinzufügen:

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.1.0</version>

https://riptutorial.com/de/home 8

<type>jar</type> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-events</artifactId> <version>1.3.0</version> <type>jar</type> </dependency> </dependencies>

Gehen wir jetzt zu unserer HelloWorld-Klasse:

package com; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.S3Event; import com.amazonaws.services.s3.event.S3EventNotification; public class HelloWorld implements RequestHandler< S3Event, String> { @Override public String handleRequest(S3Event event, Context ctx) { S3EventNotification.S3EventNotificationRecord record=event.getRecords().get(0); System.out.println("Bucket Name is "+record.getS3().getBucket().getName()); System.out.println("File Path is "+record.getS3().getObject().getKey()); return null; } }

Der nächste Schritt besteht darin, das Projekt mit mvn zu erstellen.

Nachdem Sie das Projekt erstellt haben, müssen Sie es in AWS-Lambda hochladen. Gehen Sie zu Lambda und wählen Sie "Lambda-Funktion erstellen". Überspringen Sie den Teil, in dem Sie den Blueprint auswählen, da Java normalerweise nicht vorhanden ist.

Überspringen Sie auch "Auslöser konfigurieren", da wir ihn an einem anderen Ort konfigurieren. Geben Sie auf der nächsten Seite einen Namen für Ihre erste Lambda-Funktion ein, dann eine kleine Beschreibung und wählen Sie Java als Laufzeit.

Wählen Sie als "Code-Eingabetyp" die Option "Upload aus einer ZIP-Datei" und wählen Sie dann am nächsten Speicherort Ihre ZIP-Datei aus, um sie hochzuladen.

Der knifflige Teil auf dieser Seite ist das Feld "Handler". Im Handler-Feld müssen Sie den Ort der Klasse angeben, in der der RequestHandler implementiert wird. Diese Klasse ist der Einstiegspunkt für das Lambda und Ihre Lambda-Funktion funktioniert nicht, wenn dies nicht korrekt angegeben wird. Für unseren Fallbearbeiter ist "com.HelloWorld"

Anbringen eines S3-Auslösers an Lambda:

Hier fügen wir einen Auslöser zum Hochladen der S3-Datei hinzu

Gehe zu S3, wähle den Bucket und dann "Eigenschaften".•Gehen Sie im Abschnitt "Eigenschaften" zu "Ereignisse".•Ereignisdetails hinzufügen Wählen Sie im Feld "Ereignisse" aus, wie Sie Ihren Lambda •

https://riptutorial.com/de/home 9

auslösen möchten. Wir wählen "ObjectCreated (All)". Beachten Sie, dass sich die Lambda-Funktion und der Bucket in derselben Amazon Region befinden müssenAktivieren Sie für "Senden an" die Lambda-Funktion, und wählen Sie Ihre Lambda-Funktion aus der Liste aus.

Überwachen der Lambda-Ausgabe

Jetzt laden wir eine Datei in den Bucket hoch, der den Lambda-Auslöser hat. Um die Lambda-Ausgaben und Protokolle anzuzeigen, gehen Sie zu "CloudWatch", wählen Sie "Protokolle" und anschließend Ihre Lambda-Funktion. Unter "Log Streams" werden möglicherweise viele Einträge angezeigt. Wählen Sie den neuesten Eintrag aus, und öffnen Sie ihn. Dort sollten Sie die Ausgabe der Lambda-Ausführung sehen können.

Erste Schritte mit aws-lambda online lesen: https://riptutorial.com/de/aws-lambda/topic/2357/erste-schritte-mit-aws-lambda

https://riptutorial.com/de/home 10

Kapitel 2: alexa-skills-kit

Examples

Erstelle Alexa Skills Kit mit Hilfe von Blueprint

Melden Sie sich bei der AWS Management Console an und navigieren Sie zu AWS Lambda. Klicken Sie auf Neue Funktion erstellen, um dieses Fenster anzuzeigen.

Wählen Sie Laufzeitumgebung, aber Blueprint (Beispielcode) nur für node.js und Python

Es gibt zwei Beispiele für das Alexa Skills Kit. Sie können diese Sache filtern.

Durch Auswahl eines dieser Blaupausen. Sie können das Fenster " Auslöser konfigurieren" anzeigen, indem Sie das erforderliche Feld ausfüllen.

Im Funktionsfenster konfigurieren können Sie einen Namen für Ihre Lambda-Funktion hinzufügen und müssen eine Rolle für die Funktionsausführung hinzufügen.

https://riptutorial.com/de/home 11

Jetzt können Sie eine Funktion erstellen.

Nach der Erstellung können Sie Ihre Funktion testen. Klicken Sie auf die Aktionsschaltfläche

Wählen Sie hier Testereignis konfigurieren aus

Wählen Sie in diesem Fenster die Ereignisvorlage alexa aus. Der Name der Vorlage hängt von der von Ihnen ausgewählten Blaupause ab

Nach Auswahl dieser Vorlage können Sie Ihr Codebeispiel testen.

alexa-skills-kit online lesen: https://riptutorial.com/de/aws-lambda/topic/7698/alexa-skills-kit

https://riptutorial.com/de/home 12

Kapitel 3: AWS Lambda mit Python

Examples

Warum AWS Lambda?

AWS Lambda unterstützt

Transparente Skalierbarkeit und Verfügbarkeit•Entwicklerfreundliche Vorgänge und keine Notwendigkeit, Server zu verwalten•Native Integration in AWS-Dienste•Keine Notwendigkeit für Leerlaufzeiten zu zahlen•RESTful Integration•Überwachen der RESTful-Schnittstelle mithilfe des AWS-API-Gateways•

Hallo Welt - Lambda-Funktion

Dies ist eine der einfachsten Lambda-Funktionen. Es entspricht dem Hello World-Programm. Um Ihr erstes Programm zu erstellen, folgen Sie den unten angegebenen Schritten.

Melden Sie sich bei AWS Console an1. Klicken Sie unter Berechnen auf Lambda2. Klicken Sie auf Erstellen einer Lambda-Funktion 3.

https://riptutorial.com/de/home 13

Überspringen Sie den ausgewählten Blueprint-Abschnitt4. Klicken Sie im Trigger konfigurieren auf das gepunktete Rechteck 5.

https://riptutorial.com/de/home 14

https://riptutorial.com/de/home 15

Wählen Sie API-Gateway aus6. Füllen Sie die erforderlichen Details wie auf dem Bild aus. 7.

https://riptutorial.com/de/home 16

https://riptutorial.com/de/home 17

API-Name ist der Name Ihrer API, die Sie erstellen möchten. Ressourcenmuster ist der URL-Pfad, den Sie Ihre Lambda-Funktion aufrufen können. Wählen Sie die gewünschte http-Methode aus. In unserem Beispiel wählen wir GET. In AWS kann das Staging auf verschiedene Arten durchgeführt werden, z. B. prod, dev ... Es hilft Ihnen, die Funktionen von prod und dev zu unterscheiden. Zu Demonstrationszwecken können Sie Sicherheit als "Offen" auswählen (wird in der Produktion nicht empfohlen). Klicken Sie auf "Weiter"API-Name ist der Name Ihrer API, die Sie erstellen möchten. Ressourcenmuster ist der URL-Pfad, den Sie Ihre Lambda-Funktion aufrufen können. Wählen Sie die gewünschte http-Methode aus. In unserem Beispiel wählen wir GET. In AWS kann das Staging auf verschiedene Arten durchgeführt werden, z. B. prod, dev ... Es hilft Ihnen, die Funktionen von prod und dev zu unterscheiden. Zu Demonstrationszwecken können Sie Sicherheit als "Offen" auswählen (wird in der Produktion nicht empfohlen). Klicken Sie auf "Weiter"Konfigurieren Sie die Funktion wie folgt 8.

https://riptutorial.com/de/home 18

https://riptutorial.com/de/home 19

Geben Sie den Funktionsnamen, eine Beschreibung Ihrer Funktion und die Laufzeitumgebung an. Wir wählen Python als Laufzeitumgebung.Ändern Sie den Code.

Hier drucken wir das aws-Lambda-Event in Cloudtrail, das kostenlos ist. Es gibt auch eine Zeichenfolge zurück.

9.

Geben Sie einen Lambda-Funktionshandler und eine Rolle an 10.

https://riptutorial.com/de/home 20

https://riptutorial.com/de/home 21

Stellen Sie sicher, dass der Handler-Name mit lambda_function beginnen soll. Erstellen Sie außerdem eine neue Rolle, um die Lambda-Funktion auszuführen. Wählen Sie die Menge an Hauptspeicher, die zur Ausführung Ihrer Funktion erforderlich ist. Wählen Sie das Standardzeitlimit aus und klicken Sie auf WeiterKlicken Sie auf Funktion erstellen11. Nun kann Ihre Funktion ausgeführt werden. Klicken Sie auf den von den aws bereitgestellten Link

12.

https://riptutorial.com/de/home 22

https://riptutorial.com/de/home 23

Wenn Sie auf den Link klicken, wird Ihre Lambda-Funktion im Hintergrund ausgeführt und Sie erhalten eine Ausgabe im Browser.

AWS Lambda mit Python online lesen: https://riptutorial.com/de/aws-lambda/topic/6698/aws-lambda-mit-python

https://riptutorial.com/de/home 24

Kapitel 4: AWS Lambda mit S3

Einführung

Lambda-Entwickler werden Probleme behandeln, die die Verwendung anderer AWS-Ressourcen erfordern. Dieses Thema konzentriert sich auf S3 (Simple Storage Service), der häufig zum Speichern statischer Dateien und anderer Konfigurationen verwendet wird. In dieser Dokumentation wird in Betracht gezogen, AWS-SDK in Lambda zu verwenden, auf Dateien in S3 von Lambda zuzugreifen und Lambda-Funktionen auszulösen, wenn ein S3-Ereignis ausgelöst wird

Examples

Cheatsheet

AWS-SDK für Javascript

Lambda enthält in seiner globalen Version aws-sdk ( https://aws.amazon.com/sdk-for-node-js/), sodass dieses Knoten-Modul nicht in die ZIP-Datei hochgeladen werden muss.

const AWS = require('aws-sdk');

Beispielfunktion

module.exports.myFunction = (event, context, callback) => { const response = { statusCode: 200, body: 'Hello Lambda!', }; return callback(null, response); };

S3 ausführen

const s3 = new AWS.S3 ();

Verwenden Sie mit Elasticache Redis

//make sure redis node-module is added in zip const redis = require('redis'); //the redis information should be stored in the environment, not hard coded const redis_options = { host: process.env.REDIS_HOST, port: process.env.REDIS_PORT

https://riptutorial.com/de/home 25

}; module.exports.myFunction = (event, context, callback) => { try { let client = redis.createClient(redis_options); context.callbackWaitsForEmptyEventLoop = false; client.on('connect', () => { console.log('Connected:', client.connected); }); client.on('end', () => { console.log('Connection closed.'); }); client.on('ready', function () { console.log('Connection ready.'); client.keys('*', (err, keys) => { //always quit the redis client when no longer needed //else the connection will be used up client.quit(); const response = { statusCode: 200, body: keys, }; return callback(null, response); }); } catch (err) { if (client) { client.quit();} console.log('Error!: ' + err.message); callback(err); } };

AWS Lambda mit S3 online lesen: https://riptutorial.com/de/aws-lambda/topic/9286/aws-lambda-mit-s3

https://riptutorial.com/de/home 26

Kapitel 5: AWS Lambda wird von S3 ausgelöst

Examples

Echo Input Args in Java

Sie können diese Informationen einfach abrufen, indem Sie die Eingabe in Ihrer Handler-Funktion deaktivieren. Zum Beispiel in Java:

public String handleRequest(String input, Context context) { context.getLogger().log("Input: " + input); String output = "Input:" + System.getProperty("line.separator") + input; return output; }

AWS Lambda wird von S3 ausgelöst online lesen: https://riptutorial.com/de/aws-lambda/topic/6216/aws-lambda-wird-von-s3-ausgelost

https://riptutorial.com/de/home 27

Kapitel 6: aws-lambda wird durch S3 ausgelöst

Syntax

Deserialisiertes JSON-basiertes Objekt•"Records" -Taste hat ein oder mehrere tatsächliche Ereignisse•Jedes Unterereignisobjekt enthält alle Informationen, die Sie benötigen, um die Änderungen zu ermitteln

Parameter

Parameter Einzelheiten

Records -> [] -> s3 -> bucket -> name Der Name des S3-Buckets

Records -> [] -> s3 -> object -> key Der Pfad und Name der Datei.

Bemerkungen

Dateinamen

Im Gegensatz zu den meisten Dateipfaden enthält der S3-Schlüsselname (JSON-Schema: $.Records[0].s3.object.key ) keinen führenden Schrägstrich. Wenn Sie eine Datei im Pfad s3://mybucket/path/file.txt , s3://mybucket/path/file.txt der Schlüssel path/file.txt

Zumindest in Python ist der Schlüsselfeldwert UTF-8-URL-kodiert. Dies fällt auf, wenn der Dateiname Leerzeichen oder Nicht-ASCII-Zeichen enthält. Das Feld muss in der URL decodiert, dann UTF-8 decodiert - Siehe Nicht-ASCII - Dateinamen von S3 Benachrichtigungsereignis in Lambda Get

Datensatzschlüssel

Innerhalb der Taste "Records" des Ereignisses können mehrere derselben (oder unterschiedlichen) Aktionen ausgeführt werden. In der Praxis wird jedoch normalerweise ein Ereignis pro Aufruf Ihrer Lambda-Funktion angezeigt.

Weitere Beispiele & Tests

Es gibt tatsächlich Beispielereignisse in der Lambda-Konsole, wenn Sie Aktionen -> Testereignis konfigurieren auswählen. Sie können jedoch die PUT-Operation in den obigen Beispielen sehen.

https://riptutorial.com/de/home 28

Sie können Testereignisse über die AWS Lambda-Konsole ändern und senden, um zu sehen, wie Ihre Funktion reagiert.

Examples

S3 PUT-Betrieb

{ "Records": [ { "eventVersion": "2.0", "eventTime": "1970-01-01T00:00:00.000Z", "requestParameters": { "sourceIPAddress": "127.0.0.1" }, "s3": { "configurationId": "testConfigRule", "object": { "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901", "key": "HappyFace.jpg", "size": 1024 }, "bucket": { "arn": "arn:aws:s3:::mybucket", "name": "sourcebucket", "ownerIdentity": { "principalId": "EXAMPLE" } }, "s3SchemaVersion": "1.0" }, "responseElements": { "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH", "x-amz-request-id": "EXAMPLE123456789" }, "awsRegion": "us-east-1", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "eventSource": "aws:s3" } ] }

aws-lambda wird durch S3 ausgelöst online lesen: https://riptutorial.com/de/aws-lambda/topic/6618/aws-lambda-wird-durch-s3-ausgelost

https://riptutorial.com/de/home 29

Kapitel 7: Serverless Framework

Einführung

Das Open-Source-Anwendungs-Framework zum einfachen Erstellen serverloser Architekturen auf AWS Lambda & more. In diesem Abschnitt wird beschrieben, wie Sie ein Serverless-Framework für die Anwendungsentwicklung mit relevanten Beispielen einrichten.

Bemerkungen

"Serverless" ist ein Framework: https://serverless.com/

Examples

Serverlos

Serverlos global installieren

npm install serverless -g

Erstellen Sie eine AWS Lamdba-Funktion in Node.js

serverless create --template aws-nodejs

Beispiel für einen handler.js

'use strict'; // Your first function handler module.exports.hello = (event, context, cb) => cb(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event } ); // You can add more handlers here, and reference them in serverless.yml

Stellen Sie Ihr AWS-Konto bereit

serverless deploy

Einfache CRUD-Operation erstellen

Erstellen Sie einfache CRUD-Vorgänge mit Serverless Framework

Installieren Sie das Serverless-Framework global

https://riptutorial.com/de/home 30

npm install serverless -g

Erstellen Sie einen einfachen Lambda-Service

serverless create --template aws-nodejs --path myService

Gehen Sie zum myService-Verzeichnis, das es enthalten soll

serverless.yml1. handler.js2. event.json3.

Alle Serverless-Dienstkonfigurationen werden von serverless.yml verwaltet Ändern Sie den Inhalt, um den CRUD-Dienst zu definieren.

Beispiel für eine serverless.yml-Datei

service: serverless-crud provider: name: aws runtime: nodejs4.3 region: us-east-1 stage: dev iamRoleStatements: - Effect: Allow Action: - dynamodb:DescribeTable - dynamodb:Query - dynamodb:Scan - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: "arn:aws:dynamodb:us-east-1:*:*" functions: create: handler: handler.create events: - http: path: todos method: post cors: true readAll: handler: handler.readAll events: - http: path: todos method: get cors: true readOne: handler: handler.readOne events:

https://riptutorial.com/de/home 31

- http: path: todos/{id} method: get cors: true update: handler: handler.update events: - http: path: todos/{id} method: put cors: true delete: handler: handler.delete events: - http: path: todos/{id} method: delete cors: true resources: Resources: TodosDynamoDbTable: Type: 'AWS::DynamoDB::Table' DeletionPolicy: Retain Properties: AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: id KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1 TableName: 'todos'

Diese Datei definieren

Programmiersprache für Lambda-Funktionen1. Richtlinie zur Ausführung der Lambda-Funktion2. Dynamodb-Tabellenerstellung und ihre Richtlinien3. HTTP-Endpunkt (API-Gateway-Endpunkt)4.

Dann müssen Sie in der Datei handler.js eine Lambda-Funktion (z. B. node.js) definieren, die Sie definieren können.

'use strict'; const todosCreate = require('./todos-create.js'); const todosReadAll = require('./todos-read-all.js'); const todosReadOne = require('./todos-read-one.js'); const todosUpdate = require('./todos-update.js'); const todosDelete = require('./todos-delete.js'); module.exports.create = (event, context, callback) => {

https://riptutorial.com/de/home 32

todosCreate(event, (error, result) => { const response = { statusCode: 200, headers: { "Access-Control-Allow-Origin" : "*" }, body: JSON.stringify(result), }; context.succeed(response); }); }; module.exports.readAll = (event, context, callback) => { todosReadAll(event, (error, result) => { const response = { statusCode: 200, headers: { "Access-Control-Allow-Origin" : "*" }, body: JSON.stringify(result), }; context.succeed(response); }); }; module.exports.readOne = (event, context, callback) => { todosReadOne(event, (error, result) => { const response = { statusCode: 200, headers: { "Access-Control-Allow-Origin" : "*" }, body: JSON.stringify(result), }; context.succeed(response); }); }; module.exports.update = (event, context, callback) => { todosUpdate(event, (error, result) => { const response = { statusCode: 200, headers: { "Access-Control-Allow-Origin" : "*" }, body: JSON.stringify(result), }; context.succeed(response); }); }; module.exports.delete = (event, context, callback) => { todosDelete(event, (error, result) => { const response = { statusCode: 200, headers: { "Access-Control-Allow-Origin" : "*"

https://riptutorial.com/de/home 33

}, body: JSON.stringify(result), }; context.succeed(response); }); };

Dann müssen Sie neue Dateien erstellen, um Ihre CRUD-Funktionen zu definieren Erstellen Sie diese Dateien

todos-create.js1. todos-read-all.js2. todos-read-one.js3. todos-update.js4. todos-delete.js5.

Definieren Sie dann diese Funktionen in jeder Datei.

für todos-create.js

'use strict'; const AWS = require('aws-sdk'); const dynamoDb = new AWS.DynamoDB.DocumentClient(); const uuid = require('uuid'); module.exports = (event, callback) => { const data = JSON.parse(event.body); data.id = uuid.v1(); data.updatedAt = new Date().getTime(); const params = { TableName: 'todos', Item: data }; return dynamoDb.put(params, (error, data) => { if (error) { callback(error); } callback(error, params.Item); }); };

Für todos-read-all.js

'use strict'; const AWS = require('aws-sdk'); const dynamoDb = new AWS.DynamoDB.DocumentClient(); module.exports = (event, callback) => {

https://riptutorial.com/de/home 34

const params = { TableName: 'todos', }; return dynamoDb.scan(params, (error, data) => { if (error) { callback(error); } callback(error, data.Items); }); }; For todos-read-one.js <br> 'use strict'; const AWS = require('aws-sdk'); const dynamoDb = new AWS.DynamoDB.DocumentClient(); module.exports = (event, callback) => { const params = { TableName: 'todos', Key: { id: event.pathParameters.id } }; return dynamoDb.get(params, (error, data) => { if (error) { callback(error); } callback(error, data.Item); }); };

Für todos-update.js

'use strict'; const AWS = require('aws-sdk'); const dynamoDb = new AWS.DynamoDB.DocumentClient(); module.exports = (event, callback) => { const data = JSON.parse(event.body); data.id = event.pathParameters.id; data.updatedAt = new Date().getTime(); const params = { TableName : 'todos', Item: data }; return dynamoDb.put(params, (error, data) => { if (error) { callback(error); } callback(error, params.Item); });

https://riptutorial.com/de/home 35

};

Für todos-delete.js

'use strict'; const AWS = require('aws-sdk'); const dynamoDb = new AWS.DynamoDB.DocumentClient(); module.exports = (event, callback) => { const params = { TableName : 'todos', Key: { id: event.pathParameters.id } }; return dynamoDb.delete(params, (error, data) => { if (error) { callback(error); } callback(error, params.Key); }); };

Für das Ausführen dieser Anwendung benötigen Sie die Installation von NPM-Abhängigkeiten

npm init npm-Initialisierung1. npm install aws-sdk --save installiert aws-sdk2. npm install uuid --save3.

Einsatz Jetzt können Sie diese Projekte bereitstellen cd myService Sie sich, dass Sie sich im Projektverzeichnis befinden. Dann können Sie Ihren Code bereitstellen

serverless deploy

Endpunkt verwenden Wenn Sie erfolgreich implementiert wurden, können Sie die Namen der API-Gateway-Endpunkte in Ihrer Konsole anzeigen.

Test Endpunkt erstellen

curl -X POST https://XXXX.execute-api.region.amazonaws.com/dev/todos --data '{ "body" : "Learn Serverless" }'

Test für Leseendpunkt (Alles lesen)

curl https://XXXX.execute-api.region.amazonaws.com/dev/todos

Test für Leseendpunkt (Read One)

https://riptutorial.com/de/home 36

curl https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id>

Testen Sie den Update- Endpunkt

curl -X PUT https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id> --data '{ "body" : "Understand Serverless" }'

Test für Endpunkt löschen

`curl -X DELETE https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id`>

Serverless Framework online lesen: https://riptutorial.com/de/aws-lambda/topic/6719/serverless-framework

https://riptutorial.com/de/home 37

Kapitel 8: Wie entwickelt man aws-lambda (C #) auf einem lokalen Rechner?

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.

Visual Studio 2015-Update 31. AWS Toolkit für Visual Studio 2015 - Version 1.11.2.02. Microsoft .NET Core Tools (Vorschau 2) - Version 14.1.21111.03.

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.

Examples

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

Öffnen Sie Visual Studio und wählen Sie Datei -> Neues Projekt1. AWS-Lambda-Projekt mit Tests auswählen (.NET Core) 2.

https://riptutorial.com/de/home 38

Als Nächstes wird der Bildschirm " Blueprint auswählen" angezeigt. Wählen Sie Leere Funktion und klicken Sie auf die Schaltfläche Fertig stellen:

3.

Gehen Sie zu Extras -> NuGet Package Manager -> Package Manager Console.4. Geben Sie im Konsolenfenster Install-Package Amazon.Lambda.Core ein5. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, und 6.

https://riptutorial.com/de/home 39

wählen Sie Pakete wiederherstellen. Dies ist der letzte Vorbereitungsschritt, bevor Sie mit dem Schreiben von Code beginnen.

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

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

1.

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

using System.Collections.Generic; using Amazon.Lambda.Core;

https://riptutorial.com/de/home 40

Fügen Sie dem Projekt eine Datei mit dem Namen SimpleSerializer.cs2. Fügen Sie den folgenden Code in diese Datei ein:3.

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

Ändern Sie in dem Testprojekt Zeile 23 von FunctionTest.cs wie folgt:4.

https://riptutorial.com/de/home 41

var upperCase = function.FunctionHandler(null);

Bauen Sie Ihre Lösung auf - Sie sollten keine Buildfehler haben.5.

Schritt 3 - Installieren Sie Ihre Lambda-Funktion in AWS

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

1.

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.

2.

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.

3.

https://riptutorial.com/de/home 42

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

Nach Schritt 3 öffnet Visual Studio das Fenster View Function mit Ihrer geladenen Funktion.1. Geben Sie im linken unteren Bereich dieses Bildschirms den folgenden Json in das Feld Sample Input ein :

2.

{ "month": "10", "day": "28", "year": "1979" }

https://riptutorial.com/de/home 43

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.

3.

Wie entwickelt man aws-lambda (C #) auf einem lokalen Rechner? online lesen: https://riptutorial.com/de/aws-lambda/topic/8937/wie-entwickelt-man-aws-lambda--c-sharp--auf-einem-lokalen-rechner-

https://riptutorial.com/de/home 44

Credits

S. No

Kapitel Contributors

1Erste Schritte mit aws-lambda

Ahmed Abouhegaza, alatar, Community

2 alexa-skills-kit Niroshan Ranapathi

3AWS Lambda mit Python

Nithin K Anil

4 AWS Lambda mit S3 Adonis Lee Villamor

5AWS Lambda wird von S3 ausgelöst

Doug Schwartz

6aws-lambda wird durch S3 ausgelöst

Alastair McCormack, Marshall Anschutz

7Serverless Framework

Alastair McCormack, Ashan, Eric Nord, Luc Boissaye, Niroshan Ranapathi

8

Wie entwickelt man aws-lambda (C #) auf einem lokalen Rechner?

Taterhead

https://riptutorial.com/de/home 45