aws-lambda - RIP TutorialJava AWS-Lambda S3 wird ausgelöst Eine AWS-Lambda-Funktion kann an ein...
Transcript of aws-lambda - RIP TutorialJava AWS-Lambda S3 wird ausgelöst Eine AWS-Lambda-Funktion kann an ein...
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
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
Wählen Sie API-Gateway aus6. Füllen Sie die erforderlichen Details wie auf dem Bild aus. 7.
https://riptutorial.com/de/home 16
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
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
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
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