AWS SDK for JavaScript (v2) bu yıl (2023) bakım moduna geçirilecek. V3 bir süredir mevcut ve aynı zamanda mevcut LTS düğümü sürümü olan Node18 için daha yeni lambda çalışma zamanına dahil edilen sürümdür.
Dolayısıyla, lambdalarınızı Node18 Lambda çalışma zamanına güncellemek istiyorsanız, SDK v2'yi mevcut lambda işlevinize eklemeniz veya Node16'da kalmanız gerekir ( kendi çalışma zamanınızı yuvarlayabilirsiniz, ancak bu başka bir konudur).
Yeni SDK sürümünün avantajları arasında ihtiyacınız olan şeyler de dahil olmak üzere daha fazla modülerlik, doğrudan yeni lambda görüntüsünde gönderildiği için daha küçük paket boyutu, TypeScript desteği ve bazı SDK davranışlarını özelleştirmek için özel bir ara yazılım yığını (henüz kullanmadım) yer alıyor. .
Taşımak çok zor değil; bu dokümanı takip edebilirsiniz. Ancak, size Google'da arama/sorgulama zamanından tasarruf etmenizi sağlayacak, ilk başta bariz olmayan bazı ayrıntılarla karşılaştım.
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
Yazma sırasında @aws-sdk/util-utf8-node paketi , @aws-sdk/util-utf8 lehine kullanımdan kaldırılmış olarak işaretlendi. Ancak lambda çalışma zamanında nodejs18.x henüz dahil edilmemiştir, dolayısıyla onu kullanmak istiyorsanız proje üretim bağımlılıklarınıza eklemeniz gerekir.
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));
Bir DynamoDB tablosundan bazı akışları işlediyseniz ve unmarshall işlevini kullandıysanız 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));