paint-brush
有关将 AWS 开发工具包 v2 迁移到 v3 (Javascript) 的注意事项 - 帮助您的快速指南经过@lregalado
7,586 讀數
7,586 讀數

有关将 AWS 开发工具包 v2 迁移到 v3 (Javascript) 的注意事项 - 帮助您的快速指南

经过 Lorenzo Regalado3m2023/07/22
Read on Terminal Reader

太長; 讀書

AWS SDK for JavaScript (v2) 将于今年 2023 年进入维护模式。我分享一些技巧,可以节省您将规则迁移到 AWS SDK (v3) 的时间
featured image - 有关将 AWS 开发工具包 v2 迁移到 v3 (Javascript) 的注意事项 - 帮助您的快速指南
Lorenzo Regalado HackerNoon profile picture
0-item

AWS SDK for JavaScript (v2) 将于今年 (2023 年) 进入维护模式。 v3 已经发布了一段时间,它是 Node18 的较新 lambda 运行时中包含的版本,也是当前的 LTS 节点版本。


因此,如果您想将 lambda 更新到 Node18 Lambda 运行时,则必须将 SDK v2 添加到当前的 lambda 函数或保留在 Node16 中(您可以推出自己的运行时,但这是另一个主题)。


新 SDK 版本的优点是更加模块化,包括您所需要的、直接在较新的 lambda 映像上提供的更小的包大小、Typescript 支持以及用于自定义某些 SDK 行为的自定义中间件堆栈(我尚未使用)。


迁移并不太困难;你可以按照这个文档。然而,我遇到了一些一开始并不明显的细节,这将为您节省一些谷歌搜索/提示的时间。

拉姆达

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


在撰写本文时,包@aws-sdk/util-utf8-node被标记为已弃用,转而使用@aws-sdk/util-utf8 。但在 lambda 运行时中,nodejs18.x 尚未包含在内,因此如果您想使用它,则必须将其添加到项目生产依赖项中。

动态数据库

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


如果您曾经处理 DynamoDB 表中的一些流并使用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();

社交网络服务

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