Wie verwende ich Ebenen, um die neueste Version des AWS SDK für JavaScript in meine Node.js-Lambda-Funktion zu integrieren?

Lesedauer: 7 Minute
0

Die AWS-Lambda-Laufzeitumgebung verfügt nicht über bestimmte Funktionen aus der neuesten Version eines AWS SDK. Ich möchte die neueste Version des AWS SDK für JavaScript in meine Node.js-Lambda-Funktion integrieren.

Kurzbeschreibung

Um die neueste Version eines AWS SDK in das Bereitstellungspaket Ihrer Lambda-Funktion zu integrieren, erstellen Sie eine Lambda-Ebene. Fügen Sie dann die Ebene zu Ihrer Funktion hinzu. Verwenden Sie entweder das AWS Command Line Interface (AWS CLI) oder die Lambda-Konsole, um eine Lambda-Ebene zu erstellen und sie zu Ihrer Funktion hinzuzufügen.

Hinweis: Für Node.js Version 16 und früher enthielten die Lambda Node.js-Laufzeiten das AWS SDK für JavaScript, Version 2. Für Node.js, Version 18 und höher, enthält die Lambda Node.js-Laufzeit das AWS SDK für JavaScript Version 3. Weitere Informationen finden Sie unter Node.js 18.x-Laufzeit jetzt in AWS Lambda verfügbar.

Eine vollständige Liste der Laufzeiten und der von Lambda verwendeten AWS-SDK-Versionen finden Sie unter Lambda-Laufzeiten.

Hinweis: Die folgende Auflösung erhöht die Größe des Bereitstellungspakets Ihrer Funktion. Informationen zu Lambda-Speicherkontingenten finden Sie unter Lambda-Kontingente.

Lösung

Hinweis: Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Beheben von Fehlern in der AWS CLI. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

(Optional) Bestätigen der von der Funktion verwendeten AWS-SDK-Version

Gehen Sie wie folgt vor, um die von Ihrer Funktion verwendete AWS-SDK-Version zu bestätigen:

Hinweis: Verwenden Sie diese Methode nur für Node.js Version 16 und früher. 

  1. Erstellen Sie eine Funktion in der Lambda-Konsole.

  2. Aktualisieren Sie den Code der Funktion, um die Version des AWS SDK zurückzugeben, die die Funktion beim Aufrufen der Funktion verwendet:

    const AWS = require('aws-sdk')   
    exports.handler = async (event) => {  
    return AWS.VERSION;  
    };
  3. Rufen Sie Ihre Funktion auf.

  4. Vergleichen Sie die Version des AWS SDK, die Ihre Funktion zurückgegeben hat, mit der neuesten Version des AWS SDK, die in der AWS-SDK-Dokumentation aufgeführt ist.

Installieren und verpacken der neuesten Version des AWS SDK

Hinweis: Bereitstellungspakete müssen mit der von Ihnen verwendeten Lambda-Laufzeit kompatibel sein. Es ist eine bewährte Methode, für Ihre Laufzeit dasselbe Betriebssystem (OS) zu verwenden, das in den Lambda-Laufzeiten angegeben ist. Starten Sie beispielsweise eine kompatible Amazon Elastic Compute Cloud (Amazon EC2)-Instance.

Führen Sie in einer lokalen, Lambda-kompatiblen Entwicklungsumgebung die folgenden Schritte aus:

  1. Führen Sie den folgenden Befehl aus, um ein Arbeitsverzeichnis zu erstellen:

    mkdir -p aws-sdk-layer/nodejs
  2. Führen Sie den folgenden Befehl aus, um in das Arbeitsverzeichnis zu wechseln:

    cd aws-sdk-layer/nodejs
  3. Installieren Sie das AWS SDK für Ihre Node.js-Laufzeitversion:
    Node.js 16 und früher (AWS SDK Version 2)
    Um die neueste Version von AWS-SDK-Version 2 zu installieren, verwenden Sie eine mit Amazon Linux 2 kompatible Instance, um den folgenden Befehl auszuführen:

    npm install aws-sdk

    Weitere Informationen finden Sie im Tutorial: Einrichten von Node.js auf einer Amazon-EC2-Instance.

    Hinweis: Es ist eine bewährte Methode, bei der Entwicklung von Lambda-Ressourcen eine Amazon-Linux-2-Umgebung zu verwenden.

    -oder-

    Wenn Sie ein Windows- oder macOS-Betriebssystem für die Entwicklung verwenden, verwenden Sie Docker, um den folgenden Befehl auszuführen:

    docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:<version>" /bin/sh -c "npm install aws-sdk; exit"

    Hinweis: Bevor Sie den Befehl ausführen, stellen Sie sicher, dass Sie die neueste Version von Docker auf der Docker-Website verwenden.

    Node.js 18 und höher (AWS SDK Version 3)

    Weitere Informationen finden Sie unter SDK für JavaScript installieren.

    Wenn Sie einen AWS-SDK-Befehl importieren, der in der SDK-Version, die in Lambda eingebettet ist, nicht vorhanden ist, erhalten Sie möglicherweise die folgende Fehlermeldung:

    „Runtime.UserCodeSyntaxError "Named export not found" The requested module is a CommonJS module“

    Installieren Sie in diesem Fall das spezifische Paket, damit Sie es in Ihrer Funktion verwenden können. Verwenden Sie beispielsweise die folgende Importanweisung:

    import {DeleteQueueCommand} from "@aws-sdk/client-connect";

    Installieren Sie in diesem Fall den aktualisierten Client, damit Sie das spezifische Paket in Ihrer Funktion verwenden können.

    Verwenden Sie beispielsweise die folgende Importanweisung in einer Lambda-Funktion mit Node.js Version 18 oder höher:

    import {DeleteQueueCommand} from "@aws-sdk/client-connect";

    Wenn dieses Paket nicht in Ihrer aktuellen AWS-SDK-Version enthalten ist, erhalten Sie den folgenden Fehler in Ihren Protokollen:

    „"errorType": "Runtime.UserCodeSyntaxError",
    "errorMessage": "SyntaxError: Named export 'DeleteQueueCommand' not found. The requested module '@aws-sdk/client-connect' is a CommonJS module, which may not support all module.exports as named exports.\nCommonJS modules can always be imported via the default export, for example using:\n\nimport pkg from '@aws-sdk/client-connect';\nconst {DeleteQueueCommand} = pkg;\n",“

    Um das Paket DeleteQueueCommand einzubinden und diesen Fehler zu beheben, installieren Sie die neueste Version des Clients:

    npm install @aws-sdk/client-connect  
    
  4. Erstellen Sie eine .zip-Datei, um sie auf Ihre Lambda-Ebene hochzuladen:

    zip -r ../package.zip ../
  5. (Optional) Überprüfen Sie die Version des AWS SDK, die Sie installiert haben:

    cat package-lock.json

    Die Ausgabe sieht in etwa wie folgt aus:

    {  "requires": true,  
      "lockfileVersion": 1,  
      "dependencies": {  
        "aws-sdk": {  
          "version": "2.888.0",  
    ...

Verwenden der AWS-CLI, um eine Lambda-Ebene zu erstellen und sie Ihrer Funktion hinzuzufügen

  1. Um eine neue Lambda-Ebene zu erstellen, die die neueste Version des AWS SDK enthält, das Sie verwenden möchten, führen Sie den folgenden Befehl publish-layer-version aus:

    Hinweis: Ersetzen Sie node_sdk durch den Namen Ihrer Ebene und My layer durch eine Beschreibung der Ebene. Ersetzen Sie außerdem den Wert compatible-runtimes durch die von Ihnen verwendete Laufzeit und region durch die AWS-Region, in der sich Ihre Funktion und Ihre Ebene befinden.

    aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region

    Notieren Sie sich den Wert LayerVersionArn, der in der Befehlsausgabe enthalten ist, um ihn im nächsten Schritt zu verwenden.

  2. Um die Ebene zu Ihrer Funktion hinzuzufügen, führen Sie den folgenden Befehl update-function-configuration aus:

    Hinweis: Ersetzen Sie my-function durch den Namen Ihrer Funktion, arn:aws:lambda:us-east- 2:123456789012:layer:node_sdk:1 durch den Wert LayerVersionArn aus Ihrer Ausgabe und region durch Ihre Region.

    aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region

    Weitere Informationen finden Sie unter Arbeiten mit Lambda-Ebenen.

Verwenden der Lambda-Konsole, um eine Lambda-Ebene zu erstellen und sie zu Ihrer Funktion hinzuzufügen

  1. Öffnen Sie die Seite Ebenen in der Lambda-Konsole.
  2. Wählen Sie Ebene erstellen aus. Geben Sie die folgenden Werte ein:
    Geben Sie unter Name einen Namen für die neue Ebene ein.
    (Optional) Geben Sie unter Beschreibung – optional eine Beschreibung für die Ebene ein.
    Wählen Sie .zip-Datei hochladen.
    Wählen Sie Hochladen. Wählen Sie dann den Namen der .zip-Datei Ihres Bereitstellungspakets.
    (Optional) Wählen Sie für Kompatible Laufzeiten – optional eine oder mehrere kompatible Laufzeiten aus. 
    (Optional) Geben Sie unter Lizenz – optional alle zutreffenden Softwarelizenzinformationen für die Ebene ein.
  3. Wählen Sie Erstellen aus.
  4. Öffnen Sie die Seite Funktionen in der Lambda-Konsole und wählen Sie dann den Namen der Funktion aus, zu der Sie die Ebene hinzufügen möchten.
  5. Wählen Sie unter Funktionsübersicht die Option Ebenen aus.
  6. Wählen Sie Ebene hinzufügen.
  7. Wählen Sie unter Ebene auswählen die Option Benutzerdefinierte Ebenen aus. Wählen Sie dann die folgenden Werte aus:
    Der Name der Ebene
    Die Version der Ebene
  8. Wählen Sie Hinzufügen aus.

(Optional) Testen Sie das Setup

Führen Sie die Schritte im Abschnitt (Optional) Bestätigen Sie die AWS-SDK-Version, die Ihre Funktion verwendet, um Ihre Funktion aufzurufen. Die Funktion gibt die Version des AWS SDK zurück, die sie verwendet.

Sie können die neueste Version des AWS SDK auch in der Datei CHANGELOG des von Ihnen verwendeten AWS SDK überprüfen. Weitere Informationen finden Sie unter Changelog für AWS SDK for JavaScript oder Changelog für AWS SDK V3 for Javascript auf der GitHub-Website.

Verwandte Informationen

Lambda-Programmiermodell 

Bewährte Methoden für die Arbeit mit AWS-Lambda-Funktionen

Wie erstelle ich ein Lambda-Bereitstellungspaket für Node.js?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 7 Monaten