のバージョン 2.x から 3.x に移行する AWS SDK for JavaScript - AWS SDK for JavaScript

AWS SDK for JavaScript V3 API リファレンスガイドでは、バージョン 3 (V3) のすべての API オペレーション AWS SDK for JavaScript について詳しく説明します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

のバージョン 2.x から 3.x に移行する AWS SDK for JavaScript

AWS SDK for JavaScript バージョン 3 はバージョン 2 のメジャーな書き換えです。このセクションでは、2 つのバージョンの違いと、 SDK 用の のバージョン 2 からバージョン 3 に移行する方法について説明します JavaScript。

codemod を使用してコードを SDK for JavaScript v3 に移行する

AWS SDK for JavaScript バージョン 3 (v3) には、認証情報、Amazon S3 マルチパートアップロード、DynamoDB ドキュメントクライアント、ウェイターなど、クライアント設定とユーティリティ用のモダナイズされたインターフェイスが付属しています。v2 で何が変更されたか、および各変更の v3 同等物については、AWS SDK for JavaScript GitHub リポジトリの移行ガイドを参照してください。

AWS SDK for JavaScript v3 を最大限に活用するには、以下で説明する Codemod スクリプトを使用することをお勧めします。

codemod を使用して既存の v2 コードを移行する

の codemod スクリプトのコレクションは、既存の AWS SDK for JavaScript (v2) アプリケーションを v3 を使用するように移行するaws-sdk-js-codemodのに役立ちますAPIs。次のように変換を実行できます。

$ npx aws-sdk-js-codemod -t v2-to-v3 PATH...

例えば、v2 から Amazon DynamoDB クライアントを作成し、listTables オペレーションを呼び出す次のコードがあるとします。

// example.ts import AWS from "aws-sdk"; const region = "us-west-2"; const client = new AWS.DynamoDB({ region }); await client.listTables({}).promise() .then(console.log) .catch(console.error);

example.ts に対する v2-to-v3 変換は次のように実行できます。

$ npx aws-sdk-js-codemod -t v2-to-v3 example.ts

次のように、DynamoDB インポートを v3 に変換し、v3 クライアントを作成して、listTables オペレーションを呼び出します。

// example.ts import { DynamoDB } from "@aws-sdk/client-dynamodb"; const region = "us-west-2"; const client = new DynamoDB({ region }); await client.listTables({}) .then(console.log) .catch(console.error);

一般的なユースケースの変換を実装しました。コードが正しく変換されない場合は、入力コードの例と確認された/期待される出力コードを含むバグレポートまたは機能リクエストを作成してください。特定のユースケースが既存の問題ですでに報告されている場合は、賛成票を投じて支持を示してください。

バージョン 3 の新機能とは

SDK for JavaScript (v3) のバージョン 3 には、次の新機能が含まれています。

モジュール化されたパッケージ

ユーザーは、サービスごとに個別のパッケージを使用できます。

新しいミドルウェアスタック

ユーザーはミドルウェアスタックを使用して、オペレーション呼び出しのライフサイクルを制御できます。

さらに、 SDKは で記述されています TypeScript。静的型付けなど、多くの利点があります。

重要

このガイドの v3 のコード例は、6 () ECMAScript で記述されていますES6。ES6 は、コードをより最新かつ読みやすくし、さらに多くのことを行う新しい構文と新機能を提供します。ES6 では、Node.js バージョン 13.x 以降を使用する必要があります。Node.js の最新バージョンをダウンロードしてインストールするには、Node.js downloads.を参照してください。詳細については、「JavaScript ES6/CommonJS 構文」を参照してください。

モジュール化されたパッケージ

SDK for JavaScript (v2) のバージョン 2 では AWS SDK、次のように 全体を使用する必要があります。

var AWS = require("aws-sdk");

アプリケーションSDKが多くの AWS サービスを使用している場合、全体のロードは問題ではありません。ただし、少数のサービスのみを使用する必要がある場合は AWS 、不要または使用しないコードでアプリケーションのサイズを増やすことを意味します。

v3 では、必要な個々の AWS サービスのみをロードして使用できます。これを次の例に示します。これにより、Amazon DynamoDB(DynamoDB)にアクセスできます。

import { DynamoDB } from "@aws-sdk/client-dynamodb";

個々の AWS サービスをロードして使用できるだけでなく、必要なサービスコマンドのみをロードして使用することもできます。これを次の例でDynamoDB クライアントとListTablesCommandコマンドにアクセスできることを示しています。

import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb";
重要

サブモジュールをモジュールにインポートしないでください。例えば、次のコードはエラーになる可能性があります。

import { CognitoIdentity } from "@aws-sdk/client-cognito-identity/CognitoIdentity";

正しいコードは、次のとおりです。

import { CognitoIdentity } from "@aws-sdk/client-cognito-identity";

コードサイズの比較

バージョン 2 (v2) では、us-west-2リージョン内のすべての Amazon DynamoDB テーブルを一覧表示するシンプルなコード例は、次のように表示されます。

var AWS = require("aws-sdk"); // Set the Region AWS.config.update({ region: "us-west-2" }); // Create DynamoDB service object var ddb = new AWS.DynamoDB({ apiVersion: "2012-08-10" }); // Call DynamoDB to retrieve the list of tables ddb.listTables({ Limit: 10 }, function (err, data) { if (err) { console.log("Error", err.code); } else { console.log("Tables names are ", data.TableNames); } });

