paint-brush
Remarques sur la migration d'AWS SDK v2 vers v3 ( Javascript) - Un guide rapide pour vous aiderpar@lregalado
7,586 lectures
7,586 lectures

Remarques sur la migration d'AWS SDK v2 vers v3 ( Javascript) - Un guide rapide pour vous aider

par Lorenzo Regalado3m2023/07/22
Read on Terminal Reader

Trop long; Pour lire

Le AWS SDK for JavaScript (v2) sera mis en mode maintenance cette année 2023. Je partage quelques conseils qui vous feront gagner du temps règle de migration vers AWS SDK (v3)
featured image - Remarques sur la migration d'AWS SDK v2 vers v3 ( Javascript) - Un guide rapide pour vous aider
Lorenzo Regalado HackerNoon profile picture
0-item

Le kit AWS SDK pour JavaScript (v2) sera mis en mode maintenance cette année (2023). La v3 est disponible depuis un certain temps, et c'est la version incluse dans le nouveau runtime lambda pour Node18, qui est également la version actuelle du nœud LTS.


Donc, si vous souhaitez mettre à jour vos lambdas vers l'environnement d'exécution Node18 Lambda, vous devez ajouter le SDK v2 à votre fonction lambda actuelle ou rester dans Node16 (vous pouvez lancer votre propre environnement d'exécution , mais c'est un autre sujet).


Les avantages de la nouvelle version du SDK sont plus de modularité, y compris ce dont vous avez besoin, une taille de paquet plus petite telle qu'elle est livrée directement sur la nouvelle image lambda, la prise en charge de Typescript et une pile de middleware personnalisée pour personnaliser certains comportements du SDK (que je n'ai pas encore utilisé).


La migration n'est pas trop difficile ; tu peux suivre cette doc . Cependant, j'ai rencontré des détails qui n'étaient pas évidents au début et qui vous feront gagner du temps sur Google/invite.

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


Au moment de la rédaction, le package @aws-sdk/util-utf8-node est marqué comme obsolète au profit de @aws-sdk/util-utf8 . Mais dans le runtime lambda, nodejs18.x n'est pas encore inclus, donc si vous voulez l'utiliser, vous devez l'ajouter aux dépendances de production de votre projet.

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 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 UpdateCommand(params)); await docClient.send(new DeleteCommand(params)); await docClient.send(new ScanCommand(params)); await docClient.send(new QueryCommand(params));


Si vous aviez l'habitude de traiter certains flux à partir d'une table DynamoDB et que vous utilisiez la fonction unmarshall , v2 :

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

SRS

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