paint-brush
Hinweise zur Migration von AWS SDK v2 zu v3 (Javascript) – eine Kurzanleitung, die Ihnen weiterhilftvon@lregalado
6,871 Lesungen
6,871 Lesungen

Hinweise zur Migration von AWS SDK v2 zu v3 (Javascript) – eine Kurzanleitung, die Ihnen weiterhilft

von Lorenzo Regalado3m2023/07/22
Read on Terminal Reader
Read this story w/o Javascript

Zu lang; Lesen

Das AWS SDK für JavaScript (v2) wird dieses Jahr 2023 in den Wartungsmodus versetzt. Ich gebe Ihnen einige Tipps, die Ihnen bei der Regelmigration zum AWS SDK (v3) Zeit sparen.
featured image - Hinweise zur Migration von AWS SDK v2 zu v3 (Javascript) – eine Kurzanleitung, die Ihnen weiterhilft
Lorenzo Regalado HackerNoon profile picture
0-item

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.

Lambda

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.

DynamoDB

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');

S3

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();

SNS

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