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
$ 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.
モジュール化されたパッケージ
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(newXXX
Command);
例えば、次の例では、推奨される非同期/待機 パターンを使用して 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));