Das AWS SDK für JavaScript (v2) wird dieses Jahr (2023) in den Wartungsmodus versetzt. Die Version 3 ist seit einiger Zeit verfügbar und es handelt sich um die Version, die in der neueren Lambda-Laufzeitumgebung für Node18 enthalten ist, die auch die aktuelle LTS-Knotenversion ist.
Wenn Sie also Ihre Lambdas auf die Node18-Lambda-Laufzeit aktualisieren möchten, müssen Sie das SDK v2 zu Ihrer aktuellen Lambda-Funktion hinzufügen oder in Node16 bleiben (Sie könnten Ihre eigene Laufzeit rollen, aber das ist ein anderes Thema).
Die Vorteile der neuen SDK-Version sind mehr Modularität, einschließlich dessen, was Sie benötigen, kleinere Paketgröße, da sie direkt im neueren Lambda-Image ausgeliefert wird, Typescript-Unterstützung und ein benutzerdefinierter Middleware-Stack zur Anpassung einiger SDK-Verhaltensweisen (die ich noch nicht verwendet habe). .
Die Migration ist nicht allzu schwierig; Sie können diesem Dokument folgen. Allerdings bin ich auf einige Details gestoßen, die zunächst nicht offensichtlich waren und die Ihnen einige Zeit beim Googeln/Nachfragen ersparen.
v2:
const AWS = require('aws-sdk'); const lambda = new AWS.Lambda(options); const result = await lambda.invoke(invokeParams).promise(); const resultPayload = JSON.parse(result.Payload)
v3:
const { LambdaClient, InvokeCommand } = require('@aws-sdk/client-lambda'); const { toUtf8 } = require('@aws-sdk/util-utf8-node'); const command = new InvokeCommand(invokeParams); const result = await lambda.send(command); const resultPayload = JSON.parse(toUtf8(result.Payload));// Now the result payload is a Uint8 array that needs to be decoded
Zum Zeitpunkt des Schreibens ist das Paket @aws-sdk/util-utf8-node zugunsten von @aws-sdk/util-utf8 als veraltet markiert. Aber in der Lambda-Laufzeit ist nodejs18.x noch nicht enthalten. Wenn Sie es also verwenden möchten, müssen Sie es zu Ihren Projektproduktionsabhängigkeiten hinzufügen.
v2:
const AWS = require('aws-sdk'); dynamoDbClient = new AWS.DynamoDB.DocumentClient(options); await dynamoDbClient.put(params).promise(); await dynamoDbClient.get(params).promise(); await dynamoDbClient.update(params).promise(); await dynamoDb.delete(params).promise(); await dynamoDb.scan(params).promise(); await dynamoDb.query(params).promise();
v3:
const { DynamoDBClient } = require('@aws-sdk/client-dynamodb'); const { DynamoDBDocument, GetCommand, PutCommand, DeleteCommand, QueryCommand, UpdateCommand, ScanCommand, } = require('@aws-sdk/lib-dynamodb'); const dynamoDbClient = new DynamoDBClient(options); const docClient = DynamoDBDocument.from(dynamoDbClient); await docClient.send(new PutCommand(params)); await docClient.send(new GetCommand(params)); await docClient.send(new UpdateCommand(params)); await docClient.send(new DeleteCommand(params)); await docClient.send(new ScanCommand(params)); await docClient.send(new QueryCommand(params));
Wenn Sie früher einige Streams aus einer DynamoDB-Tabelle verarbeitet und die Unmarshall- Funktion verwendet haben, Version 2:
const AWS = require('aws-sdk'); const {unmarshall} = AWS.DynamoDB.Converter;
v3:
const { unmarshall } = require('@aws-sdk/util-dynamodb');
v2:
const AWS = require('aws-sdk'); const s3Client = new AWS.S3(options); s3Client.upload(params, callBack);
v3:
const { S3Client } = require('@aws-sdk/client-s3'); const { Upload } = require('@aws-sdk/lib-storage'); const s3Client = new S3Client(options); const parallelUploads3 = new Upload({ client: s3Client, params }); const result = await parallelUploads3.done();
v2:
const AWS = require('aws-sdk'); const snsClient = new AWS.SNS(options); await snsClient.publish(data).promise();
v3:
const { SNSClient, PublishCommand } = require('@aws-sdk/client-sns'); const snsClient = new SNSClient(options); await snsClient.send(new PublishCommand(data));