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