Lambda mit API Gateway aufrufen - AWS SDK for JavaScript

Das AWS SDK for JavaScript APIV3-Referenzhandbuch beschreibt detailliert alle API Funktionen für die AWS SDK for JavaScript Version 3 (V3).

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Lambda mit API Gateway aufrufen

Sie können eine Lambda-Funktion mithilfe von Amazon API Gateway aufrufen. Dabei handelt es sich um einen AWS Service zum Erstellen, Veröffentlichen, Verwalten, Überwachen und Sichern von REST, HTTP und WebSocket APIs in großem Umfang. API-Entwickler können APIs erstellen, die auf AWS oder andere Web-Services sowie auf Daten zugreifen können, die in der AWS Cloud gespeichert sind. Als API Gateway Gateway-Entwickler können Sie APIs für die Verwendung in Ihren eigenen Client-Anwendungen erstellen. Weitere Informationen finden Sie unter Was ist Amazon API Gateway.

AWS Lambdaist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitzustellen oder zu verwalten. Sie können Lambda-Funktionen in verschiedenen Programmiersprachen erstellen. Weitere Informationen zu AWS Lambda finden Sie unter Was ist AWS Lambda?

In diesem Beispiel erstellen Sie eine Lambda-Funktion mithilfe der JavaScript Lambda-Laufzeit-API. Dieses Beispiel ruft verschiedene AWS-Dienste auf, um einen bestimmten Anwendungsfall zu erfüllen. Nehmen wir beispielsweise an, dass eine Organisation ihren Mitarbeitern eine mobile Textnachricht sendet, in der sie zum einjährigen Jubiläum gratuliert, wie in dieser Abbildung gezeigt.

DynamoDB-Tabelle

Die Fertigstellung des Beispiels sollte etwa 20 Minuten in Anspruch nehmen.

Dieses Beispiel zeigt Ihnen, wie Sie mithilfe von JavaScript Logik eine Lösung erstellen, die diesen Anwendungsfall erfüllt. Sie lernen beispielsweise, eine Datenbank zu lesen, um festzustellen, welche Mitarbeiter das einjährige Jubiläum erreicht haben, wie die Daten verarbeitet und eine Textnachricht mithilfe einer Lambda-Funktion versendet werden. Anschließend erfahren Sie, wie Sie API Gateway verwenden, um diese AWS Lambda Funktion mithilfe eines Rest-Endpunkts aufzurufen. Sie können die Lambda-Funktion beispielsweise mit dem folgenden curl-Befehl aufrufen:

curl -XGET "https://xxxxqjko1o3.execute-api.us-east-1.amazonaws.com/cronstage/employee"

AWSIn diesem Tutorial wird eine Amazon DynamoDB-Tabelle mit dem Namen Employee verwendet, die diese Felder enthält.

  • id — der Primärschlüssel für die Tabelle.

  • FirstName — Vorname des Mitarbeiters.

  • Telefon — Telefonnummer des Mitarbeiters.

  • StartDate — Startdatum des Mitarbeiters.

DynamoDB-Tabelle
Wichtig

Bearbeitungskosten: Die in diesem Dokument enthaltenen AWS Dienste sind im AWS kostenlosen Kontingent enthalten. Achten Sie jedoch darauf, alle Ressourcen zu beenden, nachdem Sie dieses Beispiel abgeschlossen haben, um sicherzustellen, dass Ihnen nichts in Rechnung gestellt wird.

Erforderliche Aufgaben

Zum Einrichten und Ausführen dieses Beispiels müssen Sie zunächst diese Aufgaben abschließen:

  • Richten Sie die Projektumgebung ein, um diese TypeScript Node-Beispiele auszuführen, und installieren Sie die erforderlichen Module AWS SDK for JavaScript und Module von Drittanbietern. Folgen Sie den Anweisungen auf GitHub.

  • Erstellen Sie eine freigegebene Konfigurationsdatei mit Ihren Anmeldeinformationen. Weitere Informationen zur Bereitstellung einer Datei mit gemeinsam genutzten Anmeldeinformationen finden Sie unter Dateien mit gemeinsam genutzten Konfigurationen und Anmeldeinformationen im Referenzhandbuch für AWS SDKs und Tools.

