paint-brush
AWS SDK v2 から v3 (JavaScript) への移行に関する注意事項 - 役立つクイックガイド@lregalado
6,831 測定値
6,831 測定値

AWS SDK v2 から v3 (JavaScript) への移行に関する注意事項 - 役立つクイックガイド

Lorenzo Regalado3m2023/07/22
Read on Terminal Reader

長すぎる; 読むには

AWS SDK for JavaScript (v2) は、2023 年にメンテナンス モードになります。ルールを AWS SDK (v3) に移行する時間を節約するためのヒントをいくつか紹介します。
featured image - AWS SDK v2 から v3 (JavaScript) への移行に関する注意事項 - 役立つクイックガイド
Lorenzo Regalado HackerNoon profile picture
0-item

AWS SDK for JavaScript (v2) は今年 (2023 年) メンテナンスモードになります。 v3 はしばらく前から利用可能であり、Node18 の新しいラムダ ランタイムに含まれているバージョンであり、現在の LTS ノード バージョンでもあります。


したがって、ラムダを Node18 Lambda ランタイムに更新したい場合は、SDK v2 を現在のラムダ関数に追加するか、Node16 のままにする必要があります (独自のランタイムをロールすることもできますが、それは別のトピックです)。


新しい SDK バージョンの利点は、必要なものを含むモジュール性の向上、新しいラムダ イメージに直接同梱されるパッケージ サイズの縮小、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 がまだ含まれていないため、使用したい場合は、プロジェクトの運用依存関係に追加する必要があります。

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


DynamoDB テーブルからのいくつかのストリームを処理し、アンマーシャル関数を使用していた場合、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));