v3 は次のようになります。

import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb"; const dbclient = new DynamoDBClient({ region: "us-west-2" }); try { const results = await dbclient.send(new ListTablesCommand); for (const item of results.TableNames) { console.log(item); } } catch (err) { console.error(err) }

aws-sdkのパッケージは、アプリケーションに約40MBを追加します。var AWS = require("aws-sdk")import {DynamoDB} from "@aws-sdk/client-dynamodb"に置き換えることで、そのオーバーヘッドを約 3 MB に削減します。インポートを DynamoDB クライアントとListTablesCommandのコマンドだけに限定することで、オーバーヘッドを 100 KB 以下に削減します。

// Load the DynamoDB client and ListTablesCommand command for Node.js import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb"; const dbclient = new DynamoDBClient({});

v3 でのコマンドの呼び出し

v2 または v3 コマンドを使用して v3 でオペレーションを実行できます。v3 コマンドを使用するには、 コマンドと必要な AWS Services パッケージクライアントをインポートし、 .sendメソッドを使用して async/await パターンを使用して コマンドを実行します。

v2 コマンドを使用するには、必要な AWS サービスパッケージをインポートし、コールバックまたは非同期/待機パターンを使用してパッケージ内で v2 コマンドを直接実行します。

v3 コマンドの使用

v3 は、各 AWS サービスパッケージの一連のコマンドを提供し、その AWS サービスのオペレーションを実行できます。 AWS のサービスをインストールした後、node-modules/@aws-sdk/client-PACKAGE_NAME/commands folder.のプロジェクトで利用可能なコマンドを参照できます。

使用したいコマンドをインポートする必要があります。例えば、次のコードは DynamoDB サービスおよびCreateTableCommandのコマンドをロードします。

import { DynamoDB, CreateTableCommand } from "@aws-sdk/client-dynamodb";

これらのコマンドを推奨の非同期/待機パターンで呼び出すには、次の構文を使用します。

CLIENT.send(new XXXCommand);

例えば、次の例では、推奨される非同期/待機 パターンを使用して DynamoDB テーブルを作成します。

import { DynamoDB, CreateTableCommand } from "@aws-sdk/client-dynamodb"; const dynamodb = new DynamoDB({ region: "us-west-2" }); const tableParams = { TableName: TABLE_NAME }; try { const data = await dynamodb.send(new CreateTableCommand(tableParams)); console.log("Success", data); } catch (err) { console.log("Error", err); };

v2 コマンドの使用

SDK で v2 コマンドを使用するには JavaScript、次のコードに示すように、完全な AWS サービスパッケージをインポートします。

const { DynamoDB } = require('@aws-sdk/client-dynamodb');

推奨される非同期/待機パターンで v2 コマンドを呼び出すには、次の構文を使用します。

client.command(parameters);

次の例では、v2 createTable コマンドを使用して、推奨される非同期/待機パターンを使用して DynamoDB テーブルを作成します。

const { DynamoDB } = require('@aws-sdk/client-dynamodb'); const dynamoDB = new DynamoDB({ region: 'us-west-2' }); var tableParams = { TableName: TABLE_NAME }; async function run() => { try { const data = await dynamoDB.createTable(tableParams); console.log("Success", data); } catch (err) { console.log("Error", err); } }; run();

次の例では、v2 createBucket コマンドを使用して、コールバックパターンを使用して Amazon S3 バケットを作成します。

const { S3 } = require('@aws-sdk/client-s3'); const s3 = new S3({ region: 'us-west-2' }); var bucketParams = { Bucket : BUCKET_NAME }; function run() { s3.createBucket(bucketParams, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data.Location); } }) }; run();

新しいミドルウェアスタック

の v2 SDKでは、イベントリスナーをリクエストにアタッチすることで、ライフサイクルの複数のステージにわたってリクエストを変更できるようになりました。このアプローチでは、リクエストのライフサイクル中に問題が発生したことをデバッグすることが困難になる可能性があります。

v3 では、新しいミドルウェアスタックを使用して、オペレーションコールのライフサイクルを制御できます。このアプローチには、いくつかの利点があります。スタック内の各ミドルウェアステージは、リクエストオブジェクトに変更を加えた後、次のミドルウェアステージを呼び出します。また、エラーに至るまでのミドルウェアステージが呼び出されたかを正確に確認できるため、スタック内の問題のデバッグがはるかに簡単になります。

次の例では、ミドルウェアを使用して (先ほど作成して示した) Amazon DynamoDB クライアントにカスタムヘッダーを追加します。最初の引数は呼び出すスタックの次のミドルウエアステージであるnextを受け入れる関数と、呼び出され操作に関する情報を含むオブジェクトであるcontextを受け入れる関数です。この関数は、操作とリクエストに渡されるパラメータを含むオブジェクトのargsを受け入れる関数を返します。次のミドルウェアをargsで呼び出した結果を返します

dbclient.middlewareStack.add( (next, context) => args => { args.request.headers["Custom-Header"] = "value"; return next(args); }, { name: "my-middleware", override: true, step: "build" } ); dbclient.send(new PutObjectCommand(params));