Erstellen Sie die Ressourcen AWS

Für dieses Tutorial sind die folgenden Ressourcen erforderlich:

  • Eine Amazon DynamoDB-Tabelle, benannt Employee mit einem Schlüssel Id und den Feldern, die in der vorherigen Abbildung gezeigt wurden. Stellen Sie sicher, dass Sie die richtigen Daten eingeben, einschließlich eines gültigen Mobiltelefons, mit dem Sie diesen Anwendungsfall testen möchten. Weitere Informationen finden Sie unter Tabelle erstellen.

  • Eine IAM-Rolle mit angehängten Berechtigungen zur Ausführung von Lambda-Funktionen.

  • Ein Amazon S3 S3-Bucket zum Hosten der Lambda-Funktion.

Sie können diese Ressourcen manuell erstellen, wir empfehlen jedoch, diese Ressourcen AWS CloudFormation wie in diesem Tutorial beschrieben bereitzustellen.

Erstellen Sie die AWS Ressourcen mit AWS CloudFormation

AWS CloudFormation ermöglicht es Ihnen, die AWS-Infrastrukturen vorhersagbar und wiederholt zu erstellen und bereitzustellen. Weitere Informationen zu AWS CloudFormation finden Sie im AWS CloudFormation Benutzerhandbuch.

Um den AWS CloudFormation Stack mit dem zu erstellenAWS CLI:

  1. Installieren und konfigurieren Sie die AWS CLI folgenden Anweisungen im AWS CLIBenutzerhandbuch.

  2. Erstellen Sie eine Datei mit dem Namen setup.yaml im Stammverzeichnis Ihres Projektordners und kopieren Sie den Inhalt hier GitHub hinein.

    Anmerkung

    Die AWS CloudFormation Vorlage wurde unter Verwendung der hier AWS CDK verfügbaren Datei generiert GitHub. Weitere Informationen zum AWS CDK finden Sie im AWS Cloud Development Kit (AWS CDK)Entwicklerhandbuch für.

  3. Führen Sie den folgenden Befehl von der Befehlszeile aus und ersetzen Sie STACK_NAME durch einen eindeutigen Namen für den Stack.

    Wichtig

    Der Stack-Name muss innerhalb einer AWS Region und eines Kontos eindeutig sein. AWS Sie können bis zu 128 Zeichen angeben. Zahlen und Bindestriche sind zulässig.

    aws cloudformation create-stack --stack-name STACK_NAME --template-body file://setup.yaml --capabilities CAPABILITY_IAM

    Weitere Informationen zu den create-stack Befehlsparametern finden Sie in der AWS CLIBefehlsreferenz und im AWS CloudFormationBenutzerhandbuch.

  4. Füllen Sie als Nächstes die Tabelle wie folgt Füllen der Tabelle aus.

Füllen der Tabelle

Um die Tabelle zu füllen, erstellen Sie zunächst ein Verzeichnis mit dem Namen libs und darin eine Datei mit dem NamendynamoClient.js, und fügen Sie den folgenden Inhalt ein.

const { DynamoDBClient } = require ( "@aws-sdk/client-dynamodb" ); // Set the AWS Region. const REGION = "REGION"; // e.g. "us-east-1" // Create an Amazon Lambda service client object. const dynamoClient = new DynamoDBClient({region:REGION}); module.exports = { dynamoClient };

Dieser Code ist hier verfügbar GitHub.

Erstellen Sie als Nächstes eine Datei mit dem Namen populate-table.js im Stammverzeichnis Ihres Projektordners und kopieren Sie den Inhalt hier GitHub hinein. Ersetzen Sie für eines der Elemente den Wert für die phone Eigenschaft durch eine gültige Handynummer im E.164-Format und den Wert für startDate durch das heutige Datum.

Führen Sie den folgenden Befehl von der Befehlszeile aus.

node populate-table.js
const { BatchWriteItemCommand } = require ( "aws-sdk/client-dynamodb" ); const {dynamoClient} = require ( "./libs/dynamoClient" ); // Set the parameters. export const params = { RequestItems: { Employees: [ { PutRequest: { Item: { id: { N: "1" }, firstName: { S: "Bob" }, phone: { N: "155555555555654" }, startDate: { S: "2019-12-20" }, }, }, }, { PutRequest: { Item: { id: { N: "2" }, firstName: { S: "Xing" }, phone: { N: "155555555555653" }, startDate: { S: "2019-12-17" }, }, }, }, { PutRequest: { Item: { id: { N: "55" }, firstName: { S: "Harriette" }, phone: { N: "155555555555652" }, startDate: { S: "2019-12-19" }, }, }, }, ], }, }; export const run = async () => { try { const data = await dbclient.send(new BatchWriteItemCommand(params)); console.log("Success", data); } catch (err) { console.log("Error", err); } }; run();

Dieser Code ist hier auf verfügbar GitHub.

Erstellen der AWS Lambda-Funktion

Konfigurieren des SDKs

Erstellen Sie im libs Verzeichnis Dateien mit dem Namen snsClient.js und lambdaClient.js und fügen Sie den folgenden Inhalt jeweils in diese Dateien ein.

const { SNSClient } = require ( "@aws-sdk/client-sns" ); // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create an Amazon SNS service client object. const snsClient = new SNSClient({ region: REGION }); module.exports = { snsClient };

Ersetzen Sie REGION durch die AWS Region. Dieser Code ist hier verfügbar GitHub.

const { LambdaClient } = require ( "@aws-sdk/client-lambda" ); // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create an Amazon Lambda service client object. const lambdaClient = new LambdaClient({ region: REGION }); module.exports = { lambdaClient };

Ersetzen Sie REGION durch die AWS Region. Dieser Code ist hier verfügbar GitHub.

Importieren Sie zunächst die erforderlichen AWS SDK for JavaScript (v3) Module und Befehle. Dann berechne das heutige Datum und weise es einem Parameter zu. Drittens erstellen Sie die Parameter für denScanCommand. Ersetzen Sie TABLE_NAME durch den Namen der Tabelle, die Sie im Erstellen Sie die Ressourcen AWS Abschnitt dieses Beispiels erstellt haben.

Der folgende Codeausschnitt veranschaulicht diesen Schritt. (Das vollständige Beispiel finden Sie unter Bündelung der Lambda-Funktion.)

"use strict"; const { ScanCommand } = require("@aws-sdk/client-dynamodb"); const { PublishCommand } = require("@aws-sdk/client-sns"); const {snsClient} = require ( "./libs/snsClient" ); const {dynamoClient} = require ( "./libs/dynamoClient" ); // Get today's date. const today = new Date(); const dd = String(today.getDate()).padStart(2, "0"); const mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0! const yyyy = today.getFullYear(); const date = yyyy + "-" + mm + "-" + dd; // Set the parameters for the ScanCommand method. const params = { // Specify which items in the results are returned. FilterExpression: "startDate = :topic", // Define the expression attribute value, which are substitutes for the values you want to compare. ExpressionAttributeValues: { ":topic": { S: date }, }, // Set the projection expression, which are the attributes that you want. ProjectionExpression: "firstName, phone", TableName: "Employees", };

Scannen der DynamoDB-Tabelle

Erstellen Sie zunächst eine Async/Await-Funktion, die aufgerufen wirdsendText, um eine Textnachricht mithilfe von Amazon SNS zu veröffentlichen. PublishCommand Fügen Sie dann ein try Blockmuster hinzu, das die DynamoDB-Tabelle nach Mitarbeitern durchsucht, deren heutiges Arbeitsjubiläum ansteht. Anschließend wird die sendText Funktion aufgerufen, diesen Mitarbeitern eine Textnachricht zu senden. Wenn ein Fehler auftritt, wird der catch Block aufgerufen.

Der folgende Codeausschnitt veranschaulicht diesen Schritt. (Das vollständige Beispiel finden Sie unter Bündelung der Lambda-Funktion.)

// Helper function to send message using Amazon SNS. exports.handler = async () => { // Helper function to send message using Amazon SNS. async function sendText(textParams) { try { await snsClient.send(new PublishCommand(textParams)); console.log("Message sent"); } catch (err) { console.log("Error, message not sent ", err); } } try { // Scan the table to identify employees with work anniversary today. const data = await dynamoClient.send(new ScanCommand(params)); data.Items.forEach(function (element) { const textParams = { PhoneNumber: element.phone.N, Message: "Hi " + element.firstName.S + "; congratulations on your work anniversary!", }; // Send message using Amazon SNS. sendText(textParams); }); } catch (err) { console.log("Error, could not scan table ", err); } };

Bündelung der Lambda-Funktion

In diesem Thema wird beschrieben, wie Sie die mylambdafunction.ts und die erforderlichen AWS SDK for JavaScript Module für dieses Beispiel in einer gebündelten Datei namens bündeln. index.js

  1. Falls Sie es noch nicht getan haben, folgen Sie den Anweisungen Erforderliche Aufgaben für dieses Beispiel, um Webpack zu installieren.

    Anmerkung

    Informationen zu Webpack finden Sie unter. Anwendungen mit Webpack bündeln

  2. Führen Sie in der Befehlszeile den folgenden Befehl aus, um das JavaScript für dieses Beispiel in einer Datei namens <index.js> zu bündeln:

    webpack mylambdafunction.ts --mode development --target node --devtool false --output-library-target umd -o index.js
    Wichtig

    Beachten Sie, dass die Ausgabe benannt istindex.js. Dies liegt daran, dass Lambda-Funktionen einen index.js Handler haben müssen, um zu funktionieren.

  3. Komprimieren Sie die gebündelte Ausgabedatei,index.js, in eine ZIP-Datei mit dem Namen. mylambdafunction.zip

  4. Laden Sie mylambdafunction.zip es in den Amazon S3 S3-Bucket hoch, den Sie im Erstellen Sie die Ressourcen AWS Thema dieses Tutorials erstellt haben.

Stellen Sie die Lambda-Funktion bereit

Erstellen Sie im Stammverzeichnis Ihres Projekts eine lambda-function-setup.ts Datei und fügen Sie den folgenden Inhalt ein.

Ersetzen Sie BUCKET_NAME durch den Namen des Amazon S3 S3-Buckets, in den Sie die ZIP-Version Ihrer Lambda-Funktion hochgeladen haben. Ersetzen Sie ZIP_FILE_NAME durch den Namen der ZIP-Version Ihrer Lambda-Funktion. Ersetzen Sie ROLE durch die Amazon-Ressourcennummer (ARN) der IAM-Rolle, die Sie im Erstellen Sie die Ressourcen AWS Thema dieses Tutorials erstellt haben. Ersetzen Sie LAMBDA_FUNCTION_NAME durch einen Namen für die Lambda-Funktion.

// Load the required Lambda client and commands. const { CreateFunctionCommand } = require ( "@aws-sdk/client-lambda" ); const { lambdaClient} = require ( "./libs/lambdaClient.js ); // Set the parameters. const params = { Code: { S3Bucket: "BUCKET_NAME", // BUCKET_NAME S3Key: "ZIP_FILE_NAME", // ZIP_FILE_NAME }, FunctionName: "LAMBDA_FUNCTION_NAME", Handler: "index.handler", Role: "IAM_ROLE_ARN", // IAM_ROLE_ARN; e.g., arn:aws:iam::650138640062:role/v3-lambda-tutorial-lambda-role Runtime: "nodejs12.x", Description: "Scans a DynamoDB table of employee details and using Amazon Simple Notification Services (Amazon SNS) to " + "send employees an email on each anniversary of their start-date.", }; const run = async () => { try { const data = await lambdaClient.send(new CreateFunctionCommand(params)); console.log("Success", data); // successful response } catch (err) { console.log("Error", err); // an error occurred } }; run();

Geben Sie in der Befehlszeile Folgendes ein, um die Lambda-Funktion bereitzustellen.

node lambda-function-setup.ts

Dieses Codebeispiel ist hier verfügbar GitHub.

API Gateway so konfigurieren, dass die Lambda-Funktion aufgerufen wird

Erstellen Sie die Rest-API

Sie können die API Gateway Gateway-Konsole verwenden, um einen Rest-Endpunkt für die Lambda-Funktion zu erstellen. Sobald Sie fertig sind, können Sie die Lambda-Funktion mit einem RESTful-Aufruf aufrufen.

  1. Melden Sie sich bei der Amazon API Gateway Gateway-Konsole an.

  2. Wählen Sie unter Rest API die Option Build aus.

  3. Wählen Sie Neue API aus.

    DynamoDB-Tabelle
  4. Geben Sie Employee als API-Namen an und geben Sie eine Beschreibung ein.

    DynamoDB-Tabelle
  5. Wählen Sie Create API (API erstellen) aus.

  6. Wählen Sie im Bereich Mitarbeiter die Option Ressourcen aus.

    DynamoDB-Tabelle
  7. Geben Sie im Namensfeld Mitarbeiter an.

  8. Wählen Sie Create Resources (Ressourcen erstellen) aus.

  9. Wählen Sie im Drop-down-Menü Aktionen die Option Ressourcen erstellen aus.

    DynamoDB-Tabelle
  10. Wählen Sie /employees aus, wählen Sie in den Aktionen die Option Methode erstellen aus und wählen Sie anschließend im Drop-down-Menü unter /employees die Option GET aus. Wählen Sie das Häkchen aus.

    DynamoDB-Tabelle
  11. Wählen Sie Lambda-Funktion und geben Sie mylambdafunction als Namen der Lambda-Funktion ein. Wählen Sie Speichern aus.

Testen Sie die API Gateway Gateway-Methode

An dieser Stelle des Tutorials können Sie die API Gateway Gateway-Methode testen, die die Lambda-Funktion mylambdafunction aufruft. Um die Methode zu testen, wählen Sie Test aus, wie in der folgenden Abbildung gezeigt.

DynamoDB-Tabelle

Sobald die Lambda-Funktion aufgerufen wurde, können Sie die Protokolldatei einsehen, um eine Erfolgsmeldung zu sehen.

Stellen Sie die API Gateway Gateway-Methode bereit

Nach erfolgreichem Test können Sie die Methode über die Amazon API Gateway Gateway-Konsole bereitstellen.

  1. Wählen Sie Get.

    DynamoDB-Tabelle
  2. Wählen Sie im Drop-down-Menü „Aktionen“ die Option API bereitstellen aus.

    DynamoDB-Tabelle
  3. Füllen Sie das Formular Deploy API aus und wählen Sie Deploy aus.

    DynamoDB-Tabelle
  4. Wählen Sie Save Changes.

  5. Wählen Sie erneut Abrufen und stellen Sie fest, dass sich die URL ändert. Dies ist die Aufruf-URL, mit der Sie die Lambda-Funktion aufrufen können.

    DynamoDB-Tabelle

Löschen Sie die Ressourcen

Herzlichen Glückwunsch! Sie haben eine Lambda-Funktion über Amazon API Gateway mit dem aufgerufen. AWS SDK for JavaScript Wie bereits zu Beginn dieses Tutorials erwähnt, sollten Sie darauf achten, alle Ressourcen zu beenden, die Sie während der Bearbeitung dieses Tutorials erstellen, um sicherzustellen, dass Ihnen nichts berechnet wird. Sie können dies tun, indem Sie den AWS CloudFormation Stack, den Sie im Erstellen Sie die Ressourcen AWS Thema dieses Tutorials erstellt haben, wie folgt löschen:

  1. Öffnen Sie das AWS CloudFormationin der AWS Managementkonsole.

  2. Öffnen Sie die Seite Stacks und wählen Sie den Stack aus.

  3. Wählen Sie Löschen.