paint-brush
Lưu ý khi di chuyển AWS SDK v2 sang v3 ( Javascript) - Hướng dẫn nhanh để trợ giúp bạntừ tác giả@lregalado
7,176 lượt đọc
7,176 lượt đọc

Lưu ý khi di chuyển AWS SDK v2 sang v3 ( Javascript) - Hướng dẫn nhanh để trợ giúp bạn

từ tác giả Lorenzo Regalado3m2023/07/22
Read on Terminal Reader

dài quá đọc không nổi

AWS SDK dành cho JavaScript (v2) sẽ được đưa vào chế độ bảo trì vào năm 2023 này. Tôi chia sẻ một số mẹo giúp bạn tiết kiệm thời gian khi di chuyển quy tắc sang AWS SDK (v3)
featured image - Lưu ý khi di chuyển AWS SDK v2 sang v3 ( Javascript) - Hướng dẫn nhanh để trợ giúp bạn
Lorenzo Regalado HackerNoon profile picture
0-item

AWS SDK dành cho JavaScript (v2) sẽ được đưa vào chế độ bảo trì trong năm nay (2023). Phiên bản v3 đã có sẵn được một thời gian và đây là phiên bản có trong thời gian chạy lambda mới hơn cho Node18, đây cũng là phiên bản nút LTS hiện tại.


Vì vậy, nếu bạn muốn cập nhật lambda của mình lên thời gian chạy Lambda Node18, bạn phải thêm SDK v2 vào chức năng lambda hiện tại của mình hoặc ở lại Node16 ( bạn có thể cuộn thời gian chạy của riêng mình , nhưng đó là một chủ đề khác).


Lợi ích của phiên bản SDK mới là có nhiều mô-đun hơn, bao gồm những gì bạn cần, kích thước gói nhỏ hơn khi được vận chuyển trực tiếp trên hình ảnh lambda mới hơn, hỗ trợ Bản mô tả và ngăn xếp phần mềm trung gian tùy chỉnh để tùy chỉnh một số hành vi SDK (mà tôi chưa sử dụng).


Di chuyển không quá khó; bạn có thể làm theo tài liệu này. Tuy nhiên, tôi đã gặp phải một số chi tiết không rõ ràng lúc đầu, điều này sẽ giúp bạn tiết kiệm thời gian tra cứu/gợi ý.

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


Tại thời điểm viết bài, gói @aws-sdk/util-utf8-node được đánh dấu là không dùng nữa để ủng hộ @aws-sdk/util-utf8 . Nhưng trong thời gian chạy lambda, nodejs18.x chưa được bao gồm, vì vậy nếu bạn muốn sử dụng nó, bạn phải thêm nó vào phần phụ thuộc sản xuất dự án của mình.

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


Nếu bạn đã từng xử lý một số luồng từ bảng DynamoDB và sử dụng chức năng không theo thứ tự , 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();